@hellpig/anarchy-engine 22.0.2 → 22.0.3
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/Abstract/Entities/AbstractEntity.js.map +1 -1
- package/dist/Abstract/Factories/AbstractFactory.js.map +1 -1
- package/dist/Abstract/Factories/ReactiveFactory.js.map +1 -1
- package/dist/Abstract/Loaders/AbstractLoader.js.map +1 -1
- package/dist/Abstract/Mixins/WithWrapperIdMixin.js.map +1 -1
- package/dist/Abstract/Models/THtmlElementStyleDeclaration.d.ts +4 -4
- package/dist/Abstract/Registries/AbstractEntityAsyncRegistry.js.map +1 -1
- package/dist/Abstract/Registries/AbstractEntityRegistry.js.map +1 -1
- package/dist/Abstract/Registries/AbstractResourceAsyncRegistry.js.map +1 -1
- package/dist/Abstract/Registries/AbstractSimpleRegistry.js.map +1 -1
- package/dist/Abstract/Registries/AbstractWatcherRegistry.js.map +1 -1
- package/dist/Abstract/Registries/Mixin/Registry/WithBaseAccessorsRegistry.js.map +1 -1
- package/dist/Abstract/Registries/Mixin/Registry/WithReactiveRegistry.js.map +1 -1
- package/dist/Abstract/Services/AbstractService.js.map +1 -1
- package/dist/Abstract/Watchers/AbstractWatcher.js.map +1 -1
- package/dist/Abstract/Watchers/AbstractWatcherWithState.js.map +1 -1
- package/dist/Abstract/Wrappers/AbstractWrapper.js.map +1 -1
- package/dist/Actor/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Actor/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Actor/Adapters/Helpers/ActorStatesConfigToParams.js.map +1 -1
- package/dist/Actor/Adapters/Helpers/Model3dSettingsConfigToParams.js.map +1 -1
- package/dist/Actor/Entities/Actor/Actor.js.map +1 -1
- package/dist/Actor/Factories/ActorFactory.js.map +1 -1
- package/dist/Actor/Mixins/WithActorStates.js.map +1 -1
- package/dist/Actor/Registries/ActorRegistry.js.map +1 -1
- package/dist/Actor/Registries/Model3dToActorConnectionRegistry.js.map +1 -1
- package/dist/Actor/Services/ActorService.js.map +1 -1
- package/dist/Actor/TransformDrive/ActorTransformDrive.js.map +1 -1
- package/dist/Actor/Utils/ActorUtils.js.map +1 -1
- package/dist/Animations/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Animations/Loader/AnimationsLoader.js.map +1 -1
- package/dist/Animations/Registries/AnimationsMetaInfoRegistry.js.map +1 -1
- package/dist/Animations/Registries/AnimationsResourceAsyncRegistry.js.map +1 -1
- package/dist/Animations/Services/AnimationsService.js.map +1 -1
- package/dist/Animations/Utils/SerializationUtils.js.map +1 -1
- package/dist/Audio/Adapters/AudioConfigToParams.js.map +1 -1
- package/dist/Audio/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Audio/Factories/AudioFactory.js.map +1 -1
- package/dist/Audio/Loader/AudioLoader.js.map +1 -1
- package/dist/Audio/Registries/AudioListenersRegistry.js.map +1 -1
- package/dist/Audio/Registries/AudioMetaInfoRegistry.js.map +1 -1
- package/dist/Audio/Registries/AudioRegistry.js.map +1 -1
- package/dist/Audio/Registries/AudioResourceAsyncRegistry.js.map +1 -1
- package/dist/Audio/Services/AudioService.js.map +1 -1
- package/dist/Audio/TransformDrive/Audio3dTransformDrive.js.map +1 -1
- package/dist/Audio/Utils/AudioUtils.js.map +1 -1
- package/dist/Audio/Utils/DebugAudioRenderer.js.map +1 -1
- package/dist/Audio/Wrappers/AbstractAudioWrapper.js.map +1 -1
- package/dist/Audio/Wrappers/Audio3dWrapper.js.map +1 -1
- package/dist/Audio/Wrappers/AudioWrapper.js.map +1 -1
- package/dist/Camera/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Camera/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Camera/Factories/CameraFactory.js.map +1 -1
- package/dist/Camera/Registries/AbstractCameraRegistry.js.map +1 -1
- package/dist/Camera/Services/CameraService.js.map +1 -1
- package/dist/Camera/TransformDrive/CameraTransformDrive.js.map +1 -1
- package/dist/Camera/Utils/CameraUtils.js.map +1 -1
- package/dist/Camera/Wrappers/Accessors.js.map +1 -1
- package/dist/Camera/Wrappers/OrthographicCameraWrapper.js.map +1 -1
- package/dist/Camera/Wrappers/PerspectiveCameraWrapper.js.map +1 -1
- package/dist/Collisions/Mixins/WithCollisions.js.map +1 -1
- package/dist/Collisions/Services/BvhService.js.map +1 -1
- package/dist/Collisions/Services/CollisionsService.js.map +1 -1
- package/dist/Color/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Color/Wrappers/ColorWrapper.js.map +1 -1
- package/dist/Context/AmbientContext/AmbientContext.js.map +1 -1
- package/dist/Controls/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Controls/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Controls/Factories/ControlsFactory.js.map +1 -1
- package/dist/Controls/Loop/ControlsLoopEffect.js.map +1 -1
- package/dist/Controls/Registries/ControlsRegistry.js.map +1 -1
- package/dist/Controls/Services/ControlsService.js.map +1 -1
- package/dist/Controls/Utils/ControlsUtils.js.map +1 -1
- package/dist/Controls/Wrappers/FpsControls/FpsControlsAccessors.js.map +1 -1
- package/dist/Controls/Wrappers/FpsControls/FpsControlsWrapper.js.map +1 -1
- package/dist/Controls/Wrappers/FpsControls/FpsControlsWrapperHelper.js.map +1 -1
- package/dist/Controls/Wrappers/OrbitControls/OrbitControlsAccessors.js.map +1 -1
- package/dist/Controls/Wrappers/OrbitControls/OrbitControlsWrapper.js.map +1 -1
- package/dist/Controls/Wrappers/OrbitControls/OrbitControlsWrapperHelper.js.map +1 -1
- package/dist/Distance/Utils/DistanceUtils.js.map +1 -1
- package/dist/EnvMap/Adapters/ConfigToParams.js.map +1 -1
- package/dist/EnvMap/Adapters/EntityToConfig.js.map +1 -1
- package/dist/EnvMap/Factories/EnvMapFactory.js.map +1 -1
- package/dist/EnvMap/Loader/EnvMapLoader.js.map +1 -1
- package/dist/EnvMap/Registries/EnvMapMetaInfoRegistry.js.map +1 -1
- package/dist/EnvMap/Registries/EnvMapRegistry.js.map +1 -1
- package/dist/EnvMap/Registries/EnvMapTextureAsyncRegistry.js.map +1 -1
- package/dist/EnvMap/Services/EnvMapService.js.map +1 -1
- package/dist/EnvMap/Wrappers/EnvMapWrapper.js.map +1 -1
- package/dist/Fog/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Fog/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Fog/Factories/FogFactory.js.map +1 -1
- package/dist/Fog/Registries/FogRegistry.js.map +1 -1
- package/dist/Fog/Services/FogService.js.map +1 -1
- package/dist/Fog/Wrappers/FogWrapper.js.map +1 -1
- package/dist/Fsm/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Fsm/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Fsm/Entities/FsmSource.js.map +1 -1
- package/dist/Fsm/Factories/FsmInstanceFactory.js.map +1 -1
- package/dist/Fsm/Factories/FsmSourceFactory.js.map +1 -1
- package/dist/Fsm/Registries/FsmInstanceRegistry.js.map +1 -1
- package/dist/Fsm/Registries/FsmSourceRegistry.js.map +1 -1
- package/dist/Fsm/Services/FsmInstanceService.js.map +1 -1
- package/dist/Fsm/Services/FsmService.js.map +1 -1
- package/dist/Fsm/Services/FsmSourceService.js.map +1 -1
- package/dist/Fsm/Wrappers/FsmWrapper.js.map +1 -1
- package/dist/Global/Decorators/ContainerDecorator.js.map +1 -1
- package/dist/Global/Utils/ContainerUtils.js.map +1 -1
- package/dist/Intersections/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Intersections/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Intersections/Factories/IntersectionsWatcherFactory.js.map +1 -1
- package/dist/Intersections/Registries/IntersectionsWatcherRegistry.js.map +1 -1
- package/dist/Intersections/Services/IntersectionsWatcherService.js.map +1 -1
- package/dist/Intersections/Utils/IntersectionsWatcherUtils.js.map +1 -1
- package/dist/Intersections/Watchers/AbstractIntersectionsWatcher.js.map +1 -1
- package/dist/Intersections/Watchers/IntersectionsCameraWatcher.js.map +1 -1
- package/dist/Intersections/Watchers/IntersectionsDirectionWatcher.js.map +1 -1
- package/dist/Keyboard/Factories/KeyWatcherFactory.js.map +1 -1
- package/dist/Keyboard/Registries/KeyWatcherRegistry.js.map +1 -1
- package/dist/Keyboard/Services/KeyboardService.js.map +1 -1
- package/dist/Keyboard/Utils/KeysRxJsUtils.js.map +1 -1
- package/dist/Keyboard/Utils/KeysUtils.js.map +1 -1
- package/dist/Keyboard/Watchers/KeyComboWatcher.js.map +1 -1
- package/dist/Keyboard/Watchers/KeyPressWatcher.js.map +1 -1
- package/dist/Keyboard/Watchers/KeyReleaseWatcher.js.map +1 -1
- package/dist/Kinematic/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Kinematic/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Kinematic/Constants/KinematicConstants.js.map +1 -1
- package/dist/Kinematic/Utils/KinematicUtils.js.map +1 -1
- package/dist/Light/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Light/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Light/Factories/LightFactory.js.map +1 -1
- package/dist/Light/Registries/LightRegistry.js.map +1 -1
- package/dist/Light/Services/LightService.js.map +1 -1
- package/dist/Light/TransformDrive/LightTransformDrive.js.map +1 -1
- package/dist/Light/Utils/Utils.js.map +1 -1
- package/dist/Light/Wrappers/AbstractLightWrapper.js.map +1 -1
- package/dist/Light/Wrappers/AmbientLightWrapper.js.map +1 -1
- package/dist/Light/Wrappers/DirectionalLightWrapper.js.map +1 -1
- package/dist/Light/Wrappers/HemisphereLightWrapper.js.map +1 -1
- package/dist/Light/Wrappers/LightWrapperHelper.js.map +1 -1
- package/dist/Light/Wrappers/PointLightWrapper.js.map +1 -1
- package/dist/Light/Wrappers/RectAreaLightWrapper.js.map +1 -1
- package/dist/Light/Wrappers/SpotLightWrapper.js.map +1 -1
- package/dist/LoadingManager/Factories/LoadingManagerFactory.js.map +1 -1
- package/dist/LoadingManager/Registries/LoadingManagerRegistry.js.map +1 -1
- package/dist/LoadingManager/Services/LoadingManagerService.js.map +1 -1
- package/dist/LoadingManager/Wrappers/LoadingManagerWrapper.js.map +1 -1
- package/dist/Loop/Constants/LoopsDefaultSettings.js.map +1 -1
- package/dist/Loop/Entities/DeltaCalculator.js.map +1 -1
- package/dist/Loop/Entities/Loop.js.map +1 -1
- package/dist/Loop/Factories/LoopFactory.js.map +1 -1
- package/dist/Loop/Registries/LoopRegistry.js.map +1 -1
- package/dist/Loop/Services/LoopService.js.map +1 -1
- package/dist/Loop/Utils/LoopDebugUtils.js.map +1 -1
- package/dist/Loop/Utils/LoopUtils.js.map +1 -1
- package/dist/Material/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Material/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Material/Constants/Material/MaterialMap.js.map +1 -1
- package/dist/Material/Factories/MaterialFactory.js.map +1 -1
- package/dist/Material/Mixins/WithMaterial.js.map +1 -1
- package/dist/Material/Registries/MaterialRegistry.js.map +1 -1
- package/dist/Material/Services/MaterialService.js.map +1 -1
- package/dist/Material/Utils/MaterialUtils.js.map +1 -1
- package/dist/Material/Wrappers/MaterialWrapper.js.map +1 -1
- package/dist/Math/Utils/AnglesUtils.js.map +1 -1
- package/dist/Math/Utils/DistanceUtils.js.map +1 -1
- package/dist/Measurements/Constants/Distance.js.map +1 -1
- package/dist/Measurements/Constants/Time.js.map +1 -1
- package/dist/Measurements/Utils/MeasurementsUtils.d.ts +1 -1
- package/dist/Measurements/Utils/MeasurementsUtils.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveBy2dMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveBy3dMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveBy4dMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByWMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByXMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByYMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByZMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Position/WithPosition2dMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Position/WithPosition3dMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Position/WithPosition4dMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Position/WithPositionMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByWMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByXMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByXyzMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByYMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByZMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/Scalable/WithScaleMixin.js.map +1 -1
- package/dist/Mixins/GameObjects/Mixins/WithObject3D.js.map +1 -1
- package/dist/Mixins/Generics/DestroyableMixin.js.map +1 -1
- package/dist/Mixins/Generics/ExtractSerializableRegistrableFields.js.map +1 -1
- package/dist/Mixins/Generics/WithActiveEntityServiceMixin.js.map +1 -1
- package/dist/Mixins/Generics/WithActiveMixin.js.map +1 -1
- package/dist/Mixins/Generics/WithNameAndNameAccessorsMixin.js.map +1 -1
- package/dist/Mixins/Services/WithCreateFromConfigService.js.map +1 -1
- package/dist/Mixins/Services/WithCreateService.js.map +1 -1
- package/dist/Mixins/Services/WithFactoryService.js.map +1 -1
- package/dist/Mixins/Services/WithRegistryService.js.map +1 -1
- package/dist/Mixins/Services/WithSceneGetterService.js.map +1 -1
- package/dist/Mixins/Services/WithSerializableEntities.js.map +1 -1
- package/dist/Mixins/Services/WithSerializeAllResources.js.map +1 -1
- package/dist/Models3d/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Models3d/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Models3d/Entities/Model3d.js.map +1 -1
- package/dist/Models3d/Factories/Models3dFactory.js.map +1 -1
- package/dist/Models3d/Loaders/Loader3dCore.js.map +1 -1
- package/dist/Models3d/Loaders/Models3dLoader.js.map +1 -1
- package/dist/Models3d/Mixins/WithModel3dEntities.js.map +1 -1
- package/dist/Models3d/Registries/Model3dRawToModel3dConnectionRegistry.js.map +1 -1
- package/dist/Models3d/Registries/Models3dMetaInfoRegistry.js.map +1 -1
- package/dist/Models3d/Registries/Models3dRegistry.js.map +1 -1
- package/dist/Models3d/Registries/Models3dResourceAsyncRegistry.js.map +1 -1
- package/dist/Models3d/Services/Models3dService.js.map +1 -1
- package/dist/Models3d/Utils/SerializationUtils.js.map +1 -1
- package/dist/Models3d/Utils/UtilsModel3d.js.map +1 -1
- package/dist/Models3d/Utils/UtilsModels3dService.js.map +1 -1
- package/dist/Models3d/Utils/UtilsPrimitiveModels3d.js.map +1 -1
- package/dist/Mouse/Factories/MouseClickWatcherFactory.js.map +1 -1
- package/dist/Mouse/Factories/MousePositionWatcherFactory.js.map +1 -1
- package/dist/Mouse/Registries/MouseClickWatcherRegistry.js.map +1 -1
- package/dist/Mouse/Registries/MousePositionWatcherRegistry.js.map +1 -1
- package/dist/Mouse/Services/MouseService.js.map +1 -1
- package/dist/Mouse/Utils/MouseUtils.js.map +1 -1
- package/dist/Mouse/Watchers/MouseClickWatcher.js.map +1 -1
- package/dist/Mouse/Watchers/MousePositionWatcher.js.map +1 -1
- package/dist/Particles/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Particles/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Particles/Factories/ParticlesFactory.js.map +1 -1
- package/dist/Particles/Registries/ParticlesRegistry.js.map +1 -1
- package/dist/Particles/Services/ParticlesService.js.map +1 -1
- package/dist/Particles/TransformDrive/ParticlesTransformDrive.js.map +1 -1
- package/dist/Particles/Wrappers/ParticlesWrapper.js.map +1 -1
- package/dist/Physics/Adapters/EntityToConfig.d.ts +1 -1
- package/dist/Physics/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Physics/Adapters/PhysicsBodyConfigToParams.js.map +1 -1
- package/dist/Physics/Adapters/PhysicsWorldConfigToParams.js.map +1 -1
- package/dist/Physics/Constants/RigidBodyTypesMap.d.ts +1 -1
- package/dist/Physics/Constants/RigidBodyTypesMap.js +1 -1
- package/dist/Physics/Constants/RigidBodyTypesMap.js.map +1 -1
- package/dist/Physics/Entities/PhysicsBody.js.map +1 -1
- package/dist/Physics/Entities/PhysicsBodyUtils.d.ts +1 -1
- package/dist/Physics/Entities/PhysicsBodyUtils.js +1 -1
- package/dist/Physics/Entities/PhysicsBodyUtils.js.map +1 -1
- package/dist/Physics/Factories/PhysicsBodyFactory.js.map +1 -1
- package/dist/Physics/Mixins/WithPhysicsBodyEntities.js.map +1 -1
- package/dist/Physics/Models/TPhysicsWorldService.d.ts +1 -1
- package/dist/Physics/Registries/PhysicsBodyRegistry.js.map +1 -1
- package/dist/Physics/Renderers/PhysicsDebugRenderer.d.ts +1 -1
- package/dist/Physics/Renderers/PhysicsDebugRenderer.js.map +1 -1
- package/dist/Physics/Services/PhysicsBodyService.js.map +1 -1
- package/dist/Physics/Services/PhysicsWorldService.js +1 -1
- package/dist/Physics/Services/PhysicsWorldService.js.map +1 -1
- package/dist/Physics/Utils/ParamsUtils.js.map +1 -1
- package/dist/Physics/Utils/PhysicsMovementUtils.d.ts +2 -2
- package/dist/Physics/Utils/PhysicsMovementUtils.js +1 -1
- package/dist/Physics/Utils/PhysicsMovementUtils.js.map +1 -1
- package/dist/Renderer/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Renderer/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Renderer/Factories/RendererFactory.js.map +1 -1
- package/dist/Renderer/Loop/RendererLoopEffect.js.map +1 -1
- package/dist/Renderer/Mixins/WithThreeJsRendererParamsAccessors.js.map +1 -1
- package/dist/Renderer/Mixins/WithThreeJsRendererPropsAccessors.js.map +1 -1
- package/dist/Renderer/Registries/RendererRegistry.js.map +1 -1
- package/dist/Renderer/Services/RendererService.js.map +1 -1
- package/dist/Renderer/Wrappers/Accessors.js.map +1 -1
- package/dist/Renderer/Wrappers/RendererWrapper.js.map +1 -1
- package/dist/Scene/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Scene/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Scene/Factories/SceneFactory.js.map +1 -1
- package/dist/Scene/Registries/SceneRegistry.js.map +1 -1
- package/dist/Scene/Services/ScenesService.js.map +1 -1
- package/dist/Scene/Wrappers/SceneWrapper.js.map +1 -1
- package/dist/Space/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Space/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Space/Entities/Space.js.map +1 -1
- package/dist/Space/Entities/SpaceFromConfig.js.map +1 -1
- package/dist/Space/Factories/SpaceFactory.js.map +1 -1
- package/dist/Space/Registries/SpaceRegistry.js.map +1 -1
- package/dist/Space/Services/SpaceService.js.map +1 -1
- package/dist/Space/Utils/CanvasUtils.js.map +1 -1
- package/dist/Space/Utils/CreateEntitiesUtils.js.map +1 -1
- package/dist/Space/Utils/CreateLoopsUtils.js.map +1 -1
- package/dist/Space/Utils/LoadResourcesUtils.js.map +1 -1
- package/dist/Space/Utils/PrepareServicesUtils.js.map +1 -1
- package/dist/Space/Utils/SchemaValidationUtils.js.map +1 -1
- package/dist/Space/Validators/SchemasValidator.js.map +1 -1
- package/dist/Space/Validators/ValidateConfig.js.map +1 -1
- package/dist/Space/Validators/ValidateSpace.js.map +1 -1
- package/dist/Spatial/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Spatial/Adapters/ConfigToParamsSpatialData.js.map +1 -1
- package/dist/Spatial/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Spatial/Factories/SpatialGridFactory.js.map +1 -1
- package/dist/Spatial/Mixins/WithReactivePosition.js.map +1 -1
- package/dist/Spatial/Mixins/WithReactiveRotation.js.map +1 -1
- package/dist/Spatial/Mixins/WithSpatial.js.map +1 -1
- package/dist/Spatial/Mixins/WithUpdateSpatialCell.js.map +1 -1
- package/dist/Spatial/Registries/SpatialGridRegistry.js.map +1 -1
- package/dist/Spatial/Services/SpatialGridService.js.map +1 -1
- package/dist/Spatial/Services/SpatialHelper.js.map +1 -1
- package/dist/Spatial/Wrappers/SpatialCellWrapper.js.map +1 -1
- package/dist/Spatial/Wrappers/SpatialGridWrapper.js.map +1 -1
- package/dist/Text/Adapters/ConfigToParams.js.map +1 -1
- package/dist/Text/Adapters/EntityToConfig.js.map +1 -1
- package/dist/Text/Factories/TextFactory.js.map +1 -1
- package/dist/Text/Loop/TextLoopEffect.js.map +1 -1
- package/dist/Text/Registries/Text2dRegistry.js.map +1 -1
- package/dist/Text/Registries/Text2dRendererRegistry.js.map +1 -1
- package/dist/Text/Registries/Text3dRegistry.js.map +1 -1
- package/dist/Text/Registries/Text3dRendererRegistry.js.map +1 -1
- package/dist/Text/Registries/Text3dTextureRegistry.js.map +1 -1
- package/dist/Text/Renderers/Text2dRenderer.js.map +1 -1
- package/dist/Text/Renderers/Text3dRenderer.js.map +1 -1
- package/dist/Text/Renderers/TextRendererBuilder.js.map +1 -1
- package/dist/Text/Services/TextService.js.map +1 -1
- package/dist/Text/TransformDrive/TextTransformDrive.js.map +1 -1
- package/dist/Text/Utils/TextUtils.js.map +1 -1
- package/dist/Text/Wrappers/Accessors.js.map +1 -1
- package/dist/Text/Wrappers/Text2dWrapper.js.map +1 -1
- package/dist/Text/Wrappers/Text3dTextureWrapper.js.map +1 -1
- package/dist/Text/Wrappers/Text3dWrapper.js.map +1 -1
- package/dist/Text/Wrappers/TextTextureWrapper.js.map +1 -1
- package/dist/Text/Wrappers/TextWrapper.js.map +1 -1
- package/dist/Text/Wrappers/TextWrapperBuilder.js.map +1 -1
- package/dist/Text/Wrappers/TextWrapperHelper.js.map +1 -1
- package/dist/Texture/Loaders/TexturesLoader.js.map +1 -1
- package/dist/Texture/Registries/TextureMetaInfoRegistry.js.map +1 -1
- package/dist/Texture/Registries/TextureResourceAsyncRegistry.js.map +1 -1
- package/dist/Texture/Services/TextureService.js.map +1 -1
- package/dist/Texture/Utils/TextureServiceHelper.js.map +1 -1
- package/dist/ThreeLib/Utils/Object3dUtils.js.map +1 -1
- package/dist/TransformDrive/Adapters/EntityToConfig.js.map +1 -1
- package/dist/TransformDrive/Entities/Agents/AbstractTransformAgent.js.map +1 -1
- package/dist/TransformDrive/Entities/Agents/ConnectedTransformAgent.js.map +1 -1
- package/dist/TransformDrive/Entities/Agents/DefaultTransformAgent.js.map +1 -1
- package/dist/TransformDrive/Entities/Agents/KinematicTransformAgent.js.map +1 -1
- package/dist/TransformDrive/Entities/Agents/PhysicsTransformAgent.js.map +1 -1
- package/dist/TransformDrive/Entities/Connectors/DriveToTargetConnector.js.map +1 -1
- package/dist/TransformDrive/Entities/Drive/TransformDrive.js.map +1 -1
- package/dist/TransformDrive/Factories/TransformDriveFactory.js.map +1 -1
- package/dist/TransformDrive/Mixins/WithMutablePositionConnector.js.map +1 -1
- package/dist/TransformDrive/Mixins/WithMutableRotationConnector.js.map +1 -1
- package/dist/TransformDrive/Mixins/WithMutableScaleConnector.js.map +1 -1
- package/dist/TransformDrive/Mixins/WithProxyTransform.js.map +1 -1
- package/dist/TransformDrive/Registries/TransformDriveRegistry.js.map +1 -1
- package/dist/TransformDrive/Services/TransformDriveService.js.map +1 -1
- package/dist/TransformDrive/Utils/ActorDriveUtils.js.map +1 -1
- package/dist/TransformDrive/Utils/AgentUtils.js.map +1 -1
- package/dist/TransformDrive/Utils/KinematicAgentUtils.js.map +1 -1
- package/dist/TransformDrive/Utils/PhysicsTransformAgentUtils.d.ts +1 -1
- package/dist/TransformDrive/Utils/PhysicsTransformAgentUtils.js.map +1 -1
- package/dist/TransformDrive/Utils/TransformDriveUtils.js.map +1 -1
- package/dist/Utils/CheckUtils.js.map +1 -1
- package/dist/Utils/CoordsUtils.js.map +1 -1
- package/dist/Utils/DestroyUtils.js.map +1 -1
- package/dist/Utils/DomUtils.js.map +1 -1
- package/dist/Utils/EntityUtils.js.map +1 -1
- package/dist/Utils/RegistryAsyncUtils.js.map +1 -1
- package/dist/Utils/RegistryUtils.js.map +1 -1
- package/dist/Utils/RxJsUtils.js.map +1 -1
- package/dist/Utils/ScreenUtils.js.map +1 -1
- package/dist/Utils/TagsUtils.js.map +1 -1
- package/dist/Utils/TransformUtils.js.map +1 -1
- package/dist/Utils/WrapperHelpers.js.map +1 -1
- package/dist/assets/Loop.worker-D1bMWlsN.js.map +1 -1
- package/dist/packages/anarchy-shared/src/Utils/AsyncUtils.js.map +1 -1
- package/dist/packages/anarchy-shared/src/Utils/CssUtils.js.map +1 -1
- package/dist/packages/anarchy-shared/src/Utils/ObjectUtils.js.map +1 -1
- package/legal/NOTICE.md +1 -1
- package/legal/THIRD_PARTY_LICENSES.md +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhysicsTransformAgent.js","sources":["../../../../src/TransformDrive/Entities/Agents/PhysicsTransformAgent.ts"],"sourcesContent":["import type { TMeters, TMilliseconds, TRadians } from '@
|
|
1
|
+
{"version":3,"file":"PhysicsTransformAgent.js","sources":["../../../../src/TransformDrive/Entities/Agents/PhysicsTransformAgent.ts"],"sourcesContent":["import type { TMeters, TMilliseconds, TRadians } from '@hellpig/anarchy-engine/Math';\nimport { meters, radians } from '@hellpig/anarchy-engine/Measurements';\nimport type { TPhysicsBody, TPhysicsBodyConfig } from '@hellpig/anarchy-engine/Physics';\nimport { RigidBodyTypesNames } from '@hellpig/anarchy-engine/Physics';\nimport { TransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Constants';\nimport type {\n TAbstractTransformAgent,\n TPhysicsAgentDependencies,\n TPhysicsTransformAgent,\n TPhysicsTransformAgentParams,\n TReadonlyTransform,\n TRigidBodyTransformData\n} from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { applyLatestTransform, getPhysicsBodyTransform } from '@hellpig/anarchy-engine/TransformDrive/Utils';\nimport { isDefined, isNotDefined } from '@hellpig/anarchy-shared/Utils';\nimport type { Observable, Subscription } from 'rxjs';\nimport { BehaviorSubject, distinctUntilChanged, EMPTY, filter, map, switchMap, takeWhile, withLatestFrom } from 'rxjs';\nimport { Quaternion, Vector3 } from 'three';\n\nimport { AbstractTransformAgent } from './AbstractTransformAgent';\n\n// Physics bodies doesn't play well with manual set of position/rotation (e.g. position$.next(), rotation$.next() from any external sources).\n// In principle, it's better to avoid manual setting of position/rotation for physics objects.\n// But if you have to, first change active agent to \"Default\", then set position/rotation, and then switch back to \"Physics\" agent.\nexport function PhysicsTransformAgent(params: TPhysicsTransformAgentParams, { physicsLoop }: TPhysicsAgentDependencies): TPhysicsTransformAgent {\n const positionNoiseThreshold: TMeters = params.performance?.positionNoiseThreshold ?? meters(0.0000001);\n const rotationNoiseThreshold: TRadians = params.performance?.rotationNoiseThreshold ?? radians(0.0000001);\n const abstractTransformAgent: TAbstractTransformAgent = AbstractTransformAgent(params, TransformAgent.Physics);\n\n const onDeactivated$Sub: Subscription = abstractTransformAgent.onDeactivated$.pipe(takeWhile((): boolean => isNotDefined(params.onDeactivated))).subscribe((): void => {\n if (isNotDefined(params.onDeactivated)) {\n console.warn(\n 'PhysicsTransformAgent: onDeactivated is not defined. The physics body remains at the position it was the moment of deactivation. Please handle this (remove, move to a safe place), cause if left it as is could produce unexpected behavior.'\n );\n }\n });\n\n //apply the latest position/rotation to the physics body on activation\n const onActivated$Sub: Subscription = abstractTransformAgent.onActivated$.subscribe(({ position, rotation }: TReadonlyTransform): void => {\n if (isNotDefined(physicsBody$.value)) physicsBody$.next(params.physicsBody);\n applyLatestTransform(physicsBody$.value?.getRigidBody(), position, rotation);\n });\n\n let physicsSub$: Subscription | undefined = undefined;\n\n const physicsBody$: BehaviorSubject<TPhysicsBody | undefined> = new BehaviorSubject<TPhysicsBody | undefined>(undefined);\n\n // eslint-disable-next-line functional/immutable-data\n const agent: TPhysicsTransformAgent = Object.assign(abstractTransformAgent, {\n physicsBody$,\n serialize: (): TPhysicsBodyConfig => {\n const body: TPhysicsBody | undefined = physicsBody$.value;\n if (isNotDefined(body)) throw new Error(`[Serialization] [PhysicsTransformAgent]: physics body with name \"${params.physicsBody.name}\" is not defined for physics agent(id: \"${agent.id}\")`);\n\n return body.serialize();\n }\n });\n\n let previousPhysicsBodyType: RigidBodyTypesNames = physicsBody$.value?.getPhysicsBodyType() ?? RigidBodyTypesNames.Fixed;\n\n const prevBodyTypeSub: Subscription = physicsBody$.subscribe((physicsBody: TPhysicsBody | undefined): void => {\n if (isNotDefined(physicsBody)) return;\n previousPhysicsBodyType = physicsBody.getPhysicsBodyType();\n });\n\n const enabledSub$: Subscription = agent.enabled$\n .pipe(\n withLatestFrom(physicsBody$),\n distinctUntilChanged(\n ([prevEnabled, prevPhysicsBody]: [boolean, TPhysicsBody | undefined], [enabled, physicsBody]: [boolean, TPhysicsBody | undefined]): boolean =>\n prevEnabled === enabled && prevPhysicsBody === physicsBody\n )\n )\n .subscribe(([isEnabled, physicsBody]: [boolean, TPhysicsBody | undefined]): void | never => {\n if (isNotDefined(physicsBody?.getRigidBody())) return;\n if (!isEnabled) physicsBody.setPhysicsBodyType(RigidBodyTypesNames.KinematicPositionBased, false);\n else physicsBody?.setPhysicsBodyType(previousPhysicsBodyType, false);\n });\n\n const destroySub$: Subscription = abstractTransformAgent.destroy$.subscribe((): void => {\n //Stop subscriptions\n destroySub$.unsubscribe();\n physicsSub$?.unsubscribe();\n enabledSub$.unsubscribe();\n prevBodyTypeSub.unsubscribe();\n onDeactivated$Sub?.unsubscribe();\n onActivated$Sub?.unsubscribe();\n\n abstractTransformAgent.destroy$.next();\n physicsBody$.complete();\n });\n\n const tmpPosition = new Float32Array(3);\n const prevPosition = new Float32Array(3);\n const tmpRotation = new Float32Array(4);\n const prevRotation = new Float32Array(4);\n\n physicsSub$ = agent.enabled$\n .pipe(\n distinctUntilChanged(),\n switchMap((isEnabled: boolean): Observable<TMilliseconds | never> => (isEnabled ? physicsLoop.tick$ : EMPTY)),\n filter((): boolean => {\n const body: TPhysicsBody | undefined = physicsBody$.value;\n return isDefined(body) && body.getPhysicsBodyType() !== RigidBodyTypesNames.Fixed;\n }),\n //Get the latest transform data from the physics body every physics tick\n map((): TRigidBodyTransformData | undefined =>\n getPhysicsBodyTransform(physicsBody$.value?.getRigidBody(), prevPosition, prevRotation, tmpPosition, tmpRotation, positionNoiseThreshold, rotationNoiseThreshold)\n ),\n filter(isDefined)\n )\n .subscribe(({ position, rotation }): void => {\n if (position) agent.position$.next(new Vector3(position[0], position[1], position[2]));\n if (rotation) agent.rotation$.next(new Quaternion(rotation[0], rotation[1], rotation[2], rotation[3]));\n });\n\n return agent;\n}\n"],"names":["PhysicsTransformAgent","params","physicsLoop","positionNoiseThreshold","performance","meters","rotationNoiseThreshold","radians","abstractTransformAgent","AbstractTransformAgent","TransformAgent","Physics","onDeactivated$Sub","onDeactivated$","pipe","takeWhile","isNotDefined","onDeactivated","subscribe","console","warn","onActivated$Sub","onActivated$","position","rotation","physicsBody$","value","next","physicsBody","applyLatestTransform","getRigidBody","physicsSub$","BehaviorSubject","agent","Object","assign","serialize","body","Error","name","id","previousPhysicsBodyType","getPhysicsBodyType","RigidBodyTypesNames","Fixed","prevBodyTypeSub","enabledSub$","enabled$","withLatestFrom","distinctUntilChanged","prevEnabled","prevPhysicsBody","enabled","isEnabled","setPhysicsBodyType","KinematicPositionBased","destroySub$","destroy$","unsubscribe","complete","tmpPosition","Float32Array","prevPosition","tmpRotation","prevRotation","switchMap","tick$","EMPTY","filter","isDefined","map","getPhysicsBodyTransform","position$","Vector3","rotation$","Quaternion"],"mappings":"6uCAwBO,SAASA,sBAAsBC,QAAsCC,YAAEA,cAC5E,MAAMC,uBAAkCF,OAAOG,aAAaD,wBAA0BE,OAAO,MACvFC,uBAAmCL,OAAOG,aAAaE,wBAA0BC,QAAQ,MACzFC,uBAAkDC,uBAAuBR,OAAQS,eAAeC,SAEhGC,kBAAkCJ,uBAAuBK,eAAeC,KAAKC,UAAU,IAAeC,aAAaf,OAAOgB,iBAAiBC,UAAU,KACrJF,aAAaf,OAAOgB,gBACtBE,QAAQC,KACN,mPAMAC,gBAAgCb,uBAAuBc,aAAaJ,UAAU,EAAGK,kBAAUC,sBAC3FR,aAAaS,aAAaC,QAAQD,aAAaE,KAAK1B,OAAO2B,aAC/DC,qBAAqBJ,aAAaC,OAAOI,eAAgBP,SAAUC,YAGrE,IAAIO,YAEJ,MAAMN,aAA0D,IAAIO,wBAG9DC,MAAgCC,OAAOC,OAAO3B,uBAAwB,CAC1EiB,0BACAW,UAAW,KACT,MAAMC,KAAiCZ,aAAaC,MACpD,GAAIV,aAAaqB,MAAO,MAAM,IAAIC,MAAM,oEAAoErC,OAAO2B,YAAYW,+CAA+CN,MAAMO,QAEpL,OAAOH,KAAKD,eAIhB,IAAIK,wBAA+ChB,aAAaC,OAAOgB,sBAAwBC,oBAAoBC,MAEnH,MAAMC,gBAAgCpB,aAAaP,UAAWU,cACxDZ,aAAaY,eACjBa,wBAA0Bb,YAAYc,wBAGlCI,YAA4Bb,MAAMc,SACrCjC,KACCkC,eAAevB,cACfwB,qBACE,EAAEC,YAAaC,kBAAwDC,QAASxB,eAC9EsB,cAAgBE,SAAWD,kBAAoBvB,cAGpDV,UAAU,EAAEmC,UAAWzB,gBAClBZ,aAAaY,aAAaE,iBAEzBF,aAAa0B,mBADbD,UACgCZ,wBADUE,oBAAoBY,wBACL,KAG5DC,YAA4BhD,uBAAuBiD,SAASvC,UAAU,KAE1EsC,YAAYE,cACZ3B,aAAa2B,cACbZ,YAAYY,cACZb,gBAAgBa,cAChB9C,mBAAmB8C,cACnBrC,iBAAiBqC,cAEjBlD,uBAAuBiD,SAAS9B,OAChCF,aAAakC,aAGTC,YAAc,IAAIC,aAAa,GAC/BC,aAAe,IAAID,aAAa,GAChCE,YAAc,IAAIF,aAAa,GAC/BG,aAAe,IAAIH,aAAa,GAqBtC,OAnBA9B,YAAcE,MAAMc,SACjBjC,KACCmC,uBACAgB,UAAWZ,WAA2DA,UAAYnD,YAAYgE,MAAQC,OACtGC,OAAO,KACL,MAAM/B,KAAiCZ,aAAaC,MACpD,OAAO2C,UAAUhC,OAASA,KAAKK,uBAAyBC,oBAAoBC,QAG9E0B,IAAI,IACFC,wBAAwB9C,aAAaC,OAAOI,eAAgBgC,aAAcE,aAAcJ,YAAaG,YAAa5D,uBAAwBG,yBAE5I8D,OAAOC,YAERnD,UAAU,EAAGK,kBAAUC,sBAClBD,UAAUU,MAAMuC,UAAU7C,KAAK,IAAI8C,QAAQlD,SAAS,GAAIA,SAAS,GAAIA,SAAS,KAC9EC,UAAUS,MAAMyC,UAAU/C,KAAK,IAAIgD,WAAWnD,SAAS,GAAIA,SAAS,GAAIA,SAAS,GAAIA,SAAS,OAG/FS,KACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DriveToTargetConnector.js","sources":["../../../../src/TransformDrive/Entities/Connectors/DriveToTargetConnector.ts"],"sourcesContent":["import type { TReadonlyEuler, TReadonlyQuaternion, TReadonlyVector3 } from '@
|
|
1
|
+
{"version":3,"file":"DriveToTargetConnector.js","sources":["../../../../src/TransformDrive/Entities/Connectors/DriveToTargetConnector.ts"],"sourcesContent":["import type { TReadonlyEuler, TReadonlyQuaternion, TReadonlyVector3 } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Constants';\nimport type { TAbstractTransformAgent, TDriveToTargetConnector, TOffsets, TTransformDrive, TWithTransforms } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { isNotDefined } from '@hellpig/anarchy-shared/Utils';\nimport type { Subscription } from 'rxjs';\nimport { Euler } from 'three';\n\nexport function DriveToTargetConnector<T extends Partial<Record<TransformAgent, TAbstractTransformAgent>>>(\n drive: TTransformDrive<T>,\n target: TWithTransforms,\n offsets?: TOffsets\n): TDriveToTargetConnector {\n const { positionOffset, rotationOffset, scaleOffset } = offsets ?? {};\n\n const positionSub$: Subscription = drive.position$.subscribe((position: TReadonlyVector3): TReadonlyVector3 => {\n if (isNotDefined(positionOffset)) return target.position.copy(position);\n return target.position.copy(position).add(positionOffset);\n });\n\n const rotationSub$: Subscription = drive.rotation$.subscribe((rotation: TReadonlyQuaternion): TReadonlyEuler | void => {\n const rotationEuler: Euler = new Euler().setFromQuaternion(rotation.clone());\n if (isNotDefined(rotationOffset)) return target.rotation.copy(rotationEuler);\n return target.rotation.copy(new Euler().setFromQuaternion(rotation.clone().multiply(rotationOffset.clone())));\n });\n\n const scaleSub$: Subscription = drive.scale$.subscribe((scale: TReadonlyVector3): TReadonlyVector3 => {\n if (isNotDefined(scaleOffset)) return target.scale.copy(scale);\n return target.scale.copy(scale).add(scaleOffset);\n });\n\n const destroySub$: Subscription = drive.destroy$.subscribe((): void => {\n //Finish subscriptions\n destroySub$.unsubscribe();\n positionSub$.unsubscribe();\n rotationSub$.unsubscribe();\n scaleSub$.unsubscribe();\n });\n\n return {\n destroy$: drive.destroy$\n };\n}\n"],"names":["DriveToTargetConnector","drive","target","offsets","positionOffset","rotationOffset","scaleOffset","positionSub$","position$","subscribe","position","isNotDefined","copy","add","rotationSub$","rotation$","rotation","rotationEuler","Euler","setFromQuaternion","clone","multiply","scaleSub$","scale$","scale","destroySub$","destroy$","unsubscribe"],"mappings":"4GAOO,SAASA,uBACdC,MACAC,OACAC,SAEA,MAAMC,eAAEA,eAAAC,eAAgBA,eAAAC,YAAgBA,aAAgBH,SAAW,CAAA,EAE7DI,aAA6BN,MAAMO,UAAUC,UAAWC,UACxDC,aAAaP,gBAAwBF,OAAOQ,SAASE,KAAKF,UACvDR,OAAOQ,SAASE,KAAKF,UAAUG,IAAIT,iBAGtCU,aAA6Bb,MAAMc,UAAUN,UAAWO,WAC5D,MAAMC,eAAuB,IAAIC,OAAQC,kBAAkBH,SAASI,SACpE,OAAIT,aAAaN,gBAAwBH,OAAOc,SAASJ,KAAKK,eACvDf,OAAOc,SAASJ,MAAK,IAAIM,OAAQC,kBAAkBH,SAASI,QAAQC,SAAShB,eAAee,aAG/FE,UAA0BrB,MAAMsB,OAAOd,UAAWe,OAClDb,aAAaL,aAAqBJ,OAAOsB,MAAMZ,KAAKY,OACjDtB,OAAOsB,MAAMZ,KAAKY,OAAOX,IAAIP,cAGhCmB,YAA4BxB,MAAMyB,SAASjB,UAAU,KAEzDgB,YAAYE,cACZpB,aAAaoB,cACbb,aAAaa,cACbL,UAAUK,gBAGZ,MAAO,CACLD,SAAUzB,MAAMyB,SAEpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformDrive.js","sources":["../../../../src/TransformDrive/Entities/Drive/TransformDrive.ts"],"sourcesContent":["import { meters, radians } from '@Anarchy/Engine/Measurements';\nimport type { TDestroyable } from '@Anarchy/Engine/Mixins';\nimport { destroyableMixin } from '@Anarchy/Engine/Mixins';\nimport type { TReadonlyQuaternion, TReadonlyVector3 } from '@Anarchy/Engine/ThreeLib';\nimport { transformDriveToConfig } from '@Anarchy/Engine/TransformDrive/Adapters';\nimport { TransformAgent } from '@Anarchy/Engine/TransformDrive/Constants';\nimport type {\n TAbstractTransformAgent,\n TTransformDrive,\n TTransformDriveMandatoryFields,\n TTransformDriveParams,\n TTransformDrivePerformanceOptions,\n TTransformDriveSerializedData\n} from '@Anarchy/Engine/TransformDrive/Models';\nimport { getDynamicAgents, updateFromActiveAgent } from '@Anarchy/Engine/TransformDrive/Utils';\nimport { isNotDefined } from '@Anarchy/Shared/Utils';\nimport { nanoid } from 'nanoid';\nimport type { Observable, Subscription } from 'rxjs';\nimport { BehaviorSubject, distinctUntilChanged, filter, map, merge, ReplaySubject } from 'rxjs';\n\n// TransformDrive is an entity to move/rotate/scale other entities\n// TransformDrive could use different \"agents\" (modes) which can be switched in runtime:\n// - Connected agent is expose mutable position/rotation/scale objects and follow the changes of them. Useful to work with 3rd party libs (e.g. animejs). But recommended to avoid.\n// - Kinematic agent is a mode that moves actor by angular velocity and linear velocity (vectors). Useful when you need to know the direction (e.g. bullet, car) of the object. Recommended way for NPCs.\n// - Default agent is providing almost nothing, but setters. Recommended for static objects.\n// - Also: with every mode you can do position$.next() to \"teleport\" the object to the new position\nexport function TransformDrive<T extends Partial<Record<TransformAgent, TAbstractTransformAgent>>>(params: TTransformDriveParams, agents: T): TTransformDrive<T> | never {\n const id: string = 'transform_drive_' + nanoid();\n\n //All agent instances must be used only with this drive\n const relatedDriveIdSub$: Subscription = merge(\n ...Object.values(agents).map((agent: TAbstractTransformAgent): Observable<Readonly<{ value: string | undefined; agent: TAbstractTransformAgent }>> => {\n agent.relatedDriveId$.next(id);\n return agent.relatedDriveId$.pipe(map((value: string | undefined): Readonly<{ value: string | undefined; agent: TAbstractTransformAgent }> => ({ value, agent })));\n })\n ).subscribe(({ value, agent }: Readonly<{ value: string | undefined; agent: TAbstractTransformAgent }>): void => {\n if (value !== id) throw new Error(`TransformDrive: Agent \"${agent.type}\" (${agent.id}) initialized in TransformDrive (${id}), but attempted to use in another TransformDrive (${value})`);\n });\n\n const agent$: BehaviorSubject<TransformAgent> = new BehaviorSubject<TransformAgent>(params.activeAgent ?? TransformAgent.Default);\n\n let activeAgent: TAbstractTransformAgent | undefined = agents[agent$.value];\n if (isNotDefined(activeAgent)) {\n throw new Error(`TransformDrive: Can't set an active agent. Agent \"${agent$.value}\" is not defined`);\n }\n const activeAgent$: BehaviorSubject<TAbstractTransformAgent> = new BehaviorSubject(activeAgent);\n\n if (isNotDefined(activeAgent$.value)) throw new Error(`TransformDrive: Active agent (\"${activeAgent$.value}\") is not defined`);\n\n const agentSub$: Subscription = agent$.subscribe((agent: TransformAgent): void => {\n const newAgent: TAbstractTransformAgent | undefined = agents[agent];\n if (isNotDefined(newAgent)) throw new Error(`TransformDrive: Can't change an active agent for \"${agent}\": not defined`);\n activeAgent$.next(newAgent);\n });\n\n const position$: BehaviorSubject<TReadonlyVector3> = new BehaviorSubject<TReadonlyVector3>(activeAgent$.value.position$.value);\n const rotation$: BehaviorSubject<TReadonlyQuaternion> = new BehaviorSubject<TReadonlyQuaternion>(activeAgent$.value.rotation$.value);\n const scale$: BehaviorSubject<TReadonlyVector3> = new BehaviorSubject<TReadonlyVector3>(activeAgent$.value.scale$.value);\n\n let prevAgent: TAbstractTransformAgent | undefined;\n const activeAgentSub$: Subscription = activeAgent$\n .pipe(distinctUntilChanged((prev: TAbstractTransformAgent, curr: TAbstractTransformAgent): boolean => prev.type === curr.type))\n .subscribe((newAgent: TAbstractTransformAgent): void => {\n const position: TReadonlyVector3 = position$.value;\n const rotation: TReadonlyQuaternion = rotation$.value;\n const scale: TReadonlyVector3 = scale$.value;\n\n prevAgent?.onDeactivated$.next({ position, rotation, scale });\n Object.values(agents).forEach((agent: TAbstractTransformAgent): void => {\n const isActiveAgent: boolean = agent.type === newAgent.type;\n agent.enabled$.next(isActiveAgent);\n\n //when we change the active agent, we need to update the values of the agent\n agent.position$.next(position);\n agent.rotation$.next(rotation);\n agent.scale$.next(scale);\n });\n newAgent.onActivated$.next({ position, rotation, scale });\n prevAgent = newAgent;\n });\n\n //We don't expose these BehaviorSubjects, because they're vulnerable to external changes without .next() (e.g. \"position.value = ...\")\n const activeAgentRep$: ReplaySubject<TAbstractTransformAgent> = new ReplaySubject(1);\n\n activeAgent$.subscribe((agent: TAbstractTransformAgent): void => activeAgentRep$.next(agent));\n\n // Update values of the active agent when drive.position$.next() is called from an external code\n position$.pipe(filter((value: TReadonlyVector3): boolean => value !== activeAgent$.value.position$.value)).subscribe((value: TReadonlyVector3): void => activeAgent$.value.position$.next(value));\n rotation$\n .pipe(filter((value: TReadonlyQuaternion): boolean => value !== activeAgent$.value.rotation$.value))\n .subscribe((value: TReadonlyQuaternion): void => activeAgent$.value.rotation$.next(value));\n scale$.pipe(filter((value: TReadonlyVector3): boolean => value !== activeAgent$.value.scale$.value)).subscribe((value: TReadonlyVector3): void => activeAgent$.value.scale$.next(value));\n\n const destroyable: TDestroyable = destroyableMixin();\n\n const performance: Required<TTransformDrivePerformanceOptions> = {\n positionNoiseThreshold: params.performance?.positionNoiseThreshold ?? meters(0.0000001),\n rotationNoiseThreshold: params.performance?.rotationNoiseThreshold ?? radians(0.0000001),\n scaleNoiseThreshold: params.performance?.scaleNoiseThreshold ?? 0.0000001\n };\n\n const positionSub$: Subscription = updateFromActiveAgent<TReadonlyVector3>(activeAgent$, 'position$', { threshold: performance.positionNoiseThreshold }).subscribe((v: TReadonlyVector3): void =>\n position$.next(v)\n );\n const rotationSub$: Subscription = updateFromActiveAgent<TReadonlyQuaternion>(activeAgent$, 'rotation$', { threshold: performance.rotationNoiseThreshold }).subscribe(\n (r: TReadonlyQuaternion): void => rotation$.next(r)\n );\n const scaleSub$: Subscription = updateFromActiveAgent<TReadonlyVector3>(activeAgent$, 'scale$', { threshold: performance.scaleNoiseThreshold }).subscribe((s: TReadonlyVector3): void =>\n scale$.next(s)\n );\n\n const result: TTransformDriveMandatoryFields = {\n ...destroyable,\n id,\n agent$,\n activeAgent$: activeAgentRep$,\n getActiveAgent: (): TAbstractTransformAgent => activeAgent$.value,\n position$,\n rotation$,\n scale$,\n relatedEntityId: params.relatedEntityId,\n serialize: (): TTransformDriveSerializedData => transformDriveToConfig(result),\n ...getDynamicAgents(agents)\n };\n\n const destroySub$: Subscription = destroyable.destroy$.subscribe((): void => {\n // Stop subscriptions\n positionSub$.unsubscribe();\n rotationSub$.unsubscribe();\n scaleSub$.unsubscribe();\n agentSub$.unsubscribe();\n activeAgentSub$.unsubscribe();\n relatedDriveIdSub$.unsubscribe();\n\n //Stop subjects\n agent$.complete();\n activeAgent$.complete();\n activeAgentRep$.complete();\n position$.complete();\n rotation$.complete();\n scale$.complete();\n\n activeAgent = null as any;\n prevAgent = null as any;\n Object.values(agents).forEach((agent: TAbstractTransformAgent): void => agent.destroy$.next());\n destroySub$.unsubscribe();\n });\n\n return result as TTransformDrive<T>;\n}\n"],"names":["TransformDrive","params","agents","id","nanoid","relatedDriveIdSub$","merge","Object","values","map","agent","relatedDriveId$","next","pipe","value","subscribe","Error","type","agent$","BehaviorSubject","activeAgent","TransformAgent","Default","isNotDefined","activeAgent$","agentSub$","newAgent","position$","rotation$","scale$","prevAgent","activeAgentSub$","distinctUntilChanged","prev","curr","position","rotation","scale","onDeactivated$","forEach","enabled$","onActivated$","activeAgentRep$","ReplaySubject","filter","destroyable","destroyableMixin","performance","positionNoiseThreshold","meters","rotationNoiseThreshold","radians","scaleNoiseThreshold","positionSub$","updateFromActiveAgent","threshold","v","rotationSub$","r","scaleSub$","s","result","getActiveAgent","relatedEntityId","serialize","transformDriveToConfig","getDynamicAgents","destroySub$","destroy$","unsubscribe","complete"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TransformDrive.js","sources":["../../../../src/TransformDrive/Entities/Drive/TransformDrive.ts"],"sourcesContent":["import { meters, radians } from '@hellpig/anarchy-engine/Measurements';\nimport type { TDestroyable } from '@hellpig/anarchy-engine/Mixins';\nimport { destroyableMixin } from '@hellpig/anarchy-engine/Mixins';\nimport type { TReadonlyQuaternion, TReadonlyVector3 } from '@hellpig/anarchy-engine/ThreeLib';\nimport { transformDriveToConfig } from '@hellpig/anarchy-engine/TransformDrive/Adapters';\nimport { TransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Constants';\nimport type {\n TAbstractTransformAgent,\n TTransformDrive,\n TTransformDriveMandatoryFields,\n TTransformDriveParams,\n TTransformDrivePerformanceOptions,\n TTransformDriveSerializedData\n} from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { getDynamicAgents, updateFromActiveAgent } from '@hellpig/anarchy-engine/TransformDrive/Utils';\nimport { isNotDefined } from '@hellpig/anarchy-shared/Utils';\nimport { nanoid } from 'nanoid';\nimport type { Observable, Subscription } from 'rxjs';\nimport { BehaviorSubject, distinctUntilChanged, filter, map, merge, ReplaySubject } from 'rxjs';\n\n// TransformDrive is an entity to move/rotate/scale other entities\n// TransformDrive could use different \"agents\" (modes) which can be switched in runtime:\n// - Connected agent is expose mutable position/rotation/scale objects and follow the changes of them. Useful to work with 3rd party libs (e.g. animejs). But recommended to avoid.\n// - Kinematic agent is a mode that moves actor by angular velocity and linear velocity (vectors). Useful when you need to know the direction (e.g. bullet, car) of the object. Recommended way for NPCs.\n// - Default agent is providing almost nothing, but setters. Recommended for static objects.\n// - Also: with every mode you can do position$.next() to \"teleport\" the object to the new position\nexport function TransformDrive<T extends Partial<Record<TransformAgent, TAbstractTransformAgent>>>(params: TTransformDriveParams, agents: T): TTransformDrive<T> | never {\n const id: string = 'transform_drive_' + nanoid();\n\n //All agent instances must be used only with this drive\n const relatedDriveIdSub$: Subscription = merge(\n ...Object.values(agents).map((agent: TAbstractTransformAgent): Observable<Readonly<{ value: string | undefined; agent: TAbstractTransformAgent }>> => {\n agent.relatedDriveId$.next(id);\n return agent.relatedDriveId$.pipe(map((value: string | undefined): Readonly<{ value: string | undefined; agent: TAbstractTransformAgent }> => ({ value, agent })));\n })\n ).subscribe(({ value, agent }: Readonly<{ value: string | undefined; agent: TAbstractTransformAgent }>): void => {\n if (value !== id) throw new Error(`TransformDrive: Agent \"${agent.type}\" (${agent.id}) initialized in TransformDrive (${id}), but attempted to use in another TransformDrive (${value})`);\n });\n\n const agent$: BehaviorSubject<TransformAgent> = new BehaviorSubject<TransformAgent>(params.activeAgent ?? TransformAgent.Default);\n\n let activeAgent: TAbstractTransformAgent | undefined = agents[agent$.value];\n if (isNotDefined(activeAgent)) {\n throw new Error(`TransformDrive: Can't set an active agent. Agent \"${agent$.value}\" is not defined`);\n }\n const activeAgent$: BehaviorSubject<TAbstractTransformAgent> = new BehaviorSubject(activeAgent);\n\n if (isNotDefined(activeAgent$.value)) throw new Error(`TransformDrive: Active agent (\"${activeAgent$.value}\") is not defined`);\n\n const agentSub$: Subscription = agent$.subscribe((agent: TransformAgent): void => {\n const newAgent: TAbstractTransformAgent | undefined = agents[agent];\n if (isNotDefined(newAgent)) throw new Error(`TransformDrive: Can't change an active agent for \"${agent}\": not defined`);\n activeAgent$.next(newAgent);\n });\n\n const position$: BehaviorSubject<TReadonlyVector3> = new BehaviorSubject<TReadonlyVector3>(activeAgent$.value.position$.value);\n const rotation$: BehaviorSubject<TReadonlyQuaternion> = new BehaviorSubject<TReadonlyQuaternion>(activeAgent$.value.rotation$.value);\n const scale$: BehaviorSubject<TReadonlyVector3> = new BehaviorSubject<TReadonlyVector3>(activeAgent$.value.scale$.value);\n\n let prevAgent: TAbstractTransformAgent | undefined;\n const activeAgentSub$: Subscription = activeAgent$\n .pipe(distinctUntilChanged((prev: TAbstractTransformAgent, curr: TAbstractTransformAgent): boolean => prev.type === curr.type))\n .subscribe((newAgent: TAbstractTransformAgent): void => {\n const position: TReadonlyVector3 = position$.value;\n const rotation: TReadonlyQuaternion = rotation$.value;\n const scale: TReadonlyVector3 = scale$.value;\n\n prevAgent?.onDeactivated$.next({ position, rotation, scale });\n Object.values(agents).forEach((agent: TAbstractTransformAgent): void => {\n const isActiveAgent: boolean = agent.type === newAgent.type;\n agent.enabled$.next(isActiveAgent);\n\n //when we change the active agent, we need to update the values of the agent\n agent.position$.next(position);\n agent.rotation$.next(rotation);\n agent.scale$.next(scale);\n });\n newAgent.onActivated$.next({ position, rotation, scale });\n prevAgent = newAgent;\n });\n\n //We don't expose these BehaviorSubjects, because they're vulnerable to external changes without .next() (e.g. \"position.value = ...\")\n const activeAgentRep$: ReplaySubject<TAbstractTransformAgent> = new ReplaySubject(1);\n\n activeAgent$.subscribe((agent: TAbstractTransformAgent): void => activeAgentRep$.next(agent));\n\n // Update values of the active agent when drive.position$.next() is called from an external code\n position$.pipe(filter((value: TReadonlyVector3): boolean => value !== activeAgent$.value.position$.value)).subscribe((value: TReadonlyVector3): void => activeAgent$.value.position$.next(value));\n rotation$\n .pipe(filter((value: TReadonlyQuaternion): boolean => value !== activeAgent$.value.rotation$.value))\n .subscribe((value: TReadonlyQuaternion): void => activeAgent$.value.rotation$.next(value));\n scale$.pipe(filter((value: TReadonlyVector3): boolean => value !== activeAgent$.value.scale$.value)).subscribe((value: TReadonlyVector3): void => activeAgent$.value.scale$.next(value));\n\n const destroyable: TDestroyable = destroyableMixin();\n\n const performance: Required<TTransformDrivePerformanceOptions> = {\n positionNoiseThreshold: params.performance?.positionNoiseThreshold ?? meters(0.0000001),\n rotationNoiseThreshold: params.performance?.rotationNoiseThreshold ?? radians(0.0000001),\n scaleNoiseThreshold: params.performance?.scaleNoiseThreshold ?? 0.0000001\n };\n\n const positionSub$: Subscription = updateFromActiveAgent<TReadonlyVector3>(activeAgent$, 'position$', { threshold: performance.positionNoiseThreshold }).subscribe((v: TReadonlyVector3): void =>\n position$.next(v)\n );\n const rotationSub$: Subscription = updateFromActiveAgent<TReadonlyQuaternion>(activeAgent$, 'rotation$', { threshold: performance.rotationNoiseThreshold }).subscribe(\n (r: TReadonlyQuaternion): void => rotation$.next(r)\n );\n const scaleSub$: Subscription = updateFromActiveAgent<TReadonlyVector3>(activeAgent$, 'scale$', { threshold: performance.scaleNoiseThreshold }).subscribe((s: TReadonlyVector3): void =>\n scale$.next(s)\n );\n\n const result: TTransformDriveMandatoryFields = {\n ...destroyable,\n id,\n agent$,\n activeAgent$: activeAgentRep$,\n getActiveAgent: (): TAbstractTransformAgent => activeAgent$.value,\n position$,\n rotation$,\n scale$,\n relatedEntityId: params.relatedEntityId,\n serialize: (): TTransformDriveSerializedData => transformDriveToConfig(result),\n ...getDynamicAgents(agents)\n };\n\n const destroySub$: Subscription = destroyable.destroy$.subscribe((): void => {\n // Stop subscriptions\n positionSub$.unsubscribe();\n rotationSub$.unsubscribe();\n scaleSub$.unsubscribe();\n agentSub$.unsubscribe();\n activeAgentSub$.unsubscribe();\n relatedDriveIdSub$.unsubscribe();\n\n //Stop subjects\n agent$.complete();\n activeAgent$.complete();\n activeAgentRep$.complete();\n position$.complete();\n rotation$.complete();\n scale$.complete();\n\n activeAgent = null as any;\n prevAgent = null as any;\n Object.values(agents).forEach((agent: TAbstractTransformAgent): void => agent.destroy$.next());\n destroySub$.unsubscribe();\n });\n\n return result as TTransformDrive<T>;\n}\n"],"names":["TransformDrive","params","agents","id","nanoid","relatedDriveIdSub$","merge","Object","values","map","agent","relatedDriveId$","next","pipe","value","subscribe","Error","type","agent$","BehaviorSubject","activeAgent","TransformAgent","Default","isNotDefined","activeAgent$","agentSub$","newAgent","position$","rotation$","scale$","prevAgent","activeAgentSub$","distinctUntilChanged","prev","curr","position","rotation","scale","onDeactivated$","forEach","enabled$","onActivated$","activeAgentRep$","ReplaySubject","filter","destroyable","destroyableMixin","performance","positionNoiseThreshold","meters","rotationNoiseThreshold","radians","scaleNoiseThreshold","positionSub$","updateFromActiveAgent","threshold","v","rotationSub$","r","scaleSub$","s","result","getActiveAgent","relatedEntityId","serialize","transformDriveToConfig","getDynamicAgents","destroySub$","destroy$","unsubscribe","complete"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformDriveFactory.js","sources":["../../../src/TransformDrive/Factories/TransformDriveFactory.ts"],"sourcesContent":["import { FactoryType, ReactiveFactory } from '@
|
|
1
|
+
{"version":3,"file":"TransformDriveFactory.js","sources":["../../../src/TransformDrive/Factories/TransformDriveFactory.ts"],"sourcesContent":["import { FactoryType, ReactiveFactory } from '@hellpig/anarchy-engine/Abstract';\nimport { TransformDrive } from '@hellpig/anarchy-engine/TransformDrive/Entities';\nimport type { TTransformDriveFactory, TTransformDriveFactoryParams } from '@hellpig/anarchy-engine/TransformDrive/Models';\n\nexport function TransformDriveFactory(): TTransformDriveFactory {\n return ReactiveFactory(FactoryType.TransformDrive, ({ params, agents }: TTransformDriveFactoryParams) => TransformDrive(params, agents));\n}\n"],"names":["TransformDriveFactory","ReactiveFactory","FactoryType","TransformDrive","params","agents"],"mappings":"0MAIO,SAASA,wBACd,OAAOC,gBAAgBC,YAAYC,eAAgB,EAAGC,cAAQC,iBAA2CF,eAAeC,OAAQC,QAClI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithMutablePositionConnector.js","sources":["../../../src/TransformDrive/Mixins/WithMutablePositionConnector.ts"],"sourcesContent":["import type { TVector3OrEuler } from '@
|
|
1
|
+
{"version":3,"file":"WithMutablePositionConnector.js","sources":["../../../src/TransformDrive/Mixins/WithMutablePositionConnector.ts"],"sourcesContent":["import type { TVector3OrEuler } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TWithMutablePositionConnector } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { getXyzUpdateProxy } from '@hellpig/anarchy-engine/TransformDrive/Utils/ActorDriveUtils';\nimport type { BehaviorSubject } from 'rxjs';\n\nexport function withMutablePositionConnector<T extends TVector3OrEuler>(position$: BehaviorSubject<T>): TWithMutablePositionConnector {\n return { positionConnector: getXyzUpdateProxy(position$.value.clone(), position$) };\n}\n"],"names":["withMutablePositionConnector","position$","positionConnector","getXyzUpdateProxy","value","clone"],"mappings":"2DAKO,SAASA,6BAAwDC,WACtE,MAAO,CAAEC,kBAAmBC,kBAAkBF,UAAUG,MAAMC,QAASJ,WACzE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithMutableRotationConnector.js","sources":["../../../src/TransformDrive/Mixins/WithMutableRotationConnector.ts"],"sourcesContent":["import type { TVector3OrEuler, TVector4OrQuaternion } from '@
|
|
1
|
+
{"version":3,"file":"WithMutableRotationConnector.js","sources":["../../../src/TransformDrive/Mixins/WithMutableRotationConnector.ts"],"sourcesContent":["import type { TVector3OrEuler, TVector4OrQuaternion } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TWithMutableRotationConnector } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { getXyzUpdateProxy, getXyzwUpdateProxy } from '@hellpig/anarchy-engine/TransformDrive/Utils/ActorDriveUtils';\nimport type { BehaviorSubject } from 'rxjs';\n\nexport function withMutableRotationConnector<T1 extends TVector3OrEuler, T2 extends TVector4OrQuaternion>(rotation$: BehaviorSubject<T1 | T2>): TWithMutableRotationConnector {\n return {\n rotationEulerConnector: getXyzUpdateProxy(rotation$.value.clone(), rotation$),\n rotationQuaternionConnector: getXyzwUpdateProxy((rotation$ as BehaviorSubject<T2>).value.clone(), rotation$ as BehaviorSubject<T2>)\n };\n}\n"],"names":["withMutableRotationConnector","rotation$","rotationEulerConnector","getXyzUpdateProxy","value","clone","rotationQuaternionConnector","getXyzwUpdateProxy"],"mappings":"8EAKO,SAASA,6BAA0FC,WACxG,MAAO,CACLC,uBAAwBC,kBAAkBF,UAAUG,MAAMC,QAASJ,WACnEK,4BAA6BC,mBAAoBN,UAAkCG,MAAMC,QAASJ,WAEtG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithMutableScaleConnector.js","sources":["../../../src/TransformDrive/Mixins/WithMutableScaleConnector.ts"],"sourcesContent":["import type { TVector3OrEuler } from '@
|
|
1
|
+
{"version":3,"file":"WithMutableScaleConnector.js","sources":["../../../src/TransformDrive/Mixins/WithMutableScaleConnector.ts"],"sourcesContent":["import type { TVector3OrEuler } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TWithMutableScaleConnector } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { getXyzUpdateProxy } from '@hellpig/anarchy-engine/TransformDrive/Utils/ActorDriveUtils';\nimport type { BehaviorSubject } from 'rxjs';\n\nexport function withMutableScaleConnector<T extends TVector3OrEuler>(scale$: BehaviorSubject<T>): TWithMutableScaleConnector {\n return { scaleConnector: getXyzUpdateProxy(scale$.value.clone(), scale$) };\n}\n"],"names":["withMutableScaleConnector","scale$","scaleConnector","getXyzUpdateProxy","value","clone"],"mappings":"2DAKO,SAASA,0BAAqDC,QACnE,MAAO,CAAEC,eAAgBC,kBAAkBF,OAAOG,MAAMC,QAASJ,QACnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithProxyTransform.js","sources":["../../../src/TransformDrive/Mixins/WithProxyTransform.ts"],"sourcesContent":["import type { TMovableXYZ, TQuaternionRotatable, TScaleMixin, TWithPosition3dProperty, TWithQuaternionRotationProperty, TWithScaleProperty } from '@
|
|
1
|
+
{"version":3,"file":"WithProxyTransform.js","sources":["../../../src/TransformDrive/Mixins/WithProxyTransform.ts"],"sourcesContent":["import type { TMovableXYZ, TQuaternionRotatable, TScaleMixin, TWithPosition3dProperty, TWithQuaternionRotationProperty, TWithScaleProperty } from '@hellpig/anarchy-engine/Mixins';\nimport { withMoveBy3dMixin, withQuaternionRotationByXyzMixin, withScaleMixin } from '@hellpig/anarchy-engine/Mixins';\nimport type { TAbstractTransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Models';\n\nexport function withProxyTransform(\n abstractTransformAgent: TAbstractTransformAgent,\n proxyPositionObj: TWithPosition3dProperty,\n proxyRotationObj: TWithQuaternionRotationProperty,\n proxyScaleObj: TWithScaleProperty\n): TMovableXYZ & TScaleMixin & TQuaternionRotatable {\n const { getX, getZ, getY } = withMoveBy3dMixin(proxyPositionObj);\n const { getScaleX, getScaleY, getScaleZ } = withScaleMixin(proxyScaleObj);\n const { getRotationX, getRotationY, getRotationZ, getRotationW } = withQuaternionRotationByXyzMixin(proxyRotationObj);\n\n return {\n getX,\n getY,\n getZ,\n getScaleX,\n getScaleY,\n getScaleZ,\n getRotationX,\n getRotationY,\n getRotationZ,\n getRotationW,\n setX: (x: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyPositionObj.position.x = x;\n abstractTransformAgent.position$.next(proxyPositionObj.position);\n return x;\n },\n setY: (y: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyPositionObj.position.y = y;\n abstractTransformAgent.position$.next(proxyPositionObj.position);\n return y;\n },\n setZ: (z: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyPositionObj.position.z = z;\n abstractTransformAgent.position$.next(proxyPositionObj.position);\n return z;\n },\n addX: (x: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyPositionObj.position.x += x;\n abstractTransformAgent.position$.next(proxyPositionObj.position);\n return proxyPositionObj.position.x;\n },\n addY: (y: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyPositionObj.position.y += y;\n abstractTransformAgent.position$.next(proxyPositionObj.position);\n return proxyPositionObj.position.y;\n },\n addZ: (z: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyPositionObj.position.z += z;\n abstractTransformAgent.position$.next(proxyPositionObj.position);\n return proxyPositionObj.position.z;\n },\n setRotationX: (x: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.x = x;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return x;\n },\n setRotationY: (y: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.y = y;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return y;\n },\n setRotationZ: (z: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.z = z;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return z;\n },\n setRotationW: (w: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.w = w;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return w;\n },\n adjustRotationByX: (x: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.x += x;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return proxyRotationObj.rotation.x;\n },\n adjustRotationByY: (y: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.y += y;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return proxyRotationObj.rotation.y;\n },\n adjustRotationByZ: (z: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.z += z;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return proxyRotationObj.rotation.z;\n },\n adjustRotationByW: (w: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyRotationObj.rotation.w += w;\n abstractTransformAgent.rotation$.next(proxyRotationObj.rotation);\n return proxyRotationObj.rotation.w;\n },\n setScaleX: (x: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyScaleObj.scale.x = x;\n abstractTransformAgent.scale$.next(proxyScaleObj.scale);\n return x;\n },\n setScaleY: (y: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyScaleObj.scale.y = y;\n abstractTransformAgent.scale$.next(proxyScaleObj.scale);\n return y;\n },\n setScaleZ: (z: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyScaleObj.scale.z = z;\n abstractTransformAgent.scale$.next(proxyScaleObj.scale);\n return z;\n },\n adjustScaleByX: (x: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyScaleObj.scale.x += x;\n abstractTransformAgent.scale$.next(proxyScaleObj.scale);\n return proxyScaleObj.scale.x;\n },\n adjustScaleByY: (y: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyScaleObj.scale.y += y;\n abstractTransformAgent.scale$.next(proxyScaleObj.scale);\n return proxyScaleObj.scale.y;\n },\n adjustScaleByZ: (z: number): number => {\n // eslint-disable-next-line functional/immutable-data\n proxyScaleObj.scale.z += z;\n abstractTransformAgent.scale$.next(proxyScaleObj.scale);\n return proxyScaleObj.scale.z;\n }\n };\n}\n"],"names":["withProxyTransform","abstractTransformAgent","proxyPositionObj","proxyRotationObj","proxyScaleObj","getX","getZ","getY","withMoveBy3dMixin","getScaleX","getScaleY","getScaleZ","withScaleMixin","getRotationX","getRotationY","getRotationZ","getRotationW","withQuaternionRotationByXyzMixin","setX","x","position","position$","next","setY","y","setZ","z","addX","addY","addZ","setRotationX","rotation","rotation$","setRotationY","setRotationZ","setRotationW","w","adjustRotationByX","adjustRotationByY","adjustRotationByZ","adjustRotationByW","setScaleX","scale","scale$","setScaleY","setScaleZ","adjustScaleByX","adjustScaleByY","adjustScaleByZ"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformDriveRegistry.js","sources":["../../../src/TransformDrive/Registries/TransformDriveRegistry.ts"],"sourcesContent":["import { AbstractEntityRegistry, RegistryType } from '@
|
|
1
|
+
{"version":3,"file":"TransformDriveRegistry.js","sources":["../../../src/TransformDrive/Registries/TransformDriveRegistry.ts"],"sourcesContent":["import { AbstractEntityRegistry, RegistryType } from '@hellpig/anarchy-engine/Abstract';\nimport type { TTransformDrive, TTransformDriveCompatibleEntity, TTransformDriveRegistry } from '@hellpig/anarchy-engine/TransformDrive/Models';\n\nexport function TransformDriveRegistry(): TTransformDriveRegistry {\n return AbstractEntityRegistry<TTransformDrive<TTransformDriveCompatibleEntity>>(RegistryType.TransformDrive);\n}\n"],"names":["TransformDriveRegistry","AbstractEntityRegistry","RegistryType","TransformDrive"],"mappings":"2JAGO,SAASA,yBACd,OAAOC,uBAAyEC,aAAaC,eAC/F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformDriveService.js","sources":["../../../src/TransformDrive/Services/TransformDriveService.ts"],"sourcesContent":["import type { TAbstractService } from '@
|
|
1
|
+
{"version":3,"file":"TransformDriveService.js","sources":["../../../src/TransformDrive/Services/TransformDriveService.ts"],"sourcesContent":["import type { TAbstractService } from '@hellpig/anarchy-engine/Abstract';\nimport { AbstractService } from '@hellpig/anarchy-engine/Abstract';\nimport type { TKinematicLoop } from '@hellpig/anarchy-engine/Kinematic';\nimport { toQuaternion } from '@hellpig/anarchy-engine/Math';\nimport type { TDisposable } from '@hellpig/anarchy-engine/Mixins';\nimport { withFactoryService, withRegistryService, withSerializableEntities } from '@hellpig/anarchy-engine/Mixins';\nimport type { TPhysicsLoop } from '@hellpig/anarchy-engine/Physics';\nimport { TransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Constants';\nimport { ConnectedTransformAgent, DefaultTransformAgent, PhysicsTransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Entities';\nimport type {\n TAbstractTransformAgent,\n TGetTransformAgentsOptions,\n TGetTransformAgentsParams,\n TTransformAgentParams,\n TTransformAgents,\n TTransformDrive,\n TTransformDriveCompatibleEntity,\n TTransformDriveFactory,\n TTransformDriveParams,\n TTransformDriveRegistry,\n TTransformDriveSerializedData,\n TTransformDriveService,\n TTransformDriveServiceDependencies,\n TTransformDriveServiceWithFactory,\n TTransformDriveServiceWithRegistry\n} from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { getKinematicTransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Utils';\nimport { mergeAll } from '@hellpig/anarchy-engine/Utils';\nimport type { TOptional, TWriteable } from '@hellpig/anarchy-shared/Utils';\nimport { isDefined } from '@hellpig/anarchy-shared/Utils';\nimport type { Subscription } from 'rxjs';\nimport { Quaternion, Vector3 } from 'three';\n\nexport function TransformDriveService(factory: TTransformDriveFactory, registry: TTransformDriveRegistry, { loopService }: TTransformDriveServiceDependencies): TTransformDriveService {\n const factorySub$: Subscription = factory.entityCreated$.subscribe((entity: TTransformDrive<TTransformDriveCompatibleEntity>): void => registry.add(entity));\n const disposable: ReadonlyArray<TDisposable> = [registry, factory, factorySub$];\n const abstractService: TAbstractService = AbstractService(disposable);\n\n const create = <T extends Partial<Record<TransformAgent, TAbstractTransformAgent>>>(params: TTransformDriveParams, agents: T): TTransformDrive<T> => {\n return factory.create({ params, agents }, undefined) as TTransformDrive<T>;\n };\n const createFromList = <T extends Partial<Record<TransformAgent, TAbstractTransformAgent>>>(\n paramsList: ReadonlyArray<TTransformDriveParams>,\n agentsList: ReadonlyArray<T>\n ): ReadonlyArray<TTransformDrive<T>> => {\n if (paramsList.length !== agentsList.length) throw new Error('TransformDriveService: paramsList and agentsList should have the same length');\n return paramsList.map((p: TTransformDriveParams, i: number): TTransformDrive<T> => create(p, agentsList[i] as T));\n };\n\n const withFactory: TTransformDriveServiceWithFactory = withFactoryService(factory);\n const withRegistry: TTransformDriveServiceWithRegistry = withRegistryService(registry);\n\n function getTransformAgents(\n { position, rotation, scale, kinematic, physicsBody }: TGetTransformAgentsParams,\n { hasKinematic, hasPhysics, hasConnected }: TGetTransformAgentsOptions\n ): TOptional<TTransformAgents> {\n const result: TWriteable<TOptional<TTransformAgents>> = {};\n\n //PhysicsTransformAgent might need a special \"onDeactivated\" hook if it supposed to switch physics/non-physics mode in runtime\n const agentParams: TTransformAgentParams = {\n position: position,\n rotation: rotation ? toQuaternion(rotation) : new Quaternion(),\n scale: scale ?? new Vector3(1, 1, 1),\n onDeactivated: undefined,\n onActivated: undefined\n };\n\n if (hasKinematic) {\n const kinematicLoop: TKinematicLoop = loopService.getKinematicLoop();\n // eslint-disable-next-line functional/immutable-data\n result[TransformAgent.Kinematic] = getKinematicTransformAgent(agentParams, kinematic, { kinematicLoop });\n }\n\n if (hasPhysics && isDefined(physicsBody)) {\n const physicsLoop: TPhysicsLoop = loopService.getPhysicsLoop();\n // eslint-disable-next-line functional/immutable-data\n result[TransformAgent.Physics] = PhysicsTransformAgent({ ...agentParams, physicsBody: physicsBody }, { physicsLoop });\n }\n\n // eslint-disable-next-line functional/immutable-data\n if (hasConnected) result[TransformAgent.Connected] = ConnectedTransformAgent(agentParams);\n\n // eslint-disable-next-line functional/immutable-data\n result[TransformAgent.Default] = DefaultTransformAgent(agentParams);\n\n return result;\n }\n\n return mergeAll(abstractService, withFactory, withRegistry, withSerializableEntities<TTransformDrive<TTransformDriveCompatibleEntity>, TTransformDriveSerializedData, undefined>(registry), {\n create,\n createFromList,\n getTransformAgents\n });\n}\n"],"names":["TransformDriveService","factory","registry","loopService","factorySub$","entityCreated$","subscribe","entity","add","abstractService","AbstractService","create","params","agents","withFactory","withFactoryService","withRegistry","withRegistryService","mergeAll","withSerializableEntities","createFromList","paramsList","agentsList","length","Error","map","p","i","getTransformAgents","position","rotation","scale","kinematic","physicsBody","hasKinematic","hasPhysics","hasConnected","result","agentParams","toQuaternion","Quaternion","Vector3","onDeactivated","onActivated","kinematicLoop","getKinematicLoop","TransformAgent","Kinematic","getKinematicTransformAgent","isDefined","physicsLoop","getPhysicsLoop","Physics","PhysicsTransformAgent","Connected","ConnectedTransformAgent","Default","DefaultTransformAgent"],"mappings":"m4BAiCO,SAASA,sBAAsBC,QAAiCC,UAAmCC,YAAEA,cAC1G,MAAMC,YAA4BH,QAAQI,eAAeC,UAAWC,QAAmEL,SAASM,IAAID,SAE9IE,gBAAoCC,gBADK,CAACR,SAAUD,QAASG,cAG7DO,OAAS,CAAqEC,OAA+BC,SAC1GZ,QAAQU,OAAO,CAAEC,cAAQC,oBAAU,GAUtCC,YAAiDC,mBAAmBd,SACpEe,aAAmDC,oBAAoBf,UAsC7E,OAAOgB,SAAST,gBAAiBK,YAAaE,aAAcG,yBAAqHjB,UAAW,CAC1LS,cACAS,eAjDqB,CACrBC,WACAC,cAEA,GAAID,WAAWE,SAAWD,WAAWC,OAAQ,MAAM,IAAIC,MAAM,gFAC7D,OAAOH,WAAWI,IAAI,CAACC,EAA0BC,IAAkChB,OAAOe,EAAGJ,WAAWK,MA6CxGC,mBAvCF,UACEC,SAAEA,SAAAC,SAAUA,SAAAC,MAAUA,MAAAC,UAAOA,UAAAC,YAAWA,cACxCC,aAAEA,aAAAC,WAAcA,WAAAC,aAAYA,eAE5B,MAAMC,OAAkD,CAAA,EAGlDC,YAAqC,CACzCT,kBACAC,SAAUA,SAAWS,aAAaT,UAAY,IAAIU,WAClDT,MAAOA,OAAS,IAAIU,QAAQ,EAAG,EAAG,GAClCC,mBAAe,EACfC,iBAAa,GAGf,GAAIT,aAAc,CAChB,MAAMU,cAAgCzC,YAAY0C,mBAElDR,OAAOS,eAAeC,WAAaC,2BAA2BV,YAAaN,UAAW,CAAEY,6BAC1F,CAEA,GAAIT,YAAcc,UAAUhB,aAAc,CACxC,MAAMiB,YAA4B/C,YAAYgD,iBAE9Cd,OAAOS,eAAeM,SAAWC,sBAAsB,IAAKf,YAAaL,yBAA4B,CAAEiB,yBACzG,CAQA,OALId,eAAcC,OAAOS,eAAeQ,WAAaC,wBAAwBjB,cAG7ED,OAAOS,eAAeU,SAAWC,sBAAsBnB,aAEhDD,MACT,GAOF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorDriveUtils.js","sources":["../../../src/TransformDrive/Utils/ActorDriveUtils.ts"],"sourcesContent":["import type { TVector3OrEuler, TVector4OrQuaternion } from '@
|
|
1
|
+
{"version":3,"file":"ActorDriveUtils.js","sources":["../../../src/TransformDrive/Utils/ActorDriveUtils.ts"],"sourcesContent":["import type { TVector3OrEuler, TVector4OrQuaternion } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TWriteable } from '@hellpig/anarchy-shared/Utils';\nimport type { Subject } from 'rxjs';\n\nexport function getXyzUpdateProxy<T extends TVector3OrEuler>(coordsObj: TWriteable<TVector3OrEuler>, subj$: Subject<T>): TVector3OrEuler {\n return new Proxy(coordsObj, {\n set(target: TWriteable<TVector3OrEuler>, prop: string, value: number): boolean {\n if (prop === 'x' || prop === 'y' || prop === 'z') {\n // eslint-disable-next-line functional/immutable-data\n target[prop] = value;\n subj$.next(target.clone() as T);\n }\n return true;\n }\n });\n}\n\nexport function getXyzwUpdateProxy<T extends TVector4OrQuaternion>(coordsObj: TWriteable<TVector4OrQuaternion>, subj$: Subject<T>): TVector4OrQuaternion {\n return new Proxy(coordsObj, {\n set(target: TWriteable<TVector4OrQuaternion>, prop: string, value: number): boolean {\n if (prop === 'x' || prop === 'y' || prop === 'z' || prop === 'w') {\n // eslint-disable-next-line functional/immutable-data\n target[prop] = value;\n subj$.next(target.clone() as T);\n }\n return true;\n }\n });\n}\n"],"names":["getXyzUpdateProxy","coordsObj","subj$","Proxy","set","target","prop","value","next","clone","getXyzwUpdateProxy"],"mappings":"AAIO,SAASA,kBAA6CC,UAAwCC,OACnG,OAAO,IAAIC,MAAMF,UAAW,CAC1BG,IAAA,CAAIC,OAAqCC,KAAcC,SACxC,MAATD,MAAyB,MAATA,MAAyB,MAATA,OAElCD,OAAOC,MAAQC,MACfL,MAAMM,KAAKH,OAAOI,WAEb,IAGb,CAEO,SAASC,mBAAmDT,UAA6CC,OAC9G,OAAO,IAAIC,MAAMF,UAAW,CAC1BG,IAAA,CAAIC,OAA0CC,KAAcC,SAC7C,MAATD,MAAyB,MAATA,MAAyB,MAATA,MAAyB,MAATA,OAElDD,OAAOC,MAAQC,MACfL,MAAMM,KAAKH,OAAOI,WAEb,IAGb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentUtils.js","sources":["../../../src/TransformDrive/Utils/AgentUtils.ts"],"sourcesContent":["import type { TKinematicData, TKinematicParams } from '@
|
|
1
|
+
{"version":3,"file":"AgentUtils.js","sources":["../../../src/TransformDrive/Utils/AgentUtils.ts"],"sourcesContent":["import type { TKinematicData, TKinematicParams } from '@hellpig/anarchy-engine/Kinematic';\nimport { DEFAULT_RADIUS, ForwardAxis } from '@hellpig/anarchy-engine/Kinematic';\nimport { KinematicTransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Entities/Agents/KinematicTransformAgent';\nimport type { TKinematicAgentDependencies, TKinematicTransformAgent, TKinematicTransformAgentParams, TTransformAgentParams } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport type { TOptional } from '@hellpig/anarchy-shared/Utils';\nimport { Quaternion, Vector3 } from 'three';\n\nexport function getKinematicTransformAgent(params: TTransformAgentParams, kinematic: TOptional<TKinematicParams> | undefined, dependencies: TKinematicAgentDependencies): TKinematicTransformAgent {\n const agentParams: TTransformAgentParams = { position: params.position, rotation: params.rotation, scale: params.scale ?? new Vector3(1, 1, 1) };\n const kinematicData: TKinematicData = getKinematicWithDefaults(kinematic);\n const kinematicAgentParams: TKinematicTransformAgentParams = { ...agentParams, ...kinematicData, isAutoUpdate: kinematic?.isAutoUpdate ?? true };\n return KinematicTransformAgent(kinematicAgentParams, dependencies);\n}\n\nexport function getKinematicWithDefaults(kinematic: TOptional<TKinematicParams> | undefined): TKinematicData {\n const state = kinematic?.state ?? {};\n const target = kinematic?.target ?? {};\n const { linearSpeed, linearDirection, angularDirection, angularSpeed, radius } = state;\n const { position, rotation, positionThreshold, rotationThreshold } = target;\n\n return {\n state: {\n linearSpeed: linearSpeed ?? 0,\n linearDirection: linearDirection ?? new Vector3(),\n angularSpeed: angularSpeed ?? 0,\n angularDirection: angularDirection ?? new Quaternion(),\n radius: radius ?? DEFAULT_RADIUS,\n forwardAxis: ForwardAxis.X,\n isInfiniteRotation: false\n },\n target: {\n positionThreshold: positionThreshold ?? 0.01,\n position,\n rotationThreshold: rotationThreshold ?? 0.0001,\n rotation\n }\n };\n}\n"],"names":["getKinematicTransformAgent","params","kinematic","dependencies","kinematicAgentParams","position","rotation","scale","Vector3","getKinematicWithDefaults","isAutoUpdate","KinematicTransformAgent","state","target","linearSpeed","linearDirection","angularDirection","angularSpeed","radius","positionThreshold","rotationThreshold","Quaternion","DEFAULT_RADIUS","forwardAxis","ForwardAxis","X","isInfiniteRotation"],"mappings":"uQAOO,SAASA,2BAA2BC,OAA+BC,UAAoDC,cAC5H,MAEMC,qBAAuD,CAFhBC,SAAUJ,OAAOI,SAAUC,SAAUL,OAAOK,SAAUC,MAAON,OAAOM,OAAS,IAAIC,QAAQ,EAAG,EAAG,MACtGC,yBAAyBP,WACkCQ,aAAcR,WAAWQ,eAAgB,GAC1I,OAAOC,wBAAwBP,qBAAsBD,aACvD,CAEO,SAASM,yBAAyBP,WACvC,MAAMU,MAAQV,WAAWU,OAAS,CAAA,EAC5BC,OAASX,WAAWW,QAAU,CAAA,GAC9BC,YAAEA,YAAAC,gBAAaA,gBAAAC,iBAAiBA,iBAAAC,aAAkBA,aAAAC,OAAcA,QAAWN,OAC3EP,SAAEA,SAAAC,SAAUA,SAAAa,kBAAUA,kBAAAC,kBAAmBA,mBAAsBP,OAErE,MAAO,CACLD,MAAO,CACLE,YAAaA,aAAe,EAC5BC,gBAAiBA,iBAAmB,IAAIP,QACxCS,aAAcA,cAAgB,EAC9BD,iBAAkBA,kBAAoB,IAAIK,WAC1CH,OAAQA,QAAUI,eAClBC,YAAaC,YAAYC,EACzBC,oBAAoB,GAEtBb,OAAQ,CACNM,kBAAmBA,mBAAqB,IACxCd,kBACAe,kBAAmBA,mBAAqB,KACxCd,mBAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KinematicAgentUtils.js","sources":["../../../src/TransformDrive/Utils/KinematicAgentUtils.ts"],"sourcesContent":["import type { TKinematicState, TKinematicTarget } from '@
|
|
1
|
+
{"version":3,"file":"KinematicAgentUtils.js","sources":["../../../src/TransformDrive/Utils/KinematicAgentUtils.ts"],"sourcesContent":["import type { TKinematicState, TKinematicTarget } from '@hellpig/anarchy-engine/Kinematic';\nimport { KinematicSpeed } from '@hellpig/anarchy-engine/Kinematic';\nimport type { TMeters, TRadians } from '@hellpig/anarchy-engine/Math';\nimport type { TReadonlyQuaternion, TReadonlyVector3 } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TKinematicSpeed, TKinematicTransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport type { TWriteable } from '@hellpig/anarchy-shared/Utils';\nimport { isDefined, isNotDefined } from '@hellpig/anarchy-shared/Utils';\nimport { Quaternion, Vector3 } from 'three';\n\nexport function getStepRotation(agent: TKinematicTransformAgent, rotationStep: TRadians, infinite: boolean): Quaternion | undefined {\n if (!infinite && isNotDefined(agent.data.target?.rotation)) return undefined;\n\n // Retrieve the target rotation (for infinite mode, it's used as a descriptor).\n const targetRotation: Quaternion = agent.data.target?.rotation ?? new Quaternion();\n const targetNormalized: Quaternion = targetRotation.clone().normalize();\n\n // Clamp w-component to prevent floating-point errors.\n const clamped: number = Math.min(Math.max(targetNormalized.w, -1), 1);\n let angle: number = 2 * Math.acos(clamped);\n\n // Correct angle to take the shortest rotation path.\n if (angle > Math.PI) angle -= 2 * Math.PI;\n\n const sinHalfAngle: number = Math.sqrt(1 - clamped * clamped);\n\n // Extract rotation axis; use a default axis if sinHalfAngle is too small.\n const axis: Vector3 = sinHalfAngle > 1e-6 ? new Vector3(targetNormalized.x, targetNormalized.y, targetNormalized.z).divideScalar(sinHalfAngle).normalize() : new Vector3(0, 1, 0);\n\n // Infinite Rotation Mode\n if (infinite) {\n // Use the computed sign (after correction) to determine a rotation direction.\n const stepAngle: number = Math.sign(angle) * rotationStep;\n return new Quaternion().setFromAxisAngle(axis, stepAngle);\n }\n\n // Finite Rotation Mode\n const currentRotation: Quaternion = agent.rotation$.value.clone().normalize();\n const qRelative: Quaternion = currentRotation.clone().invert().multiply(targetNormalized);\n\n // Clamp w-component for relative rotation.\n const relativeClampedW: number = Math.min(Math.max(qRelative.w, -1), 1);\n let relativeAngle: number = 2 * Math.acos(relativeClampedW);\n\n // Correct relative angle for the shortest path.\n if (relativeAngle > Math.PI) relativeAngle -= 2 * Math.PI;\n\n const relativeSinHalfAngle: number = Math.sqrt(1 - relativeClampedW * relativeClampedW);\n\n // Extract the relative rotation axis.\n const relativeAxis: Vector3 = relativeSinHalfAngle > 1e-6 ? new Vector3(qRelative.x, qRelative.y, qRelative.z).divideScalar(relativeSinHalfAngle).normalize() : new Vector3(0, 1, 0);\n\n // Compute the rotation step with the shortest path correction.\n const stepAngle: number = Math.sign(relativeAngle) * Math.min(Math.abs(relativeAngle), rotationStep);\n\n return stepAngle !== 0 ? new Quaternion().setFromAxisAngle(relativeAxis, stepAngle) : undefined;\n}\n\nexport function isPointReached(target: TKinematicTarget | undefined, position: TReadonlyVector3, state: TKinematicState): boolean {\n if (isNotDefined(target)) return false;\n const { position: targetPosition, positionThreshold } = target;\n if (isNotDefined(targetPosition)) return false;\n\n const { linearSpeed, linearDirection } = state;\n\n // If the agent is already at the target, do not move\n if (linearSpeed === 0) return true;\n\n const vectorToTarget: Vector3 = targetPosition.clone().sub(position);\n const distanceSquared: TMeters = vectorToTarget.lengthSq() as TMeters;\n\n // If the agent is close enough to the target, stop\n if (distanceSquared < positionThreshold * positionThreshold) return true;\n\n const crossedTarget: boolean = vectorToTarget.dot(linearDirection) < 0;\n // If the agent has passed the target, stop\n if (crossedTarget) return true;\n\n return false;\n}\n\nexport function isRotationReached(target: TKinematicTarget | undefined, rotation: TReadonlyQuaternion, state: TKinematicState): boolean {\n if (isNotDefined(target)) return false;\n const { rotation: targetRotation, rotationThreshold } = target;\n\n if (isNotDefined(targetRotation)) return false;\n\n const { angularSpeed } = state;\n\n // If the speed is 0, do nothing\n if (angularSpeed === 0) return true;\n\n // Calculate the current angle to the target\n const angleToTarget: TRadians = rotation.angleTo(targetRotation) as TRadians;\n\n // If the agent is close enough to the target, stop\n if (angleToTarget < rotationThreshold) return true;\n\n return false;\n}\n\nexport function rotateInstantly(agent: TWriteable<TKinematicTransformAgent>, targetRotation: TReadonlyQuaternion): void {\n agent.setAngularSpeed(0);\n // eslint-disable-next-line functional/immutable-data\n if (isDefined(agent.data.target?.rotation)) (agent.data.target as TWriteable<TKinematicTarget>).rotation = undefined;\n // eslint-disable-next-line functional/immutable-data\n (agent.data.state as TWriteable<TKinematicState>).angularDirection = targetRotation.clone().normalize();\n agent.rotation$.next(agent.data.state.angularDirection);\n return;\n}\n\nexport function moveInstantly(agent: TWriteable<TKinematicTransformAgent>, targetPosition: TReadonlyVector3): void {\n agent.setLinearSpeed(0);\n // eslint-disable-next-line functional/immutable-data\n if (isDefined(agent.data.target?.position)) (agent.data.target as TWriteable<TKinematicTarget>).position = undefined;\n agent.position$.next(targetPosition);\n return;\n}\n\nexport function isInstant(speed: TKinematicSpeed): speed is KinematicSpeed.Instant {\n return speed === KinematicSpeed.Instant;\n}\n"],"names":["getStepRotation","agent","rotationStep","infinite","isNotDefined","data","target","rotation","targetNormalized","Quaternion","clone","normalize","clamped","Math","min","max","w","angle","acos","PI","sinHalfAngle","sqrt","axis","Vector3","x","y","z","divideScalar","stepAngle","sign","setFromAxisAngle","qRelative","rotation$","value","invert","multiply","relativeClampedW","relativeAngle","relativeSinHalfAngle","relativeAxis","abs","isPointReached","position","state","targetPosition","positionThreshold","linearSpeed","linearDirection","vectorToTarget","sub","lengthSq","dot","isRotationReached","targetRotation","rotationThreshold","angularSpeed","angleTo","rotateInstantly","setAngularSpeed","isDefined","angularDirection","next","moveInstantly","setLinearSpeed","position$","isInstant","speed","KinematicSpeed","Instant"],"mappings":"4MASO,SAASA,gBAAgBC,MAAiCC,aAAwBC,UACvF,IAAKA,UAAYC,aAAaH,MAAMI,KAAKC,QAAQC,UAAW,OAG5D,MACMC,kBAD6BP,MAAMI,KAAKC,QAAQC,UAAY,IAAIE,YAClBC,QAAQC,YAGtDC,QAAkBC,KAAKC,IAAID,KAAKE,IAAIP,iBAAiBQ,MAAQ,GACnE,IAAIC,MAAgB,EAAIJ,KAAKK,KAAKN,SAG9BK,MAAQJ,KAAKM,KAAIF,OAAS,EAAIJ,KAAKM,IAEvC,MAAMC,aAAuBP,KAAKQ,KAAK,EAAIT,QAAUA,SAG/CU,KAAgBF,aAAe,KAAO,IAAIG,QAAQf,iBAAiBgB,EAAGhB,iBAAiBiB,EAAGjB,iBAAiBkB,GAAGC,aAAaP,cAAcT,YAAc,IAAIY,QAAQ,EAAG,EAAG,GAG/K,GAAIpB,SAAU,CAEZ,MAAMyB,WAAoBf,KAAKgB,KAAKZ,OAASf,aAC7C,OAAO,IAAIO,YAAaqB,iBAAiBR,KAAMM,WACjD,CAGA,MACMG,UAD8B9B,MAAM+B,UAAUC,MAAMvB,QAAQC,YACpBD,QAAQwB,SAASC,SAAS3B,kBAGlE4B,iBAA2BvB,KAAKC,IAAID,KAAKE,IAAIgB,UAAUf,MAAQ,GACrE,IAAIqB,cAAwB,EAAIxB,KAAKK,KAAKkB,kBAGtCC,cAAgBxB,KAAKM,KAAIkB,eAAiB,EAAIxB,KAAKM,IAEvD,MAAMmB,qBAA+BzB,KAAKQ,KAAK,EAAIe,iBAAmBA,kBAGhEG,aAAwBD,qBAAuB,KAAO,IAAIf,QAAQQ,UAAUP,EAAGO,UAAUN,EAAGM,UAAUL,GAAGC,aAAaW,sBAAsB3B,YAAc,IAAIY,QAAQ,EAAG,EAAG,GAG5KK,UAAoBf,KAAKgB,KAAKQ,eAAiBxB,KAAKC,IAAID,KAAK2B,IAAIH,eAAgBnC,cAEvF,OAAqB,IAAd0B,WAAkB,IAAInB,YAAaqB,iBAAiBS,aAAcX,gBAAa,CACxF,CAEO,SAASa,eAAenC,OAAsCoC,SAA4BC,OAC/F,GAAIvC,aAAaE,QAAS,OAAO,EACjC,MAAQoC,SAAUE,eAAAC,kBAAgBA,mBAAsBvC,OACxD,GAAIF,aAAawC,gBAAiB,OAAO,EAEzC,MAAME,YAAEA,YAAAC,gBAAaA,iBAAoBJ,MAGzC,GAAoB,IAAhBG,YAAmB,OAAO,EAE9B,MAAME,eAA0BJ,eAAelC,QAAQuC,IAAIP,UAI3D,OAHiCM,eAAeE,WAG1BL,kBAAoBA,sBAEXG,eAAeG,IAAIJ,iBAAmB,EAKvE,CAEO,SAASK,kBAAkB9C,OAAsCC,SAA+BoC,OACrG,GAAIvC,aAAaE,QAAS,OAAO,EACjC,MAAQC,SAAU8C,eAAAC,kBAAgBA,mBAAsBhD,OAExD,GAAIF,aAAaiD,gBAAiB,OAAO,EAEzC,MAAME,aAAEA,cAAiBZ,MAGzB,OAAqB,IAAjBY,cAG4BhD,SAASiD,QAAQH,gBAG7BC,iBAGtB,CAEO,SAASG,gBAAgBxD,MAA6CoD,gBAC3EpD,MAAMyD,gBAAgB,GAElBC,UAAU1D,MAAMI,KAAKC,QAAQC,YAAYN,MAAMI,KAAKC,OAAwCC,cAAW,GAE1GN,MAAMI,KAAKsC,MAAsCiB,iBAAmBP,eAAe3C,QAAQC,YAC5FV,MAAM+B,UAAU6B,KAAK5D,MAAMI,KAAKsC,MAAMiB,iBAExC,CAEO,SAASE,cAAc7D,MAA6C2C,gBACzE3C,MAAM8D,eAAe,GAEjBJ,UAAU1D,MAAMI,KAAKC,QAAQoC,YAAYzC,MAAMI,KAAKC,OAAwCoC,cAAW,GAC3GzC,MAAM+D,UAAUH,KAAKjB,eAEvB,CAEO,SAASqB,UAAUC,OACxB,OAAOA,QAAUC,eAAeC,OAClC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { RigidBody } from '@dimforge/rapier3d';
|
|
1
2
|
import { TMeters, TRadians } from '../../Math';
|
|
2
3
|
import { TPhysicsBody, TPhysicsBodyParams, TPhysicsBodyService } from '../../Physics';
|
|
3
4
|
import { TReadonlyQuaternion, TReadonlyVector3 } from '../../ThreeLib';
|
|
4
5
|
import { TRigidBodyTransformData } from '../Models';
|
|
5
|
-
import { RigidBody } from '@dimforge/rapier3d';
|
|
6
6
|
export declare function getPhysicsBodyTransform(body: RigidBody | undefined, prevPosition: Float32Array, prevRotation: Float32Array, tmpPosition: Float32Array, tmpRotation: Float32Array, positionNoiseThreshold: TMeters, rotationNoiseThreshold: TRadians): TRigidBodyTransformData | undefined;
|
|
7
7
|
export declare function createPhysicsBody(physicsBodyParams: TPhysicsBodyParams, physicsBodyService: TPhysicsBodyService): TPhysicsBody | undefined;
|
|
8
8
|
export declare function applyLatestTransform(rigidBody: RigidBody | undefined, position: TReadonlyVector3, rotation: TReadonlyQuaternion): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhysicsTransformAgentUtils.js","sources":["../../../src/TransformDrive/Utils/PhysicsTransformAgentUtils.ts"],"sourcesContent":["import type { TMeters, TRadians } from '@
|
|
1
|
+
{"version":3,"file":"PhysicsTransformAgentUtils.js","sources":["../../../src/TransformDrive/Utils/PhysicsTransformAgentUtils.ts"],"sourcesContent":["import type { RigidBody, Rotation, Vector } from '@dimforge/rapier3d';\nimport type { TMeters, TRadians } from '@hellpig/anarchy-engine/Math';\nimport type { TPhysicsBody, TPhysicsBodyParams, TPhysicsBodyService } from '@hellpig/anarchy-engine/Physics';\nimport { isPhysicsBodyParamsComplete } from '@hellpig/anarchy-engine/Physics';\nimport type { TReadonlyQuaternion, TReadonlyVector3 } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TRigidBodyTransformData } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { isNotDefined } from '@hellpig/anarchy-shared/Utils';\n\nexport function getPhysicsBodyTransform(\n body: RigidBody | undefined,\n prevPosition: Float32Array,\n prevRotation: Float32Array,\n tmpPosition: Float32Array,\n tmpRotation: Float32Array,\n positionNoiseThreshold: TMeters,\n rotationNoiseThreshold: TRadians\n): TRigidBodyTransformData | undefined {\n if (isNotDefined(body)) return undefined;\n\n const translation: Vector = body.translation();\n // eslint-disable-next-line functional/immutable-data\n tmpPosition[0] = translation.x;\n // eslint-disable-next-line functional/immutable-data\n tmpPosition[1] = translation.y;\n // eslint-disable-next-line functional/immutable-data\n tmpPosition[2] = translation.z;\n\n const rotation: Rotation = body.rotation();\n // eslint-disable-next-line functional/immutable-data\n tmpRotation[0] = rotation.x;\n // eslint-disable-next-line functional/immutable-data\n tmpRotation[1] = rotation.y;\n // eslint-disable-next-line functional/immutable-data\n tmpRotation[2] = rotation.z;\n // eslint-disable-next-line functional/immutable-data\n tmpRotation[3] = rotation.w;\n\n const changedPosition: boolean =\n Math.abs(tmpPosition[0] - prevPosition[0]) > positionNoiseThreshold ||\n Math.abs(tmpPosition[1] - prevPosition[1]) > positionNoiseThreshold ||\n Math.abs(tmpPosition[2] - prevPosition[2]) > positionNoiseThreshold;\n\n const changedRotation: boolean =\n Math.abs(tmpRotation[0] - prevRotation[0]) > rotationNoiseThreshold ||\n Math.abs(tmpRotation[1] - prevRotation[1]) > rotationNoiseThreshold ||\n Math.abs(tmpRotation[2] - prevRotation[2]) > rotationNoiseThreshold ||\n Math.abs(tmpRotation[3] - prevRotation[3]) > rotationNoiseThreshold;\n\n if (!changedPosition && !changedRotation) return undefined;\n\n if (changedPosition) prevPosition.set(tmpPosition);\n if (changedRotation) prevRotation.set(tmpRotation);\n\n return {\n position: changedPosition ? new Float32Array(prevPosition) : undefined,\n rotation: changedRotation ? new Float32Array(prevRotation) : undefined\n };\n}\n\nexport function createPhysicsBody(physicsBodyParams: TPhysicsBodyParams, physicsBodyService: TPhysicsBodyService): TPhysicsBody | undefined {\n if (!isPhysicsBodyParamsComplete(physicsBodyParams)) return undefined;\n return physicsBodyService.create(physicsBodyParams);\n}\n\nexport function applyLatestTransform(rigidBody: RigidBody | undefined, position: TReadonlyVector3, rotation: TReadonlyQuaternion): void {\n if (isNotDefined(rigidBody)) return;\n rigidBody.setTranslation(position, false);\n rigidBody.setRotation(rotation, false);\n}\n"],"names":["getPhysicsBodyTransform","body","prevPosition","prevRotation","tmpPosition","tmpRotation","positionNoiseThreshold","rotationNoiseThreshold","isNotDefined","translation","x","y","z","rotation","w","changedPosition","Math","abs","changedRotation","set","position","Float32Array","createPhysicsBody","physicsBodyParams","physicsBodyService","isPhysicsBodyParamsComplete","create","applyLatestTransform","rigidBody","setTranslation","setRotation"],"mappings":"4JAQO,SAASA,wBACdC,KACAC,aACAC,aACAC,YACAC,YACAC,uBACAC,wBAEA,GAAIC,aAAaP,MAAO,OAExB,MAAMQ,YAAsBR,KAAKQ,cAEjCL,YAAY,GAAKK,YAAYC,EAE7BN,YAAY,GAAKK,YAAYE,EAE7BP,YAAY,GAAKK,YAAYG,EAE7B,MAAMC,SAAqBZ,KAAKY,WAEhCR,YAAY,GAAKQ,SAASH,EAE1BL,YAAY,GAAKQ,SAASF,EAE1BN,YAAY,GAAKQ,SAASD,EAE1BP,YAAY,GAAKQ,SAASC,EAE1B,MAAMC,gBACJC,KAAKC,IAAIb,YAAY,GAAKF,aAAa,IAAMI,wBAC7CU,KAAKC,IAAIb,YAAY,GAAKF,aAAa,IAAMI,wBAC7CU,KAAKC,IAAIb,YAAY,GAAKF,aAAa,IAAMI,uBAEzCY,gBACJF,KAAKC,IAAIZ,YAAY,GAAKF,aAAa,IAAMI,wBAC7CS,KAAKC,IAAIZ,YAAY,GAAKF,aAAa,IAAMI,wBAC7CS,KAAKC,IAAIZ,YAAY,GAAKF,aAAa,IAAMI,wBAC7CS,KAAKC,IAAIZ,YAAY,GAAKF,aAAa,IAAMI,uBAE/C,OAAKQ,iBAAoBG,iBAErBH,iBAAiBb,aAAaiB,IAAIf,aAClCc,iBAAiBf,aAAagB,IAAId,aAE/B,CACLe,SAAUL,gBAAkB,IAAIM,aAAanB,mBAAgB,EAC7DW,SAAUK,gBAAkB,IAAIG,aAAalB,mBAAgB,SAP/D,CASF,CAEO,SAASmB,kBAAkBC,kBAAuCC,oBACvE,GAAKC,4BAA4BF,mBACjC,OAAOC,mBAAmBE,OAAOH,kBACnC,CAEO,SAASI,qBAAqBC,UAAkCR,SAA4BP,UAC7FL,aAAaoB,aACjBA,UAAUC,eAAeT,UAAU,GACnCQ,UAAUE,YAAYjB,UAAU,GAClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransformDriveUtils.js","sources":["../../../src/TransformDrive/Utils/TransformDriveUtils.ts"],"sourcesContent":["import type { TReadonlyQuaternion, TReadonlyVector3 } from '@
|
|
1
|
+
{"version":3,"file":"TransformDriveUtils.js","sources":["../../../src/TransformDrive/Utils/TransformDriveUtils.ts"],"sourcesContent":["import type { TReadonlyQuaternion, TReadonlyVector3 } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Constants';\nimport type { TAbstractTransformAgent } from '@hellpig/anarchy-engine/TransformDrive/Models';\nimport { isEqualOrSimilarByXyzCoords } from '@hellpig/anarchy-engine/Utils';\nimport { isDefined } from '@hellpig/anarchy-shared/Utils';\nimport type { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, EMPTY, switchMap, tap } from 'rxjs';\n\nexport function getDynamicAgents<T extends Partial<Record<TransformAgent, TAbstractTransformAgent>>>(agents: T): T {\n return Object.fromEntries(Object.entries(agents).map((v) => [v[0], v[1]])) as T;\n}\n\nexport function updateFromActiveAgent<T extends TReadonlyVector3 | TReadonlyQuaternion>(\n activeAgent$: BehaviorSubject<TAbstractTransformAgent>,\n agentProp: 'position$' | 'rotation$' | 'scale$',\n { threshold }: Readonly<{ threshold: number }>\n): Observable<T> {\n const prevValue: Float32Array = new Float32Array([0, 0, 0]);\n\n return activeAgent$.pipe(\n switchMap((agent: TAbstractTransformAgent): Subject<T> | Observable<never> => {\n return isDefined(agent) ? (agent[agentProp] as unknown as Subject<T>) : EMPTY;\n }),\n distinctUntilChanged((_prev: T, curr: T): boolean => isEqualOrSimilarByXyzCoords(prevValue[0], prevValue[1], prevValue[2], curr.x, curr.y, curr.z, threshold)),\n tap((value: T): void => {\n // eslint-disable-next-line functional/immutable-data\n prevValue[0] = value.x;\n // eslint-disable-next-line functional/immutable-data\n prevValue[1] = value.y;\n // eslint-disable-next-line functional/immutable-data\n prevValue[2] = value.z;\n })\n );\n}\n"],"names":["getDynamicAgents","agents","Object","fromEntries","entries","map","v","updateFromActiveAgent","activeAgent$","agentProp","threshold","prevValue","Float32Array","pipe","switchMap","agent","isDefined","EMPTY","distinctUntilChanged","_prev","curr","isEqualOrSimilarByXyzCoords","x","y","z","tap","value"],"mappings":"2fAQO,SAASA,iBAAqFC,QACnG,OAAOC,OAAOC,YAAYD,OAAOE,QAAQH,QAAQI,IAAKC,GAAM,CAACA,EAAE,GAAIA,EAAE,KACvE,CAEO,SAASC,sBACdC,aACAC,WACAC,UAAEA,YAEF,MAAMC,UAA0B,IAAIC,aAAa,CAAC,EAAG,EAAG,IAExD,OAAOJ,aAAaK,KAClBC,UAAWC,OACFC,UAAUD,OAAUA,MAAMN,WAAuCQ,OAE1EC,qBAAqB,CAACC,MAAUC,OAAqBC,4BAA4BV,UAAU,GAAIA,UAAU,GAAIA,UAAU,GAAIS,KAAKE,EAAGF,KAAKG,EAAGH,KAAKI,EAAGd,YACnJe,IAAKC,QAEHf,UAAU,GAAKe,MAAMJ,EAErBX,UAAU,GAAKe,MAAMH,EAErBZ,UAAU,GAAKe,MAAMF,IAG3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckUtils.js","sources":["../../src/Utils/CheckUtils.ts"],"sourcesContent":["import type { TAbstractAsyncEntityRegistry, TAbstractEntityRegistry, TWithUserData, TWithWrapperId, TWithWrapperIdEntity } from '@
|
|
1
|
+
{"version":3,"file":"CheckUtils.js","sources":["../../src/Utils/CheckUtils.ts"],"sourcesContent":["import type { TAbstractAsyncEntityRegistry, TAbstractEntityRegistry, TWithUserData, TWithWrapperId, TWithWrapperIdEntity } from '@hellpig/anarchy-engine/Abstract/Models';\nimport type { TColorWrapper } from '@hellpig/anarchy-engine/Color';\nimport type { TDestroyable, TWithPosition2dProperty, TWithPosition3dProperty, TWithPosition4dProperty, TWithPositionProperty } from '@hellpig/anarchy-engine/Mixins';\nimport type { TEulerLike } from '@hellpig/anarchy-engine/ThreeLib';\nimport type { TTransformDriveCompatibleEntity, TWithTransformDrive } from '@hellpig/anarchy-engine/TransformDrive';\nimport { isDefined, isNotDefined, isObject } from '@hellpig/anarchy-shared/Utils';\nimport type { BufferGeometry, Euler, Material, Quaternion, QuaternionLike, Vector2, Vector2Like, Vector3, Vector3Like, Vector4, Vector4Like } from 'three';\nimport { Color } from 'three';\n\nexport function isDestroyable(obj: unknown): obj is TDestroyable {\n return isDefined((obj as TDestroyable).destroy$);\n}\n\nexport const isColorWrapper = (obj: unknown): obj is TColorWrapper => isDefined((obj as TColorWrapper).entity) && (obj as TColorWrapper).entity instanceof Color;\n\nexport const isWithUserData = (entity: any): entity is TWithUserData => isDefined((entity as TWithUserData).userData);\n\nexport const isWithWrapperIdAccessors = (entity: any): entity is TWithWrapperId => isDefined((entity as TWithWrapperId).setWrapperId) && isDefined((entity as TWithWrapperId).getWrapperId);\n\nexport function isWithWrapperId<T extends TWithUserData>(obj: unknown): obj is TWithWrapperIdEntity<T> {\n return isDefined(obj) && isObject(obj) && isDefined((obj as TWithWrapperIdEntity<T>).userData) && isDefined((obj as TWithWrapperIdEntity<T>).userData.wrapperId);\n}\n\ntype TMetrics = Vector2 | Vector3 | Vector4 | Vector2Like | Vector3Like | Vector4Like | Quaternion | Euler | QuaternionLike | TEulerLike;\nexport const isVector2Like = (obj: TMetrics): obj is Vector2Like => isDefined(obj.x) && isDefined(obj.x) && isNotDefined((obj as Vector3).z) && isNotDefined((obj as Vector4).w);\nexport const isVector3Like = (obj: TMetrics): obj is Vector3Like => isDefined(obj.x) && isDefined(obj.x) && isDefined((obj as Vector3).z) && isNotDefined((obj as Vector4).w);\nexport const isVector4Like = (obj: TMetrics): obj is Vector4Like => isDefined(obj.x) && isDefined(obj.x) && isDefined((obj as Vector4).z) && isDefined((obj as Vector4).w);\n\n// TODO add unit tests\nexport const isQuaternionLike = (obj: TMetrics): obj is QuaternionLike => isVector4Like(obj as Vector4);\n// TODO add unit tests\nexport const isEulerLike = (obj: TMetrics): obj is Euler => isVector3Like(obj as Vector3);\n\nexport const isEntityWith2dPosition = (obj: TWithPositionProperty): obj is TWithPosition2dProperty => isVector2Like(obj.position as Vector2);\nexport const isEntityWith3dPosition = (obj: TWithPositionProperty): obj is TWithPosition3dProperty => isVector3Like(obj.position as Vector3);\nexport const isEntityWith4dPosition = (obj: TWithPositionProperty): obj is TWithPosition4dProperty => isVector4Like(obj.position as Vector4);\n\nexport const isAsyncEntityRegistry = (registry: TAbstractEntityRegistry<any> | TAbstractAsyncEntityRegistry<any>): registry is TAbstractAsyncEntityRegistry<any> =>\n isDefined((registry as TAbstractAsyncEntityRegistry<any>).findByTagsAsync) && isDefined((registry as TAbstractAsyncEntityRegistry<any>).findByTagAsync);\n\nexport const hasMaterial = (entity: unknown): entity is { material?: Material | Array<Material> | null } => isDefined((entity as any).material);\n\nexport const hasGeometry = (entity: unknown): entity is { geometry?: BufferGeometry | null } => isDefined((entity as any).geometry);\n\nexport function hasTransformDrive<T extends TTransformDriveCompatibleEntity>(entity: unknown): entity is TWithTransformDrive<T> {\n return isDefined((entity as TWithTransformDrive<T>).drive) && isDefined((entity as TWithTransformDrive<T>).driveToTargetConnector);\n}\n"],"names":["isDestroyable","obj","isDefined","destroy$","isColorWrapper","entity","Color","isWithUserData","userData","isWithWrapperIdAccessors","setWrapperId","getWrapperId","isWithWrapperId","isObject","wrapperId","isVector2Like","x","isNotDefined","z","w","isVector3Like","isVector4Like","isQuaternionLike","isEulerLike","isEntityWith2dPosition","position","isEntityWith3dPosition","isEntityWith4dPosition","isAsyncEntityRegistry","registry","findByTagsAsync","findByTagAsync","hasMaterial","material","hasGeometry","geometry","hasTransformDrive","drive","driveToTargetConnector"],"mappings":"0LASO,SAASA,cAAcC,KAC5B,OAAOC,UAAWD,IAAqBE,SACzC,CAEO,MAAMC,eAAkBH,KAAuCC,UAAWD,IAAsBI,SAAYJ,IAAsBI,kBAAkBC,MAE9IC,eAAkBF,QAAyCH,UAAWG,OAAyBG,UAE/FC,yBAA4BJ,QAA0CH,UAAWG,OAA0BK,eAAiBR,UAAWG,OAA0BM,cAEvK,SAASC,gBAAyCX,KACvD,OAAOC,UAAUD,MAAQY,SAASZ,MAAQC,UAAWD,IAAgCO,WAAaN,UAAWD,IAAgCO,SAASM,UACxJ,CAGO,MAAMC,cAAiBd,KAAsCC,UAAUD,IAAIe,IAAMd,UAAUD,IAAIe,IAAMC,aAAchB,IAAgBiB,IAAMD,aAAchB,IAAgBkB,GACjKC,cAAiBnB,KAAsCC,UAAUD,IAAIe,IAAMd,UAAUD,IAAIe,IAAMd,UAAWD,IAAgBiB,IAAMD,aAAchB,IAAgBkB,GAC9JE,cAAiBpB,KAAsCC,UAAUD,IAAIe,IAAMd,UAAUD,IAAIe,IAAMd,UAAWD,IAAgBiB,IAAMhB,UAAWD,IAAgBkB,GAG3JG,iBAAoBrB,KAAyCoB,cAAcpB,KAE3EsB,YAAetB,KAAgCmB,cAAcnB,KAE7DuB,uBAA0BvB,KAA+Dc,cAAcd,IAAIwB,UAC3GC,uBAA0BzB,KAA+DmB,cAAcnB,IAAIwB,UAC3GE,uBAA0B1B,KAA+DoB,cAAcpB,IAAIwB,UAE3GG,sBAAyBC,UACpC3B,UAAW2B,SAA+CC,kBAAoB5B,UAAW2B,SAA+CE,gBAE7HC,YAAe3B,QAAgFH,UAAWG,OAAe4B,UAEzHC,YAAe7B,QAAoEH,UAAWG,OAAe8B,UAEnH,SAASC,kBAA6D/B,QAC3E,OAAOH,UAAWG,OAAkCgC,QAAUnC,UAAWG,OAAkCiC,uBAC7G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordsUtils.js","sources":["../../src/Utils/CoordsUtils.ts"],"sourcesContent":["import type { TMeters, TRadians } from '@
|
|
1
|
+
{"version":3,"file":"CoordsUtils.js","sources":["../../src/Utils/CoordsUtils.ts"],"sourcesContent":["import type { TMeters, TRadians } from '@hellpig/anarchy-engine/Math';\nimport { getAzimuthFromDirection, getElevationFromDirection } from '@hellpig/anarchy-engine/Math';\nimport type { TReadonlyVector3 } from '@hellpig/anarchy-engine/ThreeLib';\nimport { Vector3 } from 'three';\n\ntype TTempCoords = Readonly<{\n coord1: number;\n coord2: number;\n}>;\n\n//Generates an array of angles that could be used for circular movement\nexport function generateAnglesForCircle(numberOfPoints: number, numberOfCircles: number = 1, startAngle: number = 0): ReadonlyArray<TRadians> {\n let angleArray: ReadonlyArray<TRadians> = [];\n const fullCircle: TRadians = (2 * Math.PI * numberOfCircles) as TRadians;\n const angleStep: TRadians = (fullCircle / numberOfPoints) as TRadians;\n\n // eslint-disable-next-line functional/no-loop-statements\n for (let i: number = 0; i <= numberOfPoints; i++) {\n angleArray = [...angleArray, (startAngle + i * angleStep) as TRadians];\n }\n\n return angleArray;\n}\n\n// Generates coords for circular movement\nfunction createCirclePath(angleArray: ReadonlyArray<TRadians>, radius: TMeters, circleCenter: TTempCoords): ReadonlyArray<TTempCoords> {\n return angleArray.map((angle: TRadians) => {\n return {\n coord1: Math.cos(angle) * radius + circleCenter.coord1,\n coord2: Math.sin(angle) * radius + circleCenter.coord2\n };\n });\n}\n\nexport function createCirclePathXY(angleArray: ReadonlyArray<TRadians>, radius: TMeters, circleCenter: Vector3): ReadonlyArray<Vector3> {\n return createCirclePath(angleArray, radius, { coord1: circleCenter.x, coord2: circleCenter.y }).map((coords: TTempCoords): Vector3 => new Vector3(coords.coord1, coords.coord2, circleCenter.z));\n}\n\nexport function createCirclePathXZ(angleArray: ReadonlyArray<TRadians>, radius: TMeters, circleCenter: Vector3): ReadonlyArray<Vector3> {\n return createCirclePath(angleArray, radius, { coord1: circleCenter.x, coord2: circleCenter.z }).map((coords: TTempCoords): Vector3 => new Vector3(coords.coord1, circleCenter.y, coords.coord2));\n}\n\nexport function createCirclePathYZ(angleArray: ReadonlyArray<TRadians>, radius: TMeters, circleCenter: Vector3): ReadonlyArray<Vector3> {\n return createCirclePath(angleArray, radius, { coord1: circleCenter.y, coord2: circleCenter.z }).map((coords: TTempCoords): Vector3 => new Vector3(circleCenter.x, coords.coord1, coords.coord2));\n}\n\nexport function getMouseAzimuthAndElevation(mousePosition: TReadonlyVector3, playerPosition: TReadonlyVector3): Readonly<{ azimuth: TRadians; elevation: TRadians }> {\n const direction: TReadonlyVector3 = mousePosition.clone().sub(playerPosition).normalize();\n const azimuth: TRadians = getAzimuthFromDirection(direction);\n const elevation: TRadians = getElevationFromDirection(direction);\n\n return { azimuth, elevation };\n}\n"],"names":["generateAnglesForCircle","numberOfPoints","numberOfCircles","startAngle","angleArray","angleStep","Math","PI","i","createCirclePath","radius","circleCenter","map","angle","coord1","cos","coord2","sin","createCirclePathXY","x","y","coords","Vector3","z","createCirclePathXZ","createCirclePathYZ","getMouseAzimuthAndElevation","mousePosition","playerPosition","direction","clone","sub","normalize","azimuth","getAzimuthFromDirection","elevation","getElevationFromDirection"],"mappings":"uHAWO,SAASA,wBAAwBC,eAAwBC,gBAA0B,EAAGC,WAAqB,GAChH,IAAIC,WAAsC,GAC1C,MACMC,UADwB,EAAIC,KAAKC,GAAKL,gBACFD,eAG1C,IAAA,IAASO,EAAY,EAAGA,GAAKP,eAAgBO,IAC3CJ,WAAa,IAAIA,WAAaD,WAAaK,EAAIH,WAGjD,OAAOD,UACT,CAGA,SAASK,iBAAiBL,WAAqCM,OAAiBC,cAC9E,OAAOP,WAAWQ,IAAKC,QACd,CACLC,OAAQR,KAAKS,IAAIF,OAASH,OAASC,aAAaG,OAChDE,OAAQV,KAAKW,IAAIJ,OAASH,OAASC,aAAaK,SAGtD,CAEO,SAASE,mBAAmBd,WAAqCM,OAAiBC,cACvF,OAAOF,iBAAiBL,WAAYM,OAAQ,CAAEI,OAAQH,aAAaQ,EAAGH,OAAQL,aAAaS,IAAKR,IAAKS,QAAiC,IAAIC,QAAQD,OAAOP,OAAQO,OAAOL,OAAQL,aAAaY,GAC/L,CAEO,SAASC,mBAAmBpB,WAAqCM,OAAiBC,cACvF,OAAOF,iBAAiBL,WAAYM,OAAQ,CAAEI,OAAQH,aAAaQ,EAAGH,OAAQL,aAAaY,IAAKX,IAAKS,QAAiC,IAAIC,QAAQD,OAAOP,OAAQH,aAAaS,EAAGC,OAAOL,QAC1L,CAEO,SAASS,mBAAmBrB,WAAqCM,OAAiBC,cACvF,OAAOF,iBAAiBL,WAAYM,OAAQ,CAAEI,OAAQH,aAAaS,EAAGJ,OAAQL,aAAaY,IAAKX,IAAKS,QAAiC,IAAIC,QAAQX,aAAaQ,EAAGE,OAAOP,OAAQO,OAAOL,QAC1L,CAEO,SAASU,4BAA4BC,cAAiCC,gBAC3E,MAAMC,UAA8BF,cAAcG,QAAQC,IAAIH,gBAAgBI,YAI9E,MAAO,CAAEC,QAHiBC,wBAAwBL,WAGhCM,UAFUC,0BAA0BP,WAGxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DestroyUtils.js","sources":["../../src/Utils/DestroyUtils.ts"],"sourcesContent":["import type { TAbstractEntity } from '@
|
|
1
|
+
{"version":3,"file":"DestroyUtils.js","sources":["../../src/Utils/DestroyUtils.ts"],"sourcesContent":["import type { TAbstractEntity } from '@hellpig/anarchy-engine/Abstract';\nimport type { TAnyAudio } from '@hellpig/anarchy-engine/Audio';\nimport type { TAnyMaterialWrapper, TMaterials } from '@hellpig/anarchy-engine/Material';\nimport type { TWithModel3d, TWithModel3dEntities } from '@hellpig/anarchy-engine/Models3d';\nimport { isDefined, isNotDefined } from '@hellpig/anarchy-shared/Utils';\nimport type { AnimationAction, AnimationClip, Material, Object3D, PositionalAudio } from 'three';\nimport { Mesh, Texture } from 'three';\n\nimport { hasGeometry, hasMaterial, hasTransformDrive } from './CheckUtils';\nimport { isWrapper } from './WrapperHelpers';\n\nexport function disposeGltf(gltf: Object3D | null): void {\n if (!gltf) return;\n\n gltf.removeFromParent();\n\n gltf.traverse((child: Object3D): void => {\n if (child instanceof Mesh) {\n if (child.geometry) (child as any).geometry?.dispose();\n\n const materials: ReadonlyArray<Material> = Array.isArray(child.material) ? child.material : [child.material];\n disposeMaterialDeep(materials);\n }\n });\n\n // eslint-disable-next-line functional/immutable-data\n if (isDefined((gltf as any).animations)) gltf.animations.length = 0;\n // eslint-disable-next-line functional/immutable-data\n gltf.userData = {};\n gltf.clear?.();\n // eslint-disable-next-line functional/immutable-data\n gltf.children.length = 0;\n gltf = null;\n}\n\nexport function destroyTransformDriveInEntity(entity: unknown): void {\n if (!hasTransformDrive(entity)) return;\n entity.drive.destroy$.next();\n entity.driveToTargetConnector.destroy$.next();\n}\n\nexport function destroyMaterialInEntity<T extends { material: TMaterials | TAnyMaterialWrapper | ReadonlyArray<TMaterials> | ReadonlyArray<TAnyMaterialWrapper> }>(entity: T): void {\n if (isNotDefined(entity)) return;\n if (!hasMaterial(entity)) return;\n if (isNotDefined(entity.material)) return;\n\n const materials = Array.isArray(entity.material) ? entity.material : [entity.material];\n disposeMaterialDeep(materials);\n\n // eslint-disable-next-line functional/immutable-data\n entity.material = null as any;\n}\n\nexport function disposeMaterialDeep(material: Material | TAnyMaterialWrapper | ReadonlyArray<Material> | ReadonlyArray<TAnyMaterialWrapper> | undefined | null): void {\n if (isNotDefined(material)) return;\n const materials: ReadonlyArray<Material> | ReadonlyArray<TAnyMaterialWrapper> = Array.isArray(material) ? material : [material];\n\n materials.forEach((material: Material | TAnyMaterialWrapper | null): void => {\n if (isNotDefined(material)) return;\n if (isWrapper(material)) {\n material.destroy$.next();\n return;\n }\n\n Object.values(material).forEach((value: any): void => {\n if (value instanceof Texture) value.dispose();\n });\n\n material.dispose();\n });\n}\n\nexport function destroyGeometryInEntity(entity: unknown): void {\n if (!hasGeometry(entity)) return;\n\n entity.geometry?.dispose?.();\n (entity as any).skeleton?.dispose?.();\n // eslint-disable-next-line functional/immutable-data\n entity.geometry = null;\n}\n\nexport function removeFromParent(entity: any): void {\n if (isDefined(entity.removeFromParent)) return entity.removeFromParent();\n return entity.parent?.remove(entity);\n}\n\nexport function stopParenting(entity: any): void {\n if (typeof entity.traverse === 'function') {\n entity.children?.forEach((child: any | undefined): void => {\n try {\n child?.traverse((descendant: any): void => {\n if (descendant.parent?.remove) descendant.parent.remove(descendant);\n });\n } catch (e: unknown) {\n console.log('Destroy: [stopParenting] Failed to traverse child:', e);\n }\n });\n }\n}\n\nexport function destroyModel3dAnimationEntities({ model3dSource, mixer, actions }: TAbstractEntity<TWithModel3dEntities>): void {\n if (isNotDefined(mixer)) return;\n\n Object.values(actions).forEach((action: AnimationAction): void => {\n action.stop();\n action.reset();\n mixer.uncacheAction(action.getClip(), action.getRoot());\n });\n\n mixer.stopAllAction();\n\n mixer.uncacheRoot(model3dSource);\n\n model3dSource.animations?.forEach((clip: AnimationClip): void => {\n mixer.uncacheClip(clip);\n mixer.uncacheAction(clip);\n });\n\n // eslint-disable-next-line functional/immutable-data\n model3dSource.animations.length = 0;\n}\n\nexport function destroyAudio(entity: TAnyAudio): void {\n if (isNotDefined(entity)) return;\n\n try {\n entity.stop?.();\n entity.disconnect?.();\n } catch {\n console.warn('Audio: failed to stop or disconnect audio (probably already stopped or disconnected)');\n }\n\n // eslint-disable-next-line functional/immutable-data\n entity.buffer = null as any;\n // eslint-disable-next-line functional/immutable-data\n entity.listener = null as any;\n // eslint-disable-next-line functional/immutable-data\n entity.source = null as any;\n // eslint-disable-next-line functional/immutable-data\n if (isDefined((entity as PositionalAudio).panner)) (entity as PositionalAudio).panner = null as any;\n\n entity.removeFromParent();\n entity.clear?.();\n}\n\nexport function genericEntityCleanUp(entity: any): void {\n if (isNotDefined(entity)) return;\n\n //Tell the children that they have no parent anymore\n stopParenting(entity);\n\n //Remove from parent (scene)\n removeFromParent(entity);\n\n //Clean up transform drive\n destroyTransformDriveInEntity(entity);\n\n //Trigger destroy$ for model3d\n if (isDefined((entity as unknown as TWithModel3d).model3d)) (entity as unknown as TWithModel3d).model3d.destroy$.next();\n\n // Destroy Threejs fields and resources\n destroyGeometryInEntity(entity);\n destroyMaterialInEntity(entity);\n\n // Clear children if possible\n (entity as any).destroy$?.next();\n\n //Not the best solution, but for some entities (e.g., spatial grids), we need to call .clear() after destroy$.next() kinda done,\n setTimeout((): void => {\n // Clear children if possible\n (entity as any).clear?.();\n }, 10);\n\n // Dispose itself if possible\n (entity as any).dispose?.();\n}\n"],"names":["disposeGltf","gltf","removeFromParent","traverse","child","Mesh","geometry","dispose","disposeMaterialDeep","Array","isArray","material","isDefined","animations","length","userData","clear","children","destroyTransformDriveInEntity","entity","hasTransformDrive","drive","destroy$","next","driveToTargetConnector","destroyMaterialInEntity","isNotDefined","hasMaterial","forEach","isWrapper","Object","values","value","Texture","destroyGeometryInEntity","hasGeometry","skeleton","parent","remove","stopParenting","descendant","e","console","log","destroyModel3dAnimationEntities","model3dSource","mixer","actions","action","stop","reset","uncacheAction","getClip","getRoot","stopAllAction","uncacheRoot","clip","uncacheClip","destroyAudio","disconnect","warn","buffer","listener","source","panner","genericEntityCleanUp","model3d","setTimeout"],"mappings":"yOAWO,SAASA,YAAYC,MACrBA,OAELA,KAAKC,mBAELD,KAAKE,SAAUC,QACTA,iBAAiBC,OACfD,MAAME,UAAWF,MAAcE,UAAUC,UAG7CC,oBAD2CC,MAAMC,QAAQN,MAAMO,UAAYP,MAAMO,SAAW,CAACP,MAAMO,cAMnGC,UAAWX,KAAaY,cAAaZ,KAAKY,WAAWC,OAAS,GAElEb,KAAKc,SAAW,CAAA,EAChBd,KAAKe,UAELf,KAAKgB,SAASH,OAAS,EACvBb,KAAO,KACT,CAEO,SAASiB,8BAA8BC,QACvCC,kBAAkBD,UACvBA,OAAOE,MAAMC,SAASC,OACtBJ,OAAOK,uBAAuBF,SAASC,OACzC,CAEO,SAASE,wBAAmJN,QAC7JO,aAAaP,SACZQ,YAAYR,UACbO,aAAaP,OAAOR,YAGxBH,oBADkBC,MAAMC,QAAQS,OAAOR,UAAYQ,OAAOR,SAAW,CAACQ,OAAOR,WAI7EQ,OAAOR,SAAW,MACpB,CAEO,SAASH,oBAAoBG,UAC9Be,aAAaf,YAC+DF,MAAMC,QAAQC,UAAYA,SAAW,CAACA,WAE5GiB,QAASjB,YACbe,aAAaf,aACbkB,UAAUlB,WACZA,UAASW,SAASC,QAIpBO,OAAOC,OAAOpB,WAAUiB,QAASI,QAC3BA,iBAAiBC,SAASD,MAAMzB,YAGtCI,UAASJ,aAEb,CAEO,SAAS2B,wBAAwBf,QACjCgB,YAAYhB,UAEjBA,OAAOb,UAAUC,YAChBY,OAAeiB,UAAU7B,YAE1BY,OAAOb,SAAW,KACpB,CAEO,SAASJ,iBAAiBiB,QAC/B,OAAIP,UAAUO,OAAOjB,kBAA0BiB,OAAOjB,mBAC/CiB,OAAOkB,QAAQC,OAAOnB,OAC/B,CAEO,SAASoB,cAAcpB,QACG,mBAApBA,OAAOhB,UAChBgB,OAAOF,UAAUW,QAASxB,QACxB,IACEA,OAAOD,SAAUqC,aACXA,WAAWH,QAAQC,QAAQE,WAAWH,OAAOC,OAAOE,aAE5D,OAASC,GACPC,QAAQC,IAAI,qDAAsDF,EACpE,GAGN,CAEO,SAASG,iCAAgCC,cAAEA,cAAAC,MAAeA,MAAAC,QAAOA,UAClErB,aAAaoB,SAEjBhB,OAAOC,OAAOgB,SAASnB,QAASoB,SAC9BA,OAAOC,OACPD,OAAOE,QACPJ,MAAMK,cAAcH,OAAOI,UAAWJ,OAAOK,aAG/CP,MAAMQ,gBAENR,MAAMS,YAAYV,eAElBA,cAAchC,YAAYe,QAAS4B,OACjCV,MAAMW,YAAYD,MAClBV,MAAMK,cAAcK,QAItBX,cAAchC,WAAWC,OAAS,EACpC,CAEO,SAAS4C,aAAavC,QAC3B,IAAIO,aAAaP,QAAjB,CAEA,IACEA,OAAO8B,SACP9B,OAAOwC,cACT,CAAA,MACEjB,QAAQkB,KAAK,uFACf,CAGAzC,OAAO0C,OAAS,KAEhB1C,OAAO2C,SAAW,KAElB3C,OAAO4C,OAAS,KAEZnD,UAAWO,OAA2B6C,UAAU7C,OAA2B6C,OAAS,MAExF7C,OAAOjB,mBACPiB,OAAOH,SAnBmB,CAoB5B,CAEO,SAASiD,qBAAqB9C,QAC/BO,aAAaP,UAGjBoB,cAAcpB,QAGdjB,iBAAiBiB,QAGjBD,8BAA8BC,QAG1BP,UAAWO,OAAmC+C,UAAW/C,OAAmC+C,QAAQ5C,SAASC,OAGjHW,wBAAwBf,QACxBM,wBAAwBN,QAGvBA,OAAeG,UAAUC,OAG1B4C,WAAW,KAERhD,OAAeH,WACf,IAGFG,OAAeZ,YAClB"}
|