@hellpig/anarchy-engine 22.0.2 → 22.0.4

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.
Files changed (397) hide show
  1. package/dist/Abstract/Entities/AbstractEntity.js.map +1 -1
  2. package/dist/Abstract/Factories/AbstractFactory.js.map +1 -1
  3. package/dist/Abstract/Factories/ReactiveFactory.js.map +1 -1
  4. package/dist/Abstract/Loaders/AbstractLoader.js.map +1 -1
  5. package/dist/Abstract/Mixins/WithWrapperIdMixin.js.map +1 -1
  6. package/dist/Abstract/Models/THtmlElementStyleDeclaration.d.ts +4 -4
  7. package/dist/Abstract/Registries/AbstractEntityAsyncRegistry.js.map +1 -1
  8. package/dist/Abstract/Registries/AbstractEntityRegistry.js.map +1 -1
  9. package/dist/Abstract/Registries/AbstractResourceAsyncRegistry.js.map +1 -1
  10. package/dist/Abstract/Registries/AbstractSimpleRegistry.js.map +1 -1
  11. package/dist/Abstract/Registries/AbstractWatcherRegistry.js.map +1 -1
  12. package/dist/Abstract/Registries/Mixin/Registry/WithBaseAccessorsRegistry.js.map +1 -1
  13. package/dist/Abstract/Registries/Mixin/Registry/WithReactiveRegistry.js.map +1 -1
  14. package/dist/Abstract/Services/AbstractService.js.map +1 -1
  15. package/dist/Abstract/Watchers/AbstractWatcher.js.map +1 -1
  16. package/dist/Abstract/Watchers/AbstractWatcherWithState.js.map +1 -1
  17. package/dist/Abstract/Wrappers/AbstractWrapper.js.map +1 -1
  18. package/dist/Actor/Adapters/ConfigToParams.js.map +1 -1
  19. package/dist/Actor/Adapters/EntityToConfig.js.map +1 -1
  20. package/dist/Actor/Adapters/Helpers/ActorStatesConfigToParams.js.map +1 -1
  21. package/dist/Actor/Adapters/Helpers/Model3dSettingsConfigToParams.js.map +1 -1
  22. package/dist/Actor/Entities/Actor/Actor.js.map +1 -1
  23. package/dist/Actor/Factories/ActorFactory.js.map +1 -1
  24. package/dist/Actor/Mixins/WithActorStates.js.map +1 -1
  25. package/dist/Actor/Registries/ActorRegistry.js.map +1 -1
  26. package/dist/Actor/Registries/Model3dToActorConnectionRegistry.js.map +1 -1
  27. package/dist/Actor/Services/ActorService.js.map +1 -1
  28. package/dist/Actor/TransformDrive/ActorTransformDrive.js.map +1 -1
  29. package/dist/Actor/Utils/ActorUtils.js.map +1 -1
  30. package/dist/Animations/Adapters/EntityToConfig.js.map +1 -1
  31. package/dist/Animations/Loader/AnimationsLoader.js.map +1 -1
  32. package/dist/Animations/Registries/AnimationsMetaInfoRegistry.js.map +1 -1
  33. package/dist/Animations/Registries/AnimationsResourceAsyncRegistry.js.map +1 -1
  34. package/dist/Animations/Services/AnimationsService.js.map +1 -1
  35. package/dist/Animations/Utils/SerializationUtils.js.map +1 -1
  36. package/dist/Audio/Adapters/AudioConfigToParams.js.map +1 -1
  37. package/dist/Audio/Adapters/EntityToConfig.js.map +1 -1
  38. package/dist/Audio/Factories/AudioFactory.js.map +1 -1
  39. package/dist/Audio/Loader/AudioLoader.js.map +1 -1
  40. package/dist/Audio/Registries/AudioListenersRegistry.js.map +1 -1
  41. package/dist/Audio/Registries/AudioMetaInfoRegistry.js.map +1 -1
  42. package/dist/Audio/Registries/AudioRegistry.js.map +1 -1
  43. package/dist/Audio/Registries/AudioResourceAsyncRegistry.js.map +1 -1
  44. package/dist/Audio/Services/AudioService.js.map +1 -1
  45. package/dist/Audio/TransformDrive/Audio3dTransformDrive.js.map +1 -1
  46. package/dist/Audio/Utils/AudioUtils.js.map +1 -1
  47. package/dist/Audio/Utils/DebugAudioRenderer.js.map +1 -1
  48. package/dist/Audio/Wrappers/AbstractAudioWrapper.js.map +1 -1
  49. package/dist/Audio/Wrappers/Audio3dWrapper.js.map +1 -1
  50. package/dist/Audio/Wrappers/AudioWrapper.js.map +1 -1
  51. package/dist/Camera/Adapters/ConfigToParams.js.map +1 -1
  52. package/dist/Camera/Adapters/EntityToConfig.js.map +1 -1
  53. package/dist/Camera/Factories/CameraFactory.js.map +1 -1
  54. package/dist/Camera/Registries/AbstractCameraRegistry.js.map +1 -1
  55. package/dist/Camera/Services/CameraService.js.map +1 -1
  56. package/dist/Camera/TransformDrive/CameraTransformDrive.js.map +1 -1
  57. package/dist/Camera/Utils/CameraUtils.js.map +1 -1
  58. package/dist/Camera/Wrappers/Accessors.js.map +1 -1
  59. package/dist/Camera/Wrappers/OrthographicCameraWrapper.js.map +1 -1
  60. package/dist/Camera/Wrappers/PerspectiveCameraWrapper.js.map +1 -1
  61. package/dist/Collisions/Mixins/WithCollisions.js.map +1 -1
  62. package/dist/Collisions/Services/BvhService.js.map +1 -1
  63. package/dist/Collisions/Services/CollisionsService.js.map +1 -1
  64. package/dist/Color/Adapters/EntityToConfig.js.map +1 -1
  65. package/dist/Color/Wrappers/ColorWrapper.js.map +1 -1
  66. package/dist/Context/AmbientContext/AmbientContext.js.map +1 -1
  67. package/dist/Controls/Adapters/ConfigToParams.js.map +1 -1
  68. package/dist/Controls/Adapters/EntityToConfig.js.map +1 -1
  69. package/dist/Controls/Factories/ControlsFactory.js.map +1 -1
  70. package/dist/Controls/Loop/ControlsLoopEffect.js.map +1 -1
  71. package/dist/Controls/Models/TFpsControlsWrapper.d.ts +1 -1
  72. package/dist/Controls/Models/TOrbitControlsWrapper.d.ts +1 -1
  73. package/dist/Controls/Registries/ControlsRegistry.js.map +1 -1
  74. package/dist/Controls/Services/ControlsService.js.map +1 -1
  75. package/dist/Controls/Utils/ControlsUtils.js.map +1 -1
  76. package/dist/Controls/Wrappers/FpsControls/FpsControlsAccessors.d.ts +1 -1
  77. package/dist/Controls/Wrappers/FpsControls/FpsControlsAccessors.js.map +1 -1
  78. package/dist/Controls/Wrappers/FpsControls/FpsControlsWrapper.js.map +1 -1
  79. package/dist/Controls/Wrappers/FpsControls/FpsControlsWrapperHelper.js.map +1 -1
  80. package/dist/Controls/Wrappers/OrbitControls/OrbitControlsAccessors.d.ts +1 -1
  81. package/dist/Controls/Wrappers/OrbitControls/OrbitControlsAccessors.js.map +1 -1
  82. package/dist/Controls/Wrappers/OrbitControls/OrbitControlsWrapper.js.map +1 -1
  83. package/dist/Controls/Wrappers/OrbitControls/OrbitControlsWrapperHelper.js.map +1 -1
  84. package/dist/Distance/Utils/DistanceUtils.js.map +1 -1
  85. package/dist/EnvMap/Adapters/ConfigToParams.js.map +1 -1
  86. package/dist/EnvMap/Adapters/EntityToConfig.js.map +1 -1
  87. package/dist/EnvMap/Factories/EnvMapFactory.js.map +1 -1
  88. package/dist/EnvMap/Loader/EnvMapLoader.js.map +1 -1
  89. package/dist/EnvMap/Registries/EnvMapMetaInfoRegistry.js.map +1 -1
  90. package/dist/EnvMap/Registries/EnvMapRegistry.js.map +1 -1
  91. package/dist/EnvMap/Registries/EnvMapTextureAsyncRegistry.js.map +1 -1
  92. package/dist/EnvMap/Services/EnvMapService.js.map +1 -1
  93. package/dist/EnvMap/Wrappers/EnvMapWrapper.js.map +1 -1
  94. package/dist/Fog/Adapters/ConfigToParams.js.map +1 -1
  95. package/dist/Fog/Adapters/EntityToConfig.js.map +1 -1
  96. package/dist/Fog/Factories/FogFactory.js.map +1 -1
  97. package/dist/Fog/Registries/FogRegistry.js.map +1 -1
  98. package/dist/Fog/Services/FogService.js.map +1 -1
  99. package/dist/Fog/Wrappers/FogWrapper.js.map +1 -1
  100. package/dist/Fsm/Adapters/ConfigToParams.js.map +1 -1
  101. package/dist/Fsm/Adapters/EntityToConfig.js.map +1 -1
  102. package/dist/Fsm/Entities/FsmSource.js.map +1 -1
  103. package/dist/Fsm/Factories/FsmInstanceFactory.js.map +1 -1
  104. package/dist/Fsm/Factories/FsmSourceFactory.js.map +1 -1
  105. package/dist/Fsm/Registries/FsmInstanceRegistry.js.map +1 -1
  106. package/dist/Fsm/Registries/FsmSourceRegistry.js.map +1 -1
  107. package/dist/Fsm/Services/FsmInstanceService.js.map +1 -1
  108. package/dist/Fsm/Services/FsmService.js.map +1 -1
  109. package/dist/Fsm/Services/FsmSourceService.js.map +1 -1
  110. package/dist/Fsm/Wrappers/FsmWrapper.js.map +1 -1
  111. package/dist/Global/Decorators/ContainerDecorator.js.map +1 -1
  112. package/dist/Global/Utils/ContainerUtils.js.map +1 -1
  113. package/dist/Intersections/Adapters/ConfigToParams.js.map +1 -1
  114. package/dist/Intersections/Adapters/EntityToConfig.js.map +1 -1
  115. package/dist/Intersections/Factories/IntersectionsWatcherFactory.js.map +1 -1
  116. package/dist/Intersections/Models/TIntersectionsDirectionWatcher.d.ts +1 -1
  117. package/dist/Intersections/Registries/IntersectionsWatcherRegistry.js.map +1 -1
  118. package/dist/Intersections/Services/IntersectionsWatcherService.js.map +1 -1
  119. package/dist/Intersections/Utils/IntersectionsWatcherUtils.js.map +1 -1
  120. package/dist/Intersections/Watchers/AbstractIntersectionsWatcher.js.map +1 -1
  121. package/dist/Intersections/Watchers/IntersectionsCameraWatcher.js.map +1 -1
  122. package/dist/Intersections/Watchers/IntersectionsDirectionWatcher.js.map +1 -1
  123. package/dist/Keyboard/Factories/KeyWatcherFactory.js.map +1 -1
  124. package/dist/Keyboard/Registries/KeyWatcherRegistry.js.map +1 -1
  125. package/dist/Keyboard/Services/KeyboardService.js.map +1 -1
  126. package/dist/Keyboard/Utils/KeysRxJsUtils.js.map +1 -1
  127. package/dist/Keyboard/Utils/KeysUtils.js.map +1 -1
  128. package/dist/Keyboard/Watchers/KeyComboWatcher.js.map +1 -1
  129. package/dist/Keyboard/Watchers/KeyPressWatcher.js.map +1 -1
  130. package/dist/Keyboard/Watchers/KeyReleaseWatcher.js.map +1 -1
  131. package/dist/Kinematic/Adapters/ConfigToParams.js.map +1 -1
  132. package/dist/Kinematic/Adapters/EntityToConfig.js.map +1 -1
  133. package/dist/Kinematic/Constants/KinematicConstants.js.map +1 -1
  134. package/dist/Kinematic/Utils/KinematicUtils.js.map +1 -1
  135. package/dist/Light/Adapters/ConfigToParams.js.map +1 -1
  136. package/dist/Light/Adapters/EntityToConfig.js.map +1 -1
  137. package/dist/Light/Factories/LightFactory.js.map +1 -1
  138. package/dist/Light/Registries/LightRegistry.js.map +1 -1
  139. package/dist/Light/Services/LightService.js.map +1 -1
  140. package/dist/Light/TransformDrive/LightTransformDrive.js.map +1 -1
  141. package/dist/Light/Utils/Utils.js.map +1 -1
  142. package/dist/Light/Wrappers/AbstractLightWrapper.js.map +1 -1
  143. package/dist/Light/Wrappers/AmbientLightWrapper.js.map +1 -1
  144. package/dist/Light/Wrappers/DirectionalLightWrapper.js.map +1 -1
  145. package/dist/Light/Wrappers/HemisphereLightWrapper.js.map +1 -1
  146. package/dist/Light/Wrappers/LightWrapperHelper.js.map +1 -1
  147. package/dist/Light/Wrappers/PointLightWrapper.js.map +1 -1
  148. package/dist/Light/Wrappers/RectAreaLightWrapper.js.map +1 -1
  149. package/dist/Light/Wrappers/SpotLightWrapper.js.map +1 -1
  150. package/dist/LoadingManager/Factories/LoadingManagerFactory.js.map +1 -1
  151. package/dist/LoadingManager/Registries/LoadingManagerRegistry.js.map +1 -1
  152. package/dist/LoadingManager/Services/LoadingManagerService.js.map +1 -1
  153. package/dist/LoadingManager/Wrappers/LoadingManagerWrapper.js.map +1 -1
  154. package/dist/Loop/Constants/LoopsDefaultSettings.js.map +1 -1
  155. package/dist/Loop/Entities/DeltaCalculator.js.map +1 -1
  156. package/dist/Loop/Entities/Loop.js.map +1 -1
  157. package/dist/Loop/Factories/LoopFactory.js.map +1 -1
  158. package/dist/Loop/Registries/LoopRegistry.js.map +1 -1
  159. package/dist/Loop/Services/LoopService.js.map +1 -1
  160. package/dist/Loop/Utils/LoopDebugUtils.js.map +1 -1
  161. package/dist/Loop/Utils/LoopUtils.js.map +1 -1
  162. package/dist/Material/Adapters/ConfigToParams.js.map +1 -1
  163. package/dist/Material/Adapters/EntityToConfig.js.map +1 -1
  164. package/dist/Material/Constants/Material/MaterialMap.js.map +1 -1
  165. package/dist/Material/Factories/MaterialFactory.js.map +1 -1
  166. package/dist/Material/Mixins/WithMaterial.d.ts +1 -1
  167. package/dist/Material/Mixins/WithMaterial.js.map +1 -1
  168. package/dist/Material/Models/TMaterialParamsOptions.d.ts +1 -4
  169. package/dist/Material/Registries/MaterialRegistry.js.map +1 -1
  170. package/dist/Material/Services/MaterialService.js.map +1 -1
  171. package/dist/Material/Utils/MaterialUtils.js.map +1 -1
  172. package/dist/Material/Wrappers/MaterialWrapper.js.map +1 -1
  173. package/dist/Math/Utils/AnglesUtils.js +1 -1
  174. package/dist/Math/Utils/AnglesUtils.js.map +1 -1
  175. package/dist/Math/Utils/DistanceUtils.js.map +1 -1
  176. package/dist/Measurements/Constants/Distance.js.map +1 -1
  177. package/dist/Measurements/Constants/Time.js.map +1 -1
  178. package/dist/Measurements/Utils/MeasurementsUtils.d.ts +1 -1
  179. package/dist/Measurements/Utils/MeasurementsUtils.js.map +1 -1
  180. package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveBy2dMixin.js.map +1 -1
  181. package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveBy3dMixin.js.map +1 -1
  182. package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveBy4dMixin.js.map +1 -1
  183. package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByWMixin.js.map +1 -1
  184. package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByXMixin.js.map +1 -1
  185. package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByYMixin.js.map +1 -1
  186. package/dist/Mixins/GameObjects/Mixins/Movable/WithMoveByZMixin.js.map +1 -1
  187. package/dist/Mixins/GameObjects/Mixins/Position/WithPosition2dMixin.js.map +1 -1
  188. package/dist/Mixins/GameObjects/Mixins/Position/WithPosition3dMixin.js.map +1 -1
  189. package/dist/Mixins/GameObjects/Mixins/Position/WithPosition4dMixin.js.map +1 -1
  190. package/dist/Mixins/GameObjects/Mixins/Position/WithPositionMixin.js.map +1 -1
  191. package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByWMixin.js.map +1 -1
  192. package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByXMixin.js.map +1 -1
  193. package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByXyzMixin.js.map +1 -1
  194. package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByYMixin.js.map +1 -1
  195. package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationByZMixin.js.map +1 -1
  196. package/dist/Mixins/GameObjects/Mixins/Rotatable/WithRotationMixin.js.map +1 -1
  197. package/dist/Mixins/GameObjects/Mixins/Scalable/WithScaleMixin.js.map +1 -1
  198. package/dist/Mixins/GameObjects/Mixins/WithObject3D.js.map +1 -1
  199. package/dist/Mixins/Generics/DestroyableMixin.js.map +1 -1
  200. package/dist/Mixins/Generics/ExtractSerializableRegistrableFields.js.map +1 -1
  201. package/dist/Mixins/Generics/WithActiveEntityServiceMixin.js.map +1 -1
  202. package/dist/Mixins/Generics/WithActiveMixin.js.map +1 -1
  203. package/dist/Mixins/Generics/WithNameAndNameAccessorsMixin.js.map +1 -1
  204. package/dist/Mixins/Services/WithCreateFromConfigService.js.map +1 -1
  205. package/dist/Mixins/Services/WithCreateService.js.map +1 -1
  206. package/dist/Mixins/Services/WithFactoryService.js.map +1 -1
  207. package/dist/Mixins/Services/WithRegistryService.js.map +1 -1
  208. package/dist/Mixins/Services/WithSceneGetterService.js.map +1 -1
  209. package/dist/Mixins/Services/WithSerializableEntities.js.map +1 -1
  210. package/dist/Mixins/Services/WithSerializeAllResources.js.map +1 -1
  211. package/dist/Models3d/Adapters/ConfigToParams.js.map +1 -1
  212. package/dist/Models3d/Adapters/EntityToConfig.js.map +1 -1
  213. package/dist/Models3d/Entities/Model3d.js.map +1 -1
  214. package/dist/Models3d/Factories/Models3dFactory.js.map +1 -1
  215. package/dist/Models3d/Loaders/Loader3dCore.js.map +1 -1
  216. package/dist/Models3d/Loaders/Models3dLoader.js.map +1 -1
  217. package/dist/Models3d/Mixins/WithModel3dEntities.js.map +1 -1
  218. package/dist/Models3d/Models/TModel3dParams.d.ts +1 -1
  219. package/dist/Models3d/Models/TModels3dLoader.d.ts +1 -1
  220. package/dist/Models3d/Models/TModels3dResourceAsyncRegistry.d.ts +1 -1
  221. package/dist/Models3d/Models/TModels3dService.d.ts +1 -1
  222. package/dist/Models3d/Registries/Model3dRawToModel3dConnectionRegistry.js.map +1 -1
  223. package/dist/Models3d/Registries/Models3dMetaInfoRegistry.js.map +1 -1
  224. package/dist/Models3d/Registries/Models3dRegistry.js.map +1 -1
  225. package/dist/Models3d/Registries/Models3dResourceAsyncRegistry.js.map +1 -1
  226. package/dist/Models3d/Services/Models3dService.js.map +1 -1
  227. package/dist/Models3d/Utils/SerializationUtils.js.map +1 -1
  228. package/dist/Models3d/Utils/UtilsModel3d.d.ts +1 -1
  229. package/dist/Models3d/Utils/UtilsModel3d.js.map +1 -1
  230. package/dist/Models3d/Utils/UtilsModels3dService.js.map +1 -1
  231. package/dist/Models3d/Utils/UtilsPrimitiveModels3d.d.ts +1 -1
  232. package/dist/Models3d/Utils/UtilsPrimitiveModels3d.js.map +1 -1
  233. package/dist/Mouse/Factories/MouseClickWatcherFactory.js.map +1 -1
  234. package/dist/Mouse/Factories/MousePositionWatcherFactory.js.map +1 -1
  235. package/dist/Mouse/Registries/MouseClickWatcherRegistry.js.map +1 -1
  236. package/dist/Mouse/Registries/MousePositionWatcherRegistry.js.map +1 -1
  237. package/dist/Mouse/Services/MouseService.js.map +1 -1
  238. package/dist/Mouse/Utils/MouseUtils.js.map +1 -1
  239. package/dist/Mouse/Watchers/MouseClickWatcher.js.map +1 -1
  240. package/dist/Mouse/Watchers/MousePositionWatcher.js.map +1 -1
  241. package/dist/Particles/Adapters/ConfigToParams.js.map +1 -1
  242. package/dist/Particles/Adapters/EntityToConfig.js.map +1 -1
  243. package/dist/Particles/Factories/ParticlesFactory.js.map +1 -1
  244. package/dist/Particles/Registries/ParticlesRegistry.js.map +1 -1
  245. package/dist/Particles/Services/ParticlesService.js.map +1 -1
  246. package/dist/Particles/TransformDrive/ParticlesTransformDrive.js.map +1 -1
  247. package/dist/Particles/Wrappers/ParticlesWrapper.js.map +1 -1
  248. package/dist/Physics/Adapters/EntityToConfig.d.ts +1 -1
  249. package/dist/Physics/Adapters/EntityToConfig.js.map +1 -1
  250. package/dist/Physics/Adapters/PhysicsBodyConfigToParams.js +1 -1
  251. package/dist/Physics/Adapters/PhysicsBodyConfigToParams.js.map +1 -1
  252. package/dist/Physics/Adapters/PhysicsWorldConfigToParams.js.map +1 -1
  253. package/dist/Physics/Constants/RigidBodyTypesMap.d.ts +1 -1
  254. package/dist/Physics/Constants/RigidBodyTypesMap.js +1 -1
  255. package/dist/Physics/Constants/RigidBodyTypesMap.js.map +1 -1
  256. package/dist/Physics/Entities/PhysicsBody.js.map +1 -1
  257. package/dist/Physics/Entities/PhysicsBodyUtils.d.ts +1 -1
  258. package/dist/Physics/Entities/PhysicsBodyUtils.js +1 -1
  259. package/dist/Physics/Entities/PhysicsBodyUtils.js.map +1 -1
  260. package/dist/Physics/Factories/PhysicsBodyFactory.js.map +1 -1
  261. package/dist/Physics/Mixins/WithPhysicsBodyEntities.js.map +1 -1
  262. package/dist/Physics/Models/TPhysicsWorldService.d.ts +1 -1
  263. package/dist/Physics/Registries/PhysicsBodyRegistry.js.map +1 -1
  264. package/dist/Physics/Renderers/PhysicsDebugRenderer.d.ts +1 -1
  265. package/dist/Physics/Renderers/PhysicsDebugRenderer.js.map +1 -1
  266. package/dist/Physics/Services/PhysicsBodyService.js.map +1 -1
  267. package/dist/Physics/Services/PhysicsWorldService.js +1 -1
  268. package/dist/Physics/Services/PhysicsWorldService.js.map +1 -1
  269. package/dist/Physics/Utils/ParamsUtils.js.map +1 -1
  270. package/dist/Physics/Utils/PhysicsMovementUtils.d.ts +2 -2
  271. package/dist/Physics/Utils/PhysicsMovementUtils.js +1 -1
  272. package/dist/Physics/Utils/PhysicsMovementUtils.js.map +1 -1
  273. package/dist/Renderer/Adapters/ConfigToParams.js.map +1 -1
  274. package/dist/Renderer/Adapters/EntityToConfig.js.map +1 -1
  275. package/dist/Renderer/Factories/RendererFactory.js.map +1 -1
  276. package/dist/Renderer/Loop/RendererLoopEffect.js.map +1 -1
  277. package/dist/Renderer/Mixins/WithThreeJsRendererParamsAccessors.js.map +1 -1
  278. package/dist/Renderer/Mixins/WithThreeJsRendererPropsAccessors.js.map +1 -1
  279. package/dist/Renderer/Registries/RendererRegistry.js.map +1 -1
  280. package/dist/Renderer/Services/RendererService.js.map +1 -1
  281. package/dist/Renderer/Wrappers/Accessors.js.map +1 -1
  282. package/dist/Renderer/Wrappers/RendererWrapper.js.map +1 -1
  283. package/dist/Scene/Adapters/ConfigToParams.js.map +1 -1
  284. package/dist/Scene/Adapters/EntityToConfig.js.map +1 -1
  285. package/dist/Scene/Factories/SceneFactory.js.map +1 -1
  286. package/dist/Scene/Registries/SceneRegistry.js.map +1 -1
  287. package/dist/Scene/Services/ScenesService.js.map +1 -1
  288. package/dist/Scene/Wrappers/SceneWrapper.js.map +1 -1
  289. package/dist/Space/Adapters/ConfigToParams.js.map +1 -1
  290. package/dist/Space/Adapters/EntityToConfig.js.map +1 -1
  291. package/dist/Space/Entities/Space.js.map +1 -1
  292. package/dist/Space/Entities/SpaceFromConfig.js.map +1 -1
  293. package/dist/Space/Factories/SpaceFactory.js.map +1 -1
  294. package/dist/Space/Registries/SpaceRegistry.js.map +1 -1
  295. package/dist/Space/Services/SpaceService.js.map +1 -1
  296. package/dist/Space/Utils/CanvasUtils.js.map +1 -1
  297. package/dist/Space/Utils/CreateEntitiesUtils.js.map +1 -1
  298. package/dist/Space/Utils/CreateLoopsUtils.js.map +1 -1
  299. package/dist/Space/Utils/LoadResourcesUtils.js.map +1 -1
  300. package/dist/Space/Utils/PrepareServicesUtils.js.map +1 -1
  301. package/dist/Space/Utils/SchemaValidationUtils.js.map +1 -1
  302. package/dist/Space/Validators/SchemasValidator.js.map +1 -1
  303. package/dist/Space/Validators/ValidateConfig.js.map +1 -1
  304. package/dist/Space/Validators/ValidateSpace.js.map +1 -1
  305. package/dist/Spatial/Adapters/ConfigToParams.js.map +1 -1
  306. package/dist/Spatial/Adapters/ConfigToParamsSpatialData.js.map +1 -1
  307. package/dist/Spatial/Adapters/EntityToConfig.js.map +1 -1
  308. package/dist/Spatial/Factories/SpatialGridFactory.js.map +1 -1
  309. package/dist/Spatial/Mixins/WithReactivePosition.js.map +1 -1
  310. package/dist/Spatial/Mixins/WithReactiveRotation.js.map +1 -1
  311. package/dist/Spatial/Mixins/WithSpatial.js.map +1 -1
  312. package/dist/Spatial/Mixins/WithUpdateSpatialCell.js.map +1 -1
  313. package/dist/Spatial/Registries/SpatialGridRegistry.js.map +1 -1
  314. package/dist/Spatial/Services/SpatialGridService.js.map +1 -1
  315. package/dist/Spatial/Services/SpatialHelper.d.ts +1 -1
  316. package/dist/Spatial/Services/SpatialHelper.js.map +1 -1
  317. package/dist/Spatial/Wrappers/SpatialCellWrapper.js.map +1 -1
  318. package/dist/Spatial/Wrappers/SpatialGridWrapper.js.map +1 -1
  319. package/dist/Text/Adapters/ConfigToParams.js.map +1 -1
  320. package/dist/Text/Adapters/EntityToConfig.js.map +1 -1
  321. package/dist/Text/Factories/TextFactory.js.map +1 -1
  322. package/dist/Text/Loop/TextLoopEffect.js.map +1 -1
  323. package/dist/Text/Models/TText2dRenderer.d.ts +1 -1
  324. package/dist/Text/Models/TText2dWrapper.d.ts +1 -1
  325. package/dist/Text/Models/TText3dRenderer.d.ts +1 -1
  326. package/dist/Text/Models/TText3dWrapper.d.ts +1 -1
  327. package/dist/Text/Models/TTextRenderer.d.ts +2 -2
  328. package/dist/Text/Models/TTextWrapper.d.ts +2 -2
  329. package/dist/Text/Registries/Text2dRegistry.js.map +1 -1
  330. package/dist/Text/Registries/Text2dRendererRegistry.js.map +1 -1
  331. package/dist/Text/Registries/Text3dRegistry.js.map +1 -1
  332. package/dist/Text/Registries/Text3dRendererRegistry.js.map +1 -1
  333. package/dist/Text/Registries/Text3dTextureRegistry.js.map +1 -1
  334. package/dist/Text/Renderers/Text2dRenderer.js.map +1 -1
  335. package/dist/Text/Renderers/Text3dRenderer.js.map +1 -1
  336. package/dist/Text/Renderers/TextRendererBuilder.d.ts +2 -2
  337. package/dist/Text/Renderers/TextRendererBuilder.js.map +1 -1
  338. package/dist/Text/Services/TextService.js.map +1 -1
  339. package/dist/Text/TransformDrive/TextTransformDrive.js.map +1 -1
  340. package/dist/Text/Utils/TextUtils.js.map +1 -1
  341. package/dist/Text/Wrappers/Accessors.js.map +1 -1
  342. package/dist/Text/Wrappers/Text2dWrapper.js.map +1 -1
  343. package/dist/Text/Wrappers/Text3dTextureWrapper.js.map +1 -1
  344. package/dist/Text/Wrappers/Text3dWrapper.js.map +1 -1
  345. package/dist/Text/Wrappers/TextTextureWrapper.js.map +1 -1
  346. package/dist/Text/Wrappers/TextWrapper.d.ts +2 -2
  347. package/dist/Text/Wrappers/TextWrapper.js.map +1 -1
  348. package/dist/Text/Wrappers/TextWrapperBuilder.js.map +1 -1
  349. package/dist/Text/Wrappers/TextWrapperHelper.js.map +1 -1
  350. package/dist/Texture/Loaders/TexturesLoader.js.map +1 -1
  351. package/dist/Texture/Registries/TextureMetaInfoRegistry.js.map +1 -1
  352. package/dist/Texture/Registries/TextureResourceAsyncRegistry.js.map +1 -1
  353. package/dist/Texture/Services/TextureService.js.map +1 -1
  354. package/dist/Texture/Utils/TextureServiceHelper.js.map +1 -1
  355. package/dist/ThreeLib/Utils/Object3dUtils.js.map +1 -1
  356. package/dist/TransformDrive/Adapters/EntityToConfig.js.map +1 -1
  357. package/dist/TransformDrive/Entities/Agents/AbstractTransformAgent.js.map +1 -1
  358. package/dist/TransformDrive/Entities/Agents/ConnectedTransformAgent.js.map +1 -1
  359. package/dist/TransformDrive/Entities/Agents/DefaultTransformAgent.js.map +1 -1
  360. package/dist/TransformDrive/Entities/Agents/KinematicTransformAgent.js.map +1 -1
  361. package/dist/TransformDrive/Entities/Agents/PhysicsTransformAgent.js.map +1 -1
  362. package/dist/TransformDrive/Entities/Connectors/DriveToTargetConnector.js.map +1 -1
  363. package/dist/TransformDrive/Entities/Drive/TransformDrive.js.map +1 -1
  364. package/dist/TransformDrive/Factories/TransformDriveFactory.js.map +1 -1
  365. package/dist/TransformDrive/Mixins/WithMutablePositionConnector.js.map +1 -1
  366. package/dist/TransformDrive/Mixins/WithMutableRotationConnector.js.map +1 -1
  367. package/dist/TransformDrive/Mixins/WithMutableScaleConnector.js.map +1 -1
  368. package/dist/TransformDrive/Mixins/WithProxyTransform.js.map +1 -1
  369. package/dist/TransformDrive/Registries/TransformDriveRegistry.js.map +1 -1
  370. package/dist/TransformDrive/Services/TransformDriveService.js.map +1 -1
  371. package/dist/TransformDrive/Utils/ActorDriveUtils.js.map +1 -1
  372. package/dist/TransformDrive/Utils/AgentUtils.js.map +1 -1
  373. package/dist/TransformDrive/Utils/KinematicAgentUtils.js.map +1 -1
  374. package/dist/TransformDrive/Utils/PhysicsTransformAgentUtils.d.ts +1 -1
  375. package/dist/TransformDrive/Utils/PhysicsTransformAgentUtils.js.map +1 -1
  376. package/dist/TransformDrive/Utils/TransformDriveUtils.js.map +1 -1
  377. package/dist/Utils/CheckUtils.js.map +1 -1
  378. package/dist/Utils/CoordsUtils.js.map +1 -1
  379. package/dist/Utils/DateTimeUtils.d.ts +1 -1
  380. package/dist/Utils/DestroyUtils.js.map +1 -1
  381. package/dist/Utils/DomUtils.js.map +1 -1
  382. package/dist/Utils/EntityUtils.js.map +1 -1
  383. package/dist/Utils/RegistryAsyncUtils.js.map +1 -1
  384. package/dist/Utils/RegistryUtils.js.map +1 -1
  385. package/dist/Utils/RxJsUtils.js.map +1 -1
  386. package/dist/Utils/ScreenUtils.js.map +1 -1
  387. package/dist/Utils/TagsUtils.js.map +1 -1
  388. package/dist/Utils/TransformUtils.js.map +1 -1
  389. package/dist/Utils/WrapperHelpers.d.ts +1 -1
  390. package/dist/Utils/WrapperHelpers.js.map +1 -1
  391. package/dist/assets/Loop.worker-D1bMWlsN.js.map +1 -1
  392. package/dist/packages/anarchy-shared/src/Utils/AsyncUtils.js.map +1 -1
  393. package/dist/packages/anarchy-shared/src/Utils/CssUtils.js.map +1 -1
  394. package/dist/packages/anarchy-shared/src/Utils/ObjectUtils.js.map +1 -1
  395. package/legal/NOTICE.md +1 -1
  396. package/legal/THIRD_PARTY_LICENSES.md +1 -1
  397. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PrepareServicesUtils.js","sources":["../../../src/Space/Utils/PrepareServicesUtils.ts"],"sourcesContent":["import type { TModel3dToActorConnectionRegistry } from '@Anarchy/Engine/Actor';\nimport { ActorFactory, ActorRegistry, ActorService, Model3dToActorConnectionRegistry } from '@Anarchy/Engine/Actor';\nimport type { TAnimationsService } from '@Anarchy/Engine/Animations';\nimport { AnimationsMetaInfoRegistry, AnimationsResourceAsyncRegistry, AnimationsService } from '@Anarchy/Engine/Animations';\nimport type { TAudioService } from '@Anarchy/Engine/Audio';\nimport { AudioFactory, AudioListenersRegistry, AudioRegistry, AudioResourceAsyncRegistry, AudioService } from '@Anarchy/Engine/Audio';\nimport { AudioMetaInfoRegistry } from '@Anarchy/Engine/Audio/Registries/AudioMetaInfoRegistry';\nimport type { TCameraService } from '@Anarchy/Engine/Camera';\nimport { CameraFactory, CameraRegistry, CameraService } from '@Anarchy/Engine/Camera';\nimport type { TCollisionsService } from '@Anarchy/Engine/Collisions';\nimport { CollisionsService } from '@Anarchy/Engine/Collisions';\nimport { ControlService, ControlsFactory, ControlsRegistry } from '@Anarchy/Engine/Controls';\nimport { EnvMapFactory, EnvMapRegistry, EnvMapService, EnvMapTextureAsyncRegistry } from '@Anarchy/Engine/EnvMap';\nimport { EnvMapMetaInfoRegistry } from '@Anarchy/Engine/EnvMap/Registries/EnvMapMetaInfoRegistry';\nimport { FogFactory, FogRegistry, FogService } from '@Anarchy/Engine/Fog';\nimport type { TFsmService } from '@Anarchy/Engine/Fsm';\nimport { FsmInstanceFactory, FsmInstanceRegistry, FsmSourceRegistry } from '@Anarchy/Engine/Fsm';\nimport { FsmSourceFactory } from '@Anarchy/Engine/Fsm/Factories/FsmSourceFactory';\nimport { FsmService } from '@Anarchy/Engine/Fsm/Services/FsmService';\nimport type { TContainerDecorator } from '@Anarchy/Engine/Global';\nimport { IntersectionsWatcherFactory, IntersectionsWatcherRegistry, IntersectionsWatcherService } from '@Anarchy/Engine/Intersections';\nimport { KeyboardService, KeyWatcherFactory, KeyWatcherRegistry } from '@Anarchy/Engine/Keyboard';\nimport { LightFactory, LightRegistry, LightService } from '@Anarchy/Engine/Light';\nimport type { TLoadingManagerService, TLoadingManagerWrapper } from '@Anarchy/Engine/LoadingManager';\nimport { DEFAULT_SPACE_LOADING_MANAGER_NAME, LoadingManagerFactory, LoadingManagerRegistry, LoadingManagerService } from '@Anarchy/Engine/LoadingManager';\nimport type { TLoopService } from '@Anarchy/Engine/Loop';\nimport { LoopFactory, LoopRegistry, LoopService } from '@Anarchy/Engine/Loop';\nimport type { TMaterialService } from '@Anarchy/Engine/Material';\nimport { MaterialFactory, MaterialRegistry, MaterialService } from '@Anarchy/Engine/Material';\nimport type { TModel3dRawToModel3dConnectionRegistry, TModels3dService } from '@Anarchy/Engine/Models3d';\nimport { Model3dRawToModel3dConnectionRegistry, Models3dFactory, Models3dMetaInfoRegistry, Models3dRegistry, Models3dResourceAsyncRegistry, Models3dService } from '@Anarchy/Engine/Models3d';\nimport { MouseClickWatcherFactory, MouseClickWatcherRegistry, MousePositionWatcherFactory, MousePositionWatcherRegistry, MouseService } from '@Anarchy/Engine/Mouse';\nimport { ParticlesFactory, ParticlesRegistry, ParticlesService } from '@Anarchy/Engine/Particles';\nimport type { TPhysicsBodyService, TPhysicsWorldService } from '@Anarchy/Engine/Physics';\nimport { PhysicsBodyFactory, PhysicsBodyRegistry, PhysicsBodyService, PhysicsWorldService } from '@Anarchy/Engine/Physics';\nimport { RendererFactory, RendererRegistry, RendererService } from '@Anarchy/Engine/Renderer';\nimport type { TScenesService, TSceneWrapper } from '@Anarchy/Engine/Scene';\nimport { SceneFactory, SceneRegistry, ScenesService } from '@Anarchy/Engine/Scene';\nimport type { TSpaceBaseServices, TSpaceCanvas, TSpaceLoops, TSpaceServices, TSpaceSettings } from '@Anarchy/Engine/Space/Models';\nimport type { TSpatialGridService } from '@Anarchy/Engine/Spatial';\nimport { SpatialGridFactory, SpatialGridRegistry, SpatialGridService } from '@Anarchy/Engine/Spatial';\nimport { Text2dRegistry, Text2dRendererRegistry, Text3dRegistry, Text3dRendererRegistry, Text3dTextureRegistry, TextFactory, TextService } from '@Anarchy/Engine/Text';\nimport type { TTextureService } from '@Anarchy/Engine/Texture';\nimport { TextureMetaInfoRegistry, TextureResourceAsyncRegistry, TextureService } from '@Anarchy/Engine/Texture';\nimport type { TTransformDriveService } from '@Anarchy/Engine/TransformDrive';\nimport { TransformDriveFactory, TransformDriveRegistry, TransformDriveService } from '@Anarchy/Engine/TransformDrive';\n\nexport function buildBaseServices(): TSpaceBaseServices {\n const scenesService: TScenesService = ScenesService(SceneFactory(), SceneRegistry());\n const loopService: TLoopService = LoopService(LoopFactory(), LoopRegistry());\n\n return { loopService, scenesService };\n}\n\nexport function buildEntitiesServices(\n sceneW: TSceneWrapper,\n canvas: TSpaceCanvas,\n container: TContainerDecorator,\n loops: TSpaceLoops,\n { loopService, scenesService }: TSpaceBaseServices,\n settings: TSpaceSettings\n): TSpaceServices {\n const loadingManagerService: TLoadingManagerService = LoadingManagerService(LoadingManagerFactory(), LoadingManagerRegistry());\n const loadingManagerW: TLoadingManagerWrapper = loadingManagerService.create({ name: DEFAULT_SPACE_LOADING_MANAGER_NAME });\n\n const textureService: TTextureService = TextureService(TextureResourceAsyncRegistry(), TextureMetaInfoRegistry(), loadingManagerW);\n const materialService: TMaterialService = MaterialService(MaterialFactory(), MaterialRegistry(), { textureService });\n const physicsWorldService: TPhysicsWorldService = PhysicsWorldService(sceneW, loops);\n const physicsBodyService: TPhysicsBodyService = PhysicsBodyService(PhysicsBodyFactory(), PhysicsBodyRegistry(), physicsWorldService);\n const spatialGridService: TSpatialGridService = SpatialGridService(SpatialGridFactory(), SpatialGridRegistry());\n const collisionsService: TCollisionsService = CollisionsService();\n const animationsService: TAnimationsService = AnimationsService(AnimationsResourceAsyncRegistry(), AnimationsMetaInfoRegistry(), loops, loadingManagerW, settings);\n const model3dToActorConnectionRegistry: TModel3dToActorConnectionRegistry = Model3dToActorConnectionRegistry();\n const model3dRawToModel3dConnectionRegistry: TModel3dRawToModel3dConnectionRegistry = Model3dRawToModel3dConnectionRegistry();\n const models3dService: TModels3dService = Models3dService(\n Models3dFactory(),\n Models3dRegistry(),\n Models3dResourceAsyncRegistry(),\n Models3dMetaInfoRegistry(),\n {\n materialService,\n animationsService,\n model3dRawToModel3dConnectionRegistry\n },\n loadingManagerW,\n settings\n );\n const fsmService: TFsmService = FsmService(FsmInstanceFactory(), FsmSourceFactory(), FsmInstanceRegistry(), FsmSourceRegistry());\n const transformDriveService: TTransformDriveService = TransformDriveService(TransformDriveFactory(), TransformDriveRegistry(), { loopService });\n const audioService: TAudioService = AudioService(\n AudioFactory(),\n AudioRegistry(),\n AudioResourceAsyncRegistry(),\n AudioListenersRegistry(),\n AudioMetaInfoRegistry(),\n { transformDriveService },\n loops,\n loadingManagerW\n );\n const cameraService: TCameraService = CameraService(CameraFactory(), CameraRegistry(), sceneW, { audioService, transformDriveService, container });\n\n return {\n actorService: ActorService(\n ActorFactory(),\n ActorRegistry(),\n {\n collisionsService,\n fsmService,\n loopService,\n model3dToActorConnectionRegistry,\n models3dService,\n physicsBodyService,\n spatialGridService,\n transformDriveService\n },\n sceneW\n ),\n audioService,\n cameraService,\n controlsService: ControlService(ControlsFactory(), ControlsRegistry(), loops, { cameraService }, canvas),\n collisionsService,\n scenesService,\n envMapService: EnvMapService(EnvMapFactory(), EnvMapRegistry(), EnvMapTextureAsyncRegistry(), EnvMapMetaInfoRegistry(), sceneW, loadingManagerW),\n fogService: FogService(FogFactory(), FogRegistry(), sceneW),\n fsmService,\n intersectionsWatcherService: IntersectionsWatcherService(IntersectionsWatcherFactory(), IntersectionsWatcherRegistry()),\n keyboardService: KeyboardService(container, KeyWatcherFactory(), KeyWatcherRegistry()),\n lightService: LightService(LightFactory(), LightRegistry(), { transformDriveService }, sceneW),\n loadingManagerService,\n loopService,\n materialService,\n models3dService,\n animationsService,\n mouseService: MouseService(container, MouseClickWatcherFactory(), MouseClickWatcherRegistry(), MousePositionWatcherFactory(), MousePositionWatcherRegistry(), loops),\n particlesService: ParticlesService(ParticlesFactory(), ParticlesRegistry(), { transformDriveService, materialService }, sceneW),\n physicsBodyService,\n physicsWorldService,\n rendererService: RendererService(RendererFactory(), RendererRegistry(), loops, { cameraService, container }, sceneW),\n spatialGridService,\n textService: TextService(\n TextFactory(),\n Text2dRegistry(),\n Text3dRegistry(),\n Text3dTextureRegistry(),\n Text2dRendererRegistry(),\n Text3dRendererRegistry(),\n loops,\n { loopService, physicsBodyService, cameraService, transformDriveService },\n sceneW\n ),\n textureService,\n transformDriveService\n };\n}\n"],"names":["buildBaseServices","scenesService","ScenesService","SceneFactory","SceneRegistry","loopService","LoopService","LoopFactory","LoopRegistry","buildEntitiesServices","sceneW","canvas","container","loops","settings","loadingManagerService","LoadingManagerService","LoadingManagerFactory","LoadingManagerRegistry","loadingManagerW","create","name","DEFAULT_SPACE_LOADING_MANAGER_NAME","textureService","TextureService","TextureResourceAsyncRegistry","TextureMetaInfoRegistry","materialService","MaterialService","MaterialFactory","MaterialRegistry","physicsWorldService","PhysicsWorldService","physicsBodyService","PhysicsBodyService","PhysicsBodyFactory","PhysicsBodyRegistry","spatialGridService","SpatialGridService","SpatialGridFactory","SpatialGridRegistry","collisionsService","CollisionsService","animationsService","AnimationsService","AnimationsResourceAsyncRegistry","AnimationsMetaInfoRegistry","model3dToActorConnectionRegistry","Model3dToActorConnectionRegistry","model3dRawToModel3dConnectionRegistry","Model3dRawToModel3dConnectionRegistry","models3dService","Models3dService","Models3dFactory","Models3dRegistry","Models3dResourceAsyncRegistry","Models3dMetaInfoRegistry","fsmService","FsmService","FsmInstanceFactory","FsmSourceFactory","FsmInstanceRegistry","FsmSourceRegistry","transformDriveService","TransformDriveService","TransformDriveFactory","TransformDriveRegistry","audioService","AudioService","AudioFactory","AudioRegistry","AudioResourceAsyncRegistry","AudioListenersRegistry","AudioMetaInfoRegistry","cameraService","CameraService","CameraFactory","CameraRegistry","actorService","ActorService","ActorFactory","ActorRegistry","controlsService","ControlService","ControlsFactory","ControlsRegistry","envMapService","EnvMapService","EnvMapFactory","EnvMapRegistry","EnvMapTextureAsyncRegistry","EnvMapMetaInfoRegistry","fogService","FogService","FogFactory","FogRegistry","intersectionsWatcherService","IntersectionsWatcherService","IntersectionsWatcherFactory","IntersectionsWatcherRegistry","keyboardService","KeyboardService","KeyWatcherFactory","KeyWatcherRegistry","lightService","LightService","LightFactory","LightRegistry","mouseService","MouseService","MouseClickWatcherFactory","MouseClickWatcherRegistry","MousePositionWatcherFactory","MousePositionWatcherRegistry","particlesService","ParticlesService","ParticlesFactory","ParticlesRegistry","rendererService","RendererService","RendererFactory","RendererRegistry","textService","TextService","TextFactory","Text2dRegistry","Text3dRegistry","Text3dTextureRegistry","Text2dRendererRegistry","Text3dRendererRegistry"],"mappings":"ygOA+CO,SAASA,oBACd,MAAMC,cAAgCC,cAAcC,eAAgBC,iBAGpE,MAAO,CAAEC,YAFyBC,YAAYC,cAAeC,gBAEvCP,4BACxB,CAEO,SAASQ,sBACdC,OACAC,OACAC,UACAC,OACAR,YAAEA,YAAAJ,cAAaA,eACfa,UAEA,MAAMC,sBAAgDC,sBAAsBC,wBAAyBC,0BAC/FC,gBAA0CJ,sBAAsBK,OAAO,CAAEC,KAAMC,qCAE/EC,eAAkCC,eAAeC,+BAAgCC,0BAA2BP,iBAC5GQ,gBAAoCC,gBAAgBC,kBAAmBC,mBAAoB,CAAEP,gCAC7FQ,oBAA4CC,oBAAoBtB,OAAQG,OACxEoB,mBAA0CC,mBAAmBC,qBAAsBC,sBAAuBL,qBAC1GM,mBAA0CC,mBAAmBC,qBAAsBC,uBACnFC,kBAAwCC,oBACxCC,kBAAwCC,kBAAkBC,kCAAmCC,6BAA8BjC,MAAOM,gBAAiBL,UACnJiC,iCAAsEC,mCACtEC,sCAAgFC,wCAChFC,gBAAoCC,gBACxCC,kBACAC,mBACAC,gCACAC,2BACA,CACE7B,gCACAgB,oCACAM,6EAEF9B,gBACAL,UAEI2C,WAA0BC,WAAWC,qBAAsBC,mBAAoBC,sBAAuBC,qBACtGC,sBAAgDC,sBAAsBC,wBAAyBC,yBAA0B,CAAE7D,0BAC3H8D,aAA8BC,aAClCC,eACAC,gBACAC,6BACAC,yBACAC,wBACA,CAAEV,6CACFlD,MACAM,iBAEIuD,cAAgCC,cAAcC,gBAAiBC,iBAAkBnE,OAAQ,CAAEyD,0BAAcJ,4CAAuBnD,sBAEtI,MAAO,CACLkE,aAAcC,aACZC,eACAC,gBACA,CACExC,oCACAgB,sBACApD,wBACA0C,kEACAI,gCACAlB,sCACAI,sCACA0B,6CAEFrD,QAEFyD,0BACAO,4BACAQ,gBAAiBC,eAAeC,kBAAmBC,mBAAoBxE,MAAO,CAAE6D,6BAAiB/D,QACjG8B,oCACAxC,4BACAqF,cAAeC,cAAcC,gBAAiBC,iBAAkBC,6BAA8BC,yBAA0BjF,OAAQS,iBAChIyE,WAAYC,WAAWC,aAAcC,cAAerF,QACpD+C,sBACAuC,4BAA6BC,4BAA4BC,8BAA+BC,gCACxFC,gBAAiBC,gBAAgBzF,UAAW0F,oBAAqBC,sBACjEC,aAAcC,aAAaC,eAAgBC,gBAAiB,CAAE5C,6CAAyBrD,QACvFK,4CACAV,wBACAsB,gCACAwB,gCACAR,oCACAiE,aAAcC,aAAajG,UAAWkG,2BAA4BC,4BAA6BC,8BAA+BC,+BAAgCpG,OAC9JqG,iBAAkBC,iBAAiBC,mBAAoBC,oBAAqB,CAAEtD,4CAAuBpC,iCAAmBjB,QACxHuB,sCACAF,wCACAuF,gBAAiBC,gBAAgBC,kBAAmBC,mBAAoB5G,MAAO,CAAE6D,4BAAe9D,qBAAaF,QAC7G2B,sCACAqF,YAAaC,YACXC,cACAC,iBACAC,iBACAC,wBACAC,yBACAC,yBACApH,MACA,CAAER,wBAAa4B,sCAAoByC,4BAAeX,6CAClDrD,QAEFa,8BACAwC,4CAEJ"}
1
+ {"version":3,"file":"PrepareServicesUtils.js","sources":["../../../src/Space/Utils/PrepareServicesUtils.ts"],"sourcesContent":["import type { TModel3dToActorConnectionRegistry } from '@hellpig/anarchy-engine/Actor';\nimport { ActorFactory, ActorRegistry, ActorService, Model3dToActorConnectionRegistry } from '@hellpig/anarchy-engine/Actor';\nimport type { TAnimationsService } from '@hellpig/anarchy-engine/Animations';\nimport { AnimationsMetaInfoRegistry, AnimationsResourceAsyncRegistry, AnimationsService } from '@hellpig/anarchy-engine/Animations';\nimport type { TAudioService } from '@hellpig/anarchy-engine/Audio';\nimport { AudioFactory, AudioListenersRegistry, AudioRegistry, AudioResourceAsyncRegistry, AudioService } from '@hellpig/anarchy-engine/Audio';\nimport { AudioMetaInfoRegistry } from '@hellpig/anarchy-engine/Audio/Registries/AudioMetaInfoRegistry';\nimport type { TCameraService } from '@hellpig/anarchy-engine/Camera';\nimport { CameraFactory, CameraRegistry, CameraService } from '@hellpig/anarchy-engine/Camera';\nimport type { TCollisionsService } from '@hellpig/anarchy-engine/Collisions';\nimport { CollisionsService } from '@hellpig/anarchy-engine/Collisions';\nimport { ControlService, ControlsFactory, ControlsRegistry } from '@hellpig/anarchy-engine/Controls';\nimport { EnvMapFactory, EnvMapRegistry, EnvMapService, EnvMapTextureAsyncRegistry } from '@hellpig/anarchy-engine/EnvMap';\nimport { EnvMapMetaInfoRegistry } from '@hellpig/anarchy-engine/EnvMap/Registries/EnvMapMetaInfoRegistry';\nimport { FogFactory, FogRegistry, FogService } from '@hellpig/anarchy-engine/Fog';\nimport type { TFsmService } from '@hellpig/anarchy-engine/Fsm';\nimport { FsmInstanceFactory, FsmInstanceRegistry, FsmSourceRegistry } from '@hellpig/anarchy-engine/Fsm';\nimport { FsmSourceFactory } from '@hellpig/anarchy-engine/Fsm/Factories/FsmSourceFactory';\nimport { FsmService } from '@hellpig/anarchy-engine/Fsm/Services/FsmService';\nimport type { TContainerDecorator } from '@hellpig/anarchy-engine/Global';\nimport { IntersectionsWatcherFactory, IntersectionsWatcherRegistry, IntersectionsWatcherService } from '@hellpig/anarchy-engine/Intersections';\nimport { KeyboardService, KeyWatcherFactory, KeyWatcherRegistry } from '@hellpig/anarchy-engine/Keyboard';\nimport { LightFactory, LightRegistry, LightService } from '@hellpig/anarchy-engine/Light';\nimport type { TLoadingManagerService, TLoadingManagerWrapper } from '@hellpig/anarchy-engine/LoadingManager';\nimport { DEFAULT_SPACE_LOADING_MANAGER_NAME, LoadingManagerFactory, LoadingManagerRegistry, LoadingManagerService } from '@hellpig/anarchy-engine/LoadingManager';\nimport type { TLoopService } from '@hellpig/anarchy-engine/Loop';\nimport { LoopFactory, LoopRegistry, LoopService } from '@hellpig/anarchy-engine/Loop';\nimport type { TMaterialService } from '@hellpig/anarchy-engine/Material';\nimport { MaterialFactory, MaterialRegistry, MaterialService } from '@hellpig/anarchy-engine/Material';\nimport type { TModel3dRawToModel3dConnectionRegistry, TModels3dService } from '@hellpig/anarchy-engine/Models3d';\nimport { Model3dRawToModel3dConnectionRegistry, Models3dFactory, Models3dMetaInfoRegistry, Models3dRegistry, Models3dResourceAsyncRegistry, Models3dService } from '@hellpig/anarchy-engine/Models3d';\nimport { MouseClickWatcherFactory, MouseClickWatcherRegistry, MousePositionWatcherFactory, MousePositionWatcherRegistry, MouseService } from '@hellpig/anarchy-engine/Mouse';\nimport { ParticlesFactory, ParticlesRegistry, ParticlesService } from '@hellpig/anarchy-engine/Particles';\nimport type { TPhysicsBodyService, TPhysicsWorldService } from '@hellpig/anarchy-engine/Physics';\nimport { PhysicsBodyFactory, PhysicsBodyRegistry, PhysicsBodyService, PhysicsWorldService } from '@hellpig/anarchy-engine/Physics';\nimport { RendererFactory, RendererRegistry, RendererService } from '@hellpig/anarchy-engine/Renderer';\nimport type { TScenesService, TSceneWrapper } from '@hellpig/anarchy-engine/Scene';\nimport { SceneFactory, SceneRegistry, ScenesService } from '@hellpig/anarchy-engine/Scene';\nimport type { TSpaceBaseServices, TSpaceCanvas, TSpaceLoops, TSpaceServices, TSpaceSettings } from '@hellpig/anarchy-engine/Space/Models';\nimport type { TSpatialGridService } from '@hellpig/anarchy-engine/Spatial';\nimport { SpatialGridFactory, SpatialGridRegistry, SpatialGridService } from '@hellpig/anarchy-engine/Spatial';\nimport { Text2dRegistry, Text2dRendererRegistry, Text3dRegistry, Text3dRendererRegistry, Text3dTextureRegistry, TextFactory, TextService } from '@hellpig/anarchy-engine/Text';\nimport type { TTextureService } from '@hellpig/anarchy-engine/Texture';\nimport { TextureMetaInfoRegistry, TextureResourceAsyncRegistry, TextureService } from '@hellpig/anarchy-engine/Texture';\nimport type { TTransformDriveService } from '@hellpig/anarchy-engine/TransformDrive';\nimport { TransformDriveFactory, TransformDriveRegistry, TransformDriveService } from '@hellpig/anarchy-engine/TransformDrive';\n\nexport function buildBaseServices(): TSpaceBaseServices {\n const scenesService: TScenesService = ScenesService(SceneFactory(), SceneRegistry());\n const loopService: TLoopService = LoopService(LoopFactory(), LoopRegistry());\n\n return { loopService, scenesService };\n}\n\nexport function buildEntitiesServices(\n sceneW: TSceneWrapper,\n canvas: TSpaceCanvas,\n container: TContainerDecorator,\n loops: TSpaceLoops,\n { loopService, scenesService }: TSpaceBaseServices,\n settings: TSpaceSettings\n): TSpaceServices {\n const loadingManagerService: TLoadingManagerService = LoadingManagerService(LoadingManagerFactory(), LoadingManagerRegistry());\n const loadingManagerW: TLoadingManagerWrapper = loadingManagerService.create({ name: DEFAULT_SPACE_LOADING_MANAGER_NAME });\n\n const textureService: TTextureService = TextureService(TextureResourceAsyncRegistry(), TextureMetaInfoRegistry(), loadingManagerW);\n const materialService: TMaterialService = MaterialService(MaterialFactory(), MaterialRegistry(), { textureService });\n const physicsWorldService: TPhysicsWorldService = PhysicsWorldService(sceneW, loops);\n const physicsBodyService: TPhysicsBodyService = PhysicsBodyService(PhysicsBodyFactory(), PhysicsBodyRegistry(), physicsWorldService);\n const spatialGridService: TSpatialGridService = SpatialGridService(SpatialGridFactory(), SpatialGridRegistry());\n const collisionsService: TCollisionsService = CollisionsService();\n const animationsService: TAnimationsService = AnimationsService(AnimationsResourceAsyncRegistry(), AnimationsMetaInfoRegistry(), loops, loadingManagerW, settings);\n const model3dToActorConnectionRegistry: TModel3dToActorConnectionRegistry = Model3dToActorConnectionRegistry();\n const model3dRawToModel3dConnectionRegistry: TModel3dRawToModel3dConnectionRegistry = Model3dRawToModel3dConnectionRegistry();\n const models3dService: TModels3dService = Models3dService(\n Models3dFactory(),\n Models3dRegistry(),\n Models3dResourceAsyncRegistry(),\n Models3dMetaInfoRegistry(),\n {\n materialService,\n animationsService,\n model3dRawToModel3dConnectionRegistry\n },\n loadingManagerW,\n settings\n );\n const fsmService: TFsmService = FsmService(FsmInstanceFactory(), FsmSourceFactory(), FsmInstanceRegistry(), FsmSourceRegistry());\n const transformDriveService: TTransformDriveService = TransformDriveService(TransformDriveFactory(), TransformDriveRegistry(), { loopService });\n const audioService: TAudioService = AudioService(\n AudioFactory(),\n AudioRegistry(),\n AudioResourceAsyncRegistry(),\n AudioListenersRegistry(),\n AudioMetaInfoRegistry(),\n { transformDriveService },\n loops,\n loadingManagerW\n );\n const cameraService: TCameraService = CameraService(CameraFactory(), CameraRegistry(), sceneW, { audioService, transformDriveService, container });\n\n return {\n actorService: ActorService(\n ActorFactory(),\n ActorRegistry(),\n {\n collisionsService,\n fsmService,\n loopService,\n model3dToActorConnectionRegistry,\n models3dService,\n physicsBodyService,\n spatialGridService,\n transformDriveService\n },\n sceneW\n ),\n audioService,\n cameraService,\n controlsService: ControlService(ControlsFactory(), ControlsRegistry(), loops, { cameraService }, canvas),\n collisionsService,\n scenesService,\n envMapService: EnvMapService(EnvMapFactory(), EnvMapRegistry(), EnvMapTextureAsyncRegistry(), EnvMapMetaInfoRegistry(), sceneW, loadingManagerW),\n fogService: FogService(FogFactory(), FogRegistry(), sceneW),\n fsmService,\n intersectionsWatcherService: IntersectionsWatcherService(IntersectionsWatcherFactory(), IntersectionsWatcherRegistry()),\n keyboardService: KeyboardService(container, KeyWatcherFactory(), KeyWatcherRegistry()),\n lightService: LightService(LightFactory(), LightRegistry(), { transformDriveService }, sceneW),\n loadingManagerService,\n loopService,\n materialService,\n models3dService,\n animationsService,\n mouseService: MouseService(container, MouseClickWatcherFactory(), MouseClickWatcherRegistry(), MousePositionWatcherFactory(), MousePositionWatcherRegistry(), loops),\n particlesService: ParticlesService(ParticlesFactory(), ParticlesRegistry(), { transformDriveService, materialService }, sceneW),\n physicsBodyService,\n physicsWorldService,\n rendererService: RendererService(RendererFactory(), RendererRegistry(), loops, { cameraService, container }, sceneW),\n spatialGridService,\n textService: TextService(\n TextFactory(),\n Text2dRegistry(),\n Text3dRegistry(),\n Text3dTextureRegistry(),\n Text2dRendererRegistry(),\n Text3dRendererRegistry(),\n loops,\n { loopService, physicsBodyService, cameraService, transformDriveService },\n sceneW\n ),\n textureService,\n transformDriveService\n };\n}\n"],"names":["buildBaseServices","scenesService","ScenesService","SceneFactory","SceneRegistry","loopService","LoopService","LoopFactory","LoopRegistry","buildEntitiesServices","sceneW","canvas","container","loops","settings","loadingManagerService","LoadingManagerService","LoadingManagerFactory","LoadingManagerRegistry","loadingManagerW","create","name","DEFAULT_SPACE_LOADING_MANAGER_NAME","textureService","TextureService","TextureResourceAsyncRegistry","TextureMetaInfoRegistry","materialService","MaterialService","MaterialFactory","MaterialRegistry","physicsWorldService","PhysicsWorldService","physicsBodyService","PhysicsBodyService","PhysicsBodyFactory","PhysicsBodyRegistry","spatialGridService","SpatialGridService","SpatialGridFactory","SpatialGridRegistry","collisionsService","CollisionsService","animationsService","AnimationsService","AnimationsResourceAsyncRegistry","AnimationsMetaInfoRegistry","model3dToActorConnectionRegistry","Model3dToActorConnectionRegistry","model3dRawToModel3dConnectionRegistry","Model3dRawToModel3dConnectionRegistry","models3dService","Models3dService","Models3dFactory","Models3dRegistry","Models3dResourceAsyncRegistry","Models3dMetaInfoRegistry","fsmService","FsmService","FsmInstanceFactory","FsmSourceFactory","FsmInstanceRegistry","FsmSourceRegistry","transformDriveService","TransformDriveService","TransformDriveFactory","TransformDriveRegistry","audioService","AudioService","AudioFactory","AudioRegistry","AudioResourceAsyncRegistry","AudioListenersRegistry","AudioMetaInfoRegistry","cameraService","CameraService","CameraFactory","CameraRegistry","actorService","ActorService","ActorFactory","ActorRegistry","controlsService","ControlService","ControlsFactory","ControlsRegistry","envMapService","EnvMapService","EnvMapFactory","EnvMapRegistry","EnvMapTextureAsyncRegistry","EnvMapMetaInfoRegistry","fogService","FogService","FogFactory","FogRegistry","intersectionsWatcherService","IntersectionsWatcherService","IntersectionsWatcherFactory","IntersectionsWatcherRegistry","keyboardService","KeyboardService","KeyWatcherFactory","KeyWatcherRegistry","lightService","LightService","LightFactory","LightRegistry","mouseService","MouseService","MouseClickWatcherFactory","MouseClickWatcherRegistry","MousePositionWatcherFactory","MousePositionWatcherRegistry","particlesService","ParticlesService","ParticlesFactory","ParticlesRegistry","rendererService","RendererService","RendererFactory","RendererRegistry","textService","TextService","TextFactory","Text2dRegistry","Text3dRegistry","Text3dTextureRegistry","Text2dRendererRegistry","Text3dRendererRegistry"],"mappings":"ygOA+CO,SAASA,oBACd,MAAMC,cAAgCC,cAAcC,eAAgBC,iBAGpE,MAAO,CAAEC,YAFyBC,YAAYC,cAAeC,gBAEvCP,4BACxB,CAEO,SAASQ,sBACdC,OACAC,OACAC,UACAC,OACAR,YAAEA,YAAAJ,cAAaA,eACfa,UAEA,MAAMC,sBAAgDC,sBAAsBC,wBAAyBC,0BAC/FC,gBAA0CJ,sBAAsBK,OAAO,CAAEC,KAAMC,qCAE/EC,eAAkCC,eAAeC,+BAAgCC,0BAA2BP,iBAC5GQ,gBAAoCC,gBAAgBC,kBAAmBC,mBAAoB,CAAEP,gCAC7FQ,oBAA4CC,oBAAoBtB,OAAQG,OACxEoB,mBAA0CC,mBAAmBC,qBAAsBC,sBAAuBL,qBAC1GM,mBAA0CC,mBAAmBC,qBAAsBC,uBACnFC,kBAAwCC,oBACxCC,kBAAwCC,kBAAkBC,kCAAmCC,6BAA8BjC,MAAOM,gBAAiBL,UACnJiC,iCAAsEC,mCACtEC,sCAAgFC,wCAChFC,gBAAoCC,gBACxCC,kBACAC,mBACAC,gCACAC,2BACA,CACE7B,gCACAgB,oCACAM,6EAEF9B,gBACAL,UAEI2C,WAA0BC,WAAWC,qBAAsBC,mBAAoBC,sBAAuBC,qBACtGC,sBAAgDC,sBAAsBC,wBAAyBC,yBAA0B,CAAE7D,0BAC3H8D,aAA8BC,aAClCC,eACAC,gBACAC,6BACAC,yBACAC,wBACA,CAAEV,6CACFlD,MACAM,iBAEIuD,cAAgCC,cAAcC,gBAAiBC,iBAAkBnE,OAAQ,CAAEyD,0BAAcJ,4CAAuBnD,sBAEtI,MAAO,CACLkE,aAAcC,aACZC,eACAC,gBACA,CACExC,oCACAgB,sBACApD,wBACA0C,kEACAI,gCACAlB,sCACAI,sCACA0B,6CAEFrD,QAEFyD,0BACAO,4BACAQ,gBAAiBC,eAAeC,kBAAmBC,mBAAoBxE,MAAO,CAAE6D,6BAAiB/D,QACjG8B,oCACAxC,4BACAqF,cAAeC,cAAcC,gBAAiBC,iBAAkBC,6BAA8BC,yBAA0BjF,OAAQS,iBAChIyE,WAAYC,WAAWC,aAAcC,cAAerF,QACpD+C,sBACAuC,4BAA6BC,4BAA4BC,8BAA+BC,gCACxFC,gBAAiBC,gBAAgBzF,UAAW0F,oBAAqBC,sBACjEC,aAAcC,aAAaC,eAAgBC,gBAAiB,CAAE5C,6CAAyBrD,QACvFK,4CACAV,wBACAsB,gCACAwB,gCACAR,oCACAiE,aAAcC,aAAajG,UAAWkG,2BAA4BC,4BAA6BC,8BAA+BC,+BAAgCpG,OAC9JqG,iBAAkBC,iBAAiBC,mBAAoBC,oBAAqB,CAAEtD,4CAAuBpC,iCAAmBjB,QACxHuB,sCACAF,wCACAuF,gBAAiBC,gBAAgBC,kBAAmBC,mBAAoB5G,MAAO,CAAE6D,4BAAe9D,qBAAaF,QAC7G2B,sCACAqF,YAAaC,YACXC,cACAC,iBACAC,iBACAC,wBACAC,yBACAC,yBACApH,MACA,CAAER,wBAAa4B,sCAAoByC,4BAAeX,6CAClDrD,QAEFa,8BACAwC,4CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidationUtils.js","sources":["../../../src/Space/Utils/SchemaValidationUtils.ts"],"sourcesContent":["import type { TAbstractResourceConfig } from '@Anarchy/Engine/Abstract';\nimport type { TActorConfig } from '@Anarchy/Engine/Actor';\nimport type { TAnyAudioConfig, TAudioResourceConfig } from '@Anarchy/Engine/Audio';\nimport type { TWithName, TWithNameOptional, TWithTags } from '@Anarchy/Engine/Mixins';\nimport type { TModel3dConfig, TModel3dResourceConfig } from '@Anarchy/Engine/Models3d';\nimport { isPrimitiveModel3dResourceConfig, isPrimitiveModel3dSource } from '@Anarchy/Engine/Models3d';\nimport type { TPhysicsBodyConfig, TPhysicsConfig } from '@Anarchy/Engine/Physics';\nimport { findDuplicateString, isDefined, isNotDefined } from '@Anarchy/Shared/Utils';\n\nexport const validateNames = (entities: ReadonlyArray<TWithNameOptional>): boolean => entities.every(validateName);\nexport const validateName = (entity: TWithNameOptional): boolean => validateField(entity, 'name');\nexport const validateCameraNames = (\n entities: ReadonlyArray<\n Readonly<{\n cameraName: string;\n }>\n >\n): boolean => entities.every(validateCameraName);\nexport const validateCameraName = (entity: Readonly<{ cameraName: string }>): boolean => validateField(entity, 'cameraName');\n\nexport const validateActorNamesForEveryEntity = (\n entities: ReadonlyArray<\n Readonly<{\n actorNames: ReadonlyArray<string>;\n }>\n >\n): boolean => entities.every(validateActorNames);\n\nexport const validateActorNames = (\n entity: Readonly<{\n actorNames: ReadonlyArray<string>;\n }>\n): boolean => validateArrayField(entity, 'actorNames');\n\nexport const validateTagsForEveryEntity = (entities: ReadonlyArray<TWithTags>): boolean => entities.every((e: TWithTags): boolean => validateTags(e.tags));\nexport const validateTags = (tags: ReadonlyArray<string> | undefined): boolean => (tags ? tags.every(validate) : true);\n\nexport const validateField = <T extends Record<string, any>>(obj: T, field: keyof T): boolean => validate(obj[field]);\nexport const validateArrayField = <T extends Record<string, any>>(obj: T, field: keyof T): boolean => obj[field].every(validate);\n\nexport const validate = (str: string | undefined): boolean => (isDefined(str) ? str.length > 0 && /^[A-z0-9_]+$/gm.test(str) : true);\n\nexport function validateAllActorsHasModel3d(actors: ReadonlyArray<TActorConfig>, models3d: ReadonlyArray<TModel3dConfig> | undefined): boolean {\n const sources: ReadonlyArray<string> = models3d?.map((v: TModel3dConfig): string => v.name) ?? [];\n return actors.every((actor: TActorConfig): boolean => (isNotDefined(models3d) ? true : sources.includes(actor.model3dSource)));\n}\n\nexport function validateAllActorsWithPhysicsHasRelatedPhysicsBody(actors: ReadonlyArray<TActorConfig>, physics: TPhysicsConfig): boolean {\n if (isNotDefined(physics.bodies)) return true;\n const { bodies } = physics;\n if (bodies.length === 0) return true;\n\n return actors.every((actor: TActorConfig): boolean => {\n if (isNotDefined(actor.physicsBodyName)) return true;\n return bodies.some((body: TPhysicsBodyConfig): boolean => body.name === actor.physicsBodyName);\n });\n}\n\nexport function validateNoSameName(entities: ReadonlyArray<TWithName>): string | undefined {\n const duplicate: string | undefined = findDuplicateString(entities.map((e: TWithName): string => e.name));\n return duplicate ? `Name \"${duplicate}\" is duplicated` : undefined;\n}\n\n// TODO would be nice to check all the resources and relations (e.g. materials)\nexport function validateAllModel3dEntityHasValidResource(entities: ReadonlyArray<TModel3dConfig>, resources: ReadonlyArray<TModel3dResourceConfig>): boolean {\n return entities.every((entity: TModel3dConfig): boolean => {\n if (isPrimitiveModel3dSource(entity.model3dSource)) return true;\n return resources.some((resource: TModel3dResourceConfig): boolean => resource.name === entity.model3dSource);\n });\n}\n\nexport function validateAllAudioEntityHasValidResource(entities: ReadonlyArray<TAnyAudioConfig>, resources: ReadonlyArray<TAudioResourceConfig>): boolean {\n return entities.every((entity: TAnyAudioConfig): boolean => {\n return resources.some((resource: TAudioResourceConfig): boolean => resource.name === entity.audioSource);\n });\n}\n\nexport function validateModel3dFileUrls(configs: ReadonlyArray<TModel3dResourceConfig>): boolean {\n return configs.every((config: TModel3dResourceConfig): boolean => {\n if (isPrimitiveModel3dResourceConfig(config)) return true;\n return validateFileUrl(config.url);\n });\n}\n\nexport function validateFileUrls(configs: ReadonlyArray<TAbstractResourceConfig>): boolean {\n return configs.every(({ url }: TAbstractResourceConfig): boolean => validateFileUrl(url));\n}\n\nexport function validateFileUrl(url: string): boolean {\n const regex = /^(\\/?|[a-zA-Z]:\\\\)[a-zA-Z0-9_\\-/\\\\]+\\.([A-z0-9]{1,4})$/;\n return regex.test(url);\n}\n"],"names":["validateNames","entities","every","validateName","entity","validateField","validateCameraNames","validateCameraName","validateActorNamesForEveryEntity","validateActorNames","validateArrayField","validateTagsForEveryEntity","e","validateTags","tags","validate","obj","field","str","isDefined","length","test","validateAllActorsHasModel3d","actors","models3d","sources","map","v","name","actor","isNotDefined","includes","model3dSource","validateAllActorsWithPhysicsHasRelatedPhysicsBody","physics","bodies","physicsBodyName","some","body","validateNoSameName","duplicate","findDuplicateString","validateAllModel3dEntityHasValidResource","resources","isPrimitiveModel3dSource","resource","validateAllAudioEntityHasValidResource","audioSource","validateModel3dFileUrls","configs","config","isPrimitiveModel3dResourceConfig","validateFileUrl","url","validateFileUrls"],"mappings":"uSASO,MAAMA,cAAiBC,UAAwDA,SAASC,MAAMC,cACxFA,aAAgBC,QAAuCC,cAAcD,OAAQ,QAC7EE,oBACXL,UAKYA,SAASC,MAAMK,oBAChBA,mBAAsBH,QAAsDC,cAAcD,OAAQ,cAElGI,iCACXP,UAKYA,SAASC,MAAMO,oBAEhBA,mBACXL,QAGYM,mBAAmBN,OAAQ,cAE5BO,2BAA8BV,UAAgDA,SAASC,MAAOU,GAA0BC,aAAaD,EAAEE,OACvID,aAAgBC,OAAsDA,MAAOA,KAAKZ,MAAMa,UAExFV,cAAgB,CAAgCW,IAAQC,QAA4BF,SAASC,IAAIC,QACjGP,mBAAqB,CAAgCM,IAAQC,QAA4BD,IAAIC,OAAOf,MAAMa,UAE1GA,SAAYG,MAAsCC,UAAUD,MAAOA,IAAIE,OAAS,GAAK,iBAAiBC,KAAKH,KAEjH,SAASI,4BAA4BC,OAAqCC,UAC/E,MAAMC,QAAiCD,UAAUE,IAAKC,GAA8BA,EAAEC,OAAS,GAC/F,OAAOL,OAAOrB,MAAO2B,SAAkCC,aAAaN,WAAmBC,QAAQM,SAASF,MAAMG,eAChH,CAEO,SAASC,kDAAkDV,OAAqCW,SACrG,GAAIJ,aAAaI,QAAQC,QAAS,OAAO,EACzC,MAAMA,OAAEA,QAAWD,QACnB,OAAsB,IAAlBC,OAAOf,QAEJG,OAAOrB,MAAO2B,SACfC,aAAaD,MAAMO,kBAChBD,OAAOE,KAAMC,MAAsCA,KAAKV,OAASC,MAAMO,iBAElF,CAEO,SAASG,mBAAmBtC,UACjC,MAAMuC,UAAgCC,oBAAoBxC,SAASyB,IAAKd,GAAyBA,EAAEgB,OACnG,OAAOY,UAAY,SAASA,gCAA6B,CAC3D,CAGO,SAASE,yCAAyCzC,SAAyC0C,WAChG,OAAO1C,SAASC,MAAOE,UACjBwC,yBAAyBxC,OAAO4B,gBAC7BW,UAAUN,KAAMQ,UAA8CA,SAASjB,OAASxB,OAAO4B,eAElG,CAEO,SAASc,uCAAuC7C,SAA0C0C,WAC/F,OAAO1C,SAASC,MAAOE,QACduC,UAAUN,KAAMQ,UAA4CA,SAASjB,OAASxB,OAAO2C,aAEhG,CAEO,SAASC,wBAAwBC,SACtC,OAAOA,QAAQ/C,MAAOgD,UAChBC,iCAAiCD,SAC9BE,gBAAgBF,OAAOG,KAElC,CAEO,SAASC,iBAAiBL,SAC/B,OAAOA,QAAQ/C,MAAM,EAAGmD,WAA4CD,gBAAgBC,KACtF,CAEO,SAASD,gBAAgBC,KAE9B,MADc,yDACDhC,KAAKgC,IACpB"}
1
+ {"version":3,"file":"SchemaValidationUtils.js","sources":["../../../src/Space/Utils/SchemaValidationUtils.ts"],"sourcesContent":["import type { TAbstractResourceConfig } from '@hellpig/anarchy-engine/Abstract';\nimport type { TActorConfig } from '@hellpig/anarchy-engine/Actor';\nimport type { TAnyAudioConfig, TAudioResourceConfig } from '@hellpig/anarchy-engine/Audio';\nimport type { TWithName, TWithNameOptional, TWithTags } from '@hellpig/anarchy-engine/Mixins';\nimport type { TModel3dConfig, TModel3dResourceConfig } from '@hellpig/anarchy-engine/Models3d';\nimport { isPrimitiveModel3dResourceConfig, isPrimitiveModel3dSource } from '@hellpig/anarchy-engine/Models3d';\nimport type { TPhysicsBodyConfig, TPhysicsConfig } from '@hellpig/anarchy-engine/Physics';\nimport { findDuplicateString, isDefined, isNotDefined } from '@hellpig/anarchy-shared/Utils';\n\nexport const validateNames = (entities: ReadonlyArray<TWithNameOptional>): boolean => entities.every(validateName);\nexport const validateName = (entity: TWithNameOptional): boolean => validateField(entity, 'name');\nexport const validateCameraNames = (\n entities: ReadonlyArray<\n Readonly<{\n cameraName: string;\n }>\n >\n): boolean => entities.every(validateCameraName);\nexport const validateCameraName = (entity: Readonly<{ cameraName: string }>): boolean => validateField(entity, 'cameraName');\n\nexport const validateActorNamesForEveryEntity = (\n entities: ReadonlyArray<\n Readonly<{\n actorNames: ReadonlyArray<string>;\n }>\n >\n): boolean => entities.every(validateActorNames);\n\nexport const validateActorNames = (\n entity: Readonly<{\n actorNames: ReadonlyArray<string>;\n }>\n): boolean => validateArrayField(entity, 'actorNames');\n\nexport const validateTagsForEveryEntity = (entities: ReadonlyArray<TWithTags>): boolean => entities.every((e: TWithTags): boolean => validateTags(e.tags));\nexport const validateTags = (tags: ReadonlyArray<string> | undefined): boolean => (tags ? tags.every(validate) : true);\n\nexport const validateField = <T extends Record<string, any>>(obj: T, field: keyof T): boolean => validate(obj[field]);\nexport const validateArrayField = <T extends Record<string, any>>(obj: T, field: keyof T): boolean => obj[field].every(validate);\n\nexport const validate = (str: string | undefined): boolean => (isDefined(str) ? str.length > 0 && /^[A-z0-9_]+$/gm.test(str) : true);\n\nexport function validateAllActorsHasModel3d(actors: ReadonlyArray<TActorConfig>, models3d: ReadonlyArray<TModel3dConfig> | undefined): boolean {\n const sources: ReadonlyArray<string> = models3d?.map((v: TModel3dConfig): string => v.name) ?? [];\n return actors.every((actor: TActorConfig): boolean => (isNotDefined(models3d) ? true : sources.includes(actor.model3dSource)));\n}\n\nexport function validateAllActorsWithPhysicsHasRelatedPhysicsBody(actors: ReadonlyArray<TActorConfig>, physics: TPhysicsConfig): boolean {\n if (isNotDefined(physics.bodies)) return true;\n const { bodies } = physics;\n if (bodies.length === 0) return true;\n\n return actors.every((actor: TActorConfig): boolean => {\n if (isNotDefined(actor.physicsBodyName)) return true;\n return bodies.some((body: TPhysicsBodyConfig): boolean => body.name === actor.physicsBodyName);\n });\n}\n\nexport function validateNoSameName(entities: ReadonlyArray<TWithName>): string | undefined {\n const duplicate: string | undefined = findDuplicateString(entities.map((e: TWithName): string => e.name));\n return duplicate ? `Name \"${duplicate}\" is duplicated` : undefined;\n}\n\n// TODO would be nice to check all the resources and relations (e.g. materials)\nexport function validateAllModel3dEntityHasValidResource(entities: ReadonlyArray<TModel3dConfig>, resources: ReadonlyArray<TModel3dResourceConfig>): boolean {\n return entities.every((entity: TModel3dConfig): boolean => {\n if (isPrimitiveModel3dSource(entity.model3dSource)) return true;\n return resources.some((resource: TModel3dResourceConfig): boolean => resource.name === entity.model3dSource);\n });\n}\n\nexport function validateAllAudioEntityHasValidResource(entities: ReadonlyArray<TAnyAudioConfig>, resources: ReadonlyArray<TAudioResourceConfig>): boolean {\n return entities.every((entity: TAnyAudioConfig): boolean => {\n return resources.some((resource: TAudioResourceConfig): boolean => resource.name === entity.audioSource);\n });\n}\n\nexport function validateModel3dFileUrls(configs: ReadonlyArray<TModel3dResourceConfig>): boolean {\n return configs.every((config: TModel3dResourceConfig): boolean => {\n if (isPrimitiveModel3dResourceConfig(config)) return true;\n return validateFileUrl(config.url);\n });\n}\n\nexport function validateFileUrls(configs: ReadonlyArray<TAbstractResourceConfig>): boolean {\n return configs.every(({ url }: TAbstractResourceConfig): boolean => validateFileUrl(url));\n}\n\nexport function validateFileUrl(url: string): boolean {\n const regex = /^(\\/?|[a-zA-Z]:\\\\)[a-zA-Z0-9_\\-/\\\\]+\\.([A-z0-9]{1,4})$/;\n return regex.test(url);\n}\n"],"names":["validateNames","entities","every","validateName","entity","validateField","validateCameraNames","validateCameraName","validateActorNamesForEveryEntity","validateActorNames","validateArrayField","validateTagsForEveryEntity","e","validateTags","tags","validate","obj","field","str","isDefined","length","test","validateAllActorsHasModel3d","actors","models3d","sources","map","v","name","actor","isNotDefined","includes","model3dSource","validateAllActorsWithPhysicsHasRelatedPhysicsBody","physics","bodies","physicsBodyName","some","body","validateNoSameName","duplicate","findDuplicateString","validateAllModel3dEntityHasValidResource","resources","isPrimitiveModel3dSource","resource","validateAllAudioEntityHasValidResource","audioSource","validateModel3dFileUrls","configs","config","isPrimitiveModel3dResourceConfig","validateFileUrl","url","validateFileUrls"],"mappings":"uSASO,MAAMA,cAAiBC,UAAwDA,SAASC,MAAMC,cACxFA,aAAgBC,QAAuCC,cAAcD,OAAQ,QAC7EE,oBACXL,UAKYA,SAASC,MAAMK,oBAChBA,mBAAsBH,QAAsDC,cAAcD,OAAQ,cAElGI,iCACXP,UAKYA,SAASC,MAAMO,oBAEhBA,mBACXL,QAGYM,mBAAmBN,OAAQ,cAE5BO,2BAA8BV,UAAgDA,SAASC,MAAOU,GAA0BC,aAAaD,EAAEE,OACvID,aAAgBC,OAAsDA,MAAOA,KAAKZ,MAAMa,UAExFV,cAAgB,CAAgCW,IAAQC,QAA4BF,SAASC,IAAIC,QACjGP,mBAAqB,CAAgCM,IAAQC,QAA4BD,IAAIC,OAAOf,MAAMa,UAE1GA,SAAYG,MAAsCC,UAAUD,MAAOA,IAAIE,OAAS,GAAK,iBAAiBC,KAAKH,KAEjH,SAASI,4BAA4BC,OAAqCC,UAC/E,MAAMC,QAAiCD,UAAUE,IAAKC,GAA8BA,EAAEC,OAAS,GAC/F,OAAOL,OAAOrB,MAAO2B,SAAkCC,aAAaN,WAAmBC,QAAQM,SAASF,MAAMG,eAChH,CAEO,SAASC,kDAAkDV,OAAqCW,SACrG,GAAIJ,aAAaI,QAAQC,QAAS,OAAO,EACzC,MAAMA,OAAEA,QAAWD,QACnB,OAAsB,IAAlBC,OAAOf,QAEJG,OAAOrB,MAAO2B,SACfC,aAAaD,MAAMO,kBAChBD,OAAOE,KAAMC,MAAsCA,KAAKV,OAASC,MAAMO,iBAElF,CAEO,SAASG,mBAAmBtC,UACjC,MAAMuC,UAAgCC,oBAAoBxC,SAASyB,IAAKd,GAAyBA,EAAEgB,OACnG,OAAOY,UAAY,SAASA,gCAA6B,CAC3D,CAGO,SAASE,yCAAyCzC,SAAyC0C,WAChG,OAAO1C,SAASC,MAAOE,UACjBwC,yBAAyBxC,OAAO4B,gBAC7BW,UAAUN,KAAMQ,UAA8CA,SAASjB,OAASxB,OAAO4B,eAElG,CAEO,SAASc,uCAAuC7C,SAA0C0C,WAC/F,OAAO1C,SAASC,MAAOE,QACduC,UAAUN,KAAMQ,UAA4CA,SAASjB,OAASxB,OAAO2C,aAEhG,CAEO,SAASC,wBAAwBC,SACtC,OAAOA,QAAQ/C,MAAOgD,UAChBC,iCAAiCD,SAC9BE,gBAAgBF,OAAOG,KAElC,CAEO,SAASC,iBAAiBL,SAC/B,OAAOA,QAAQ/C,MAAM,EAAGmD,WAA4CD,gBAAgBC,KACtF,CAEO,SAASD,gBAAgBC,KAE9B,MADc,yDACDhC,KAAKgC,IACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemasValidator.js","sources":["../../../src/Space/Validators/SchemasValidator.ts"],"sourcesContent":["import type { TAbstractResourceConfig } from '@Anarchy/Engine/Abstract';\nimport type { TActorConfig } from '@Anarchy/Engine/Actor';\nimport type { TAnyAudioConfig, TAudioResourceConfig } from '@Anarchy/Engine/Audio';\nimport type { TAnyCameraConfig } from '@Anarchy/Engine/Camera';\nimport type { TControlsConfig } from '@Anarchy/Engine/Controls';\nimport type { TAnyIntersectionsWatcherConfig } from '@Anarchy/Engine/Intersections';\nimport { isIntersectionsCameraWatcherConfig } from '@Anarchy/Engine/Intersections';\nimport type { TActive, TWithName, TWithNameOptional, TWithTags } from '@Anarchy/Engine/Mixins';\nimport type { TModel3dConfig, TModel3dResourceConfig } from '@Anarchy/Engine/Models3d';\nimport type { TPhysicsBodyConfig, TPhysicsConfig } from '@Anarchy/Engine/Physics';\nimport type { TSceneConfig } from '@Anarchy/Engine/Scene/Models';\nimport { SpaceSchemaVersion } from '@Anarchy/Engine/Space/Constants';\nimport type { TSpaceConfig, TSpaceConfigEntities, TSpaceConfigResources } from '@Anarchy/Engine/Space/Models';\nimport TSpaceConfigSchema from '@Anarchy/Engine/Space/Schemas/TSpaceConfig.json';\nimport {\n validate,\n validateActorNamesForEveryEntity,\n validateAllActorsHasModel3d,\n validateAllActorsWithPhysicsHasRelatedPhysicsBody,\n validateAllAudioEntityHasValidResource,\n validateAllModel3dEntityHasValidResource,\n validateCameraNames,\n validateFileUrls,\n validateModel3dFileUrls,\n validateNames,\n validateNoSameName,\n validateTags,\n validateTagsForEveryEntity\n} from '@Anarchy/Engine/Space/Utils';\nimport { isDefined } from '@Anarchy/Shared/Utils';\nimport type { Schema } from '@cfworker/json-schema';\nimport { Validator } from '@cfworker/json-schema';\nimport { isArray } from 'lodash-es';\n\ntype TSchemaValidationResult = Readonly<{ isValid: boolean; errors: ReadonlyArray<any> | null | undefined }>;\n\nexport function validSpaceConfig(config: TSpaceConfig): TSchemaValidationResult {\n const jsonResult = validateJsonSchema(config);\n const dataResult = validateData(config);\n const jsonErrors: ReadonlyArray<any> = jsonResult.errors ?? [];\n const dataErrors: ReadonlyArray<any> = dataResult.errors ?? [];\n\n return { isValid: jsonResult.isValid && dataResult.isValid, errors: [...jsonErrors, ...dataErrors] };\n}\n\nfunction validateJsonSchema(config: TSpaceConfig): TSchemaValidationResult {\n const validator = new Validator(TSpaceConfigSchema as Schema, '7');\n const { valid, errors } = validator.validate(config);\n return { isValid: valid, errors };\n}\n\nfunction validateData({ name, version, scenes, resources, entities, canvasSelector, tags }: TSpaceConfig): TSchemaValidationResult {\n const { models3d: models3dResources, audio: audioResources, envMaps, textures } = resources;\n const { actors, audio, cameras, spatialGrids, controls, intersections, lights, materials, models3d: models3dEntities, physics, fogs, texts } = entities;\n\n const basicErrors: ReadonlyArray<string> = validateConfigBasics(name, version, scenes, canvasSelector, tags);\n const activeErrors: ReadonlyArray<string> = validateActiveEntities({ cameras, scenes, controls });\n const relationsErrors: ReadonlyArray<string> = validateRelations(controls, cameras, actors, models3dEntities, models3dResources, audioResources, audio, intersections, physics);\n const namesErrors: ReadonlyArray<string> = validateEntityNames({\n scenes,\n spatialGrids,\n actors,\n cameras,\n intersections,\n lights,\n fogs,\n texts,\n controls,\n models3dResources,\n materials,\n envMaps,\n textures\n });\n const tagsErrors: ReadonlyArray<string> = validateEntityTags({\n scenes,\n spatialGrids,\n actors,\n cameras,\n intersections,\n lights,\n fogs,\n texts,\n controls,\n models3dResources,\n materials,\n envMaps,\n textures\n });\n const duplicationErrors: ReadonlyArray<string> = validateNamesDuplication(entities, resources);\n const urlsErrors: ReadonlyArray<string> = validateUrls({ models3dResources }, { envMaps, textures });\n\n const errors: ReadonlyArray<string> = [...basicErrors, ...activeErrors, ...relationsErrors, ...namesErrors, ...tagsErrors, ...duplicationErrors, ...urlsErrors];\n\n return { isValid: errors.length === 0, errors };\n}\n\nfunction validateConfigBasics(name: string, version: SpaceSchemaVersion, scenes: ReadonlyArray<TSceneConfig>, canvasSelector: string, tags?: ReadonlyArray<string>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n if (version !== SpaceSchemaVersion.V1) errors = [...errors, `Unsupported schema's version(${version}). Supported version is: ${SpaceSchemaVersion.V2}`];\n if (scenes.length === 0) errors = [...errors, 'No scenes are defined'];\n if (!/^[a-zA-Z0-9\\s.#\\-_>[\\]='\"*^$~|(),:]+$/.test(canvasSelector)) errors = [...errors, 'Canvas selector must be defined and contain only allowed characters (a normal css selector)'];\n if (!validateTags(tags)) errors = [...errors, 'Space config tags must contain only letters, numbers and underscores'];\n if (!validate(name)) errors = [...errors, 'Space config name must be defined and contain only letters, numbers and underscores'];\n\n return errors;\n}\n\nfunction validateActiveEntities(entities: Record<string, ReadonlyArray<TActive>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(entities).forEach((list): void => {\n const [, key] = Object.entries(list)[0];\n const [, value] = Object.entries(list)[1];\n\n if ((value as ReadonlyArray<TActive>).filter((v: TActive): boolean => v.isActive).length > 1) errors = [...errors, `Must be only one active entity of \"${key}\", but multiple are active`];\n });\n\n return errors;\n}\n\nfunction validateRelations(\n controls: ReadonlyArray<TControlsConfig>,\n cameras: ReadonlyArray<TAnyCameraConfig>,\n actors: ReadonlyArray<TActorConfig>,\n models3dEntities: ReadonlyArray<TModel3dConfig>,\n models3dResources: ReadonlyArray<TModel3dResourceConfig>,\n audioResources: ReadonlyArray<TAudioResourceConfig>,\n audio: ReadonlyArray<TAnyAudioConfig>,\n intersections: ReadonlyArray<TAnyIntersectionsWatcherConfig>,\n physics: TPhysicsConfig\n): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n if (controls.length > 0 && cameras.length === 0) errors = [...errors, 'Controls cannot be defined without at least one camera, but there are no cameras'];\n if (!controls.every((control: TControlsConfig): boolean => cameras.some((camera: TAnyCameraConfig): boolean => camera.name === control.cameraName)))\n errors = [...errors, 'Not every control has a camera'];\n if (!validateAllActorsHasModel3d(actors, models3dEntities)) errors = [...errors, 'Not every actor has a defined model3dSource (check actors model3dSource against models3d entities)'];\n if (!validateAllActorsWithPhysicsHasRelatedPhysicsBody(actors, physics)) errors = [...errors, 'Not every actor has a defined model3dSource (check actors model3dSource against models3d entities)'];\n if (!validateAllModel3dEntityHasValidResource(models3dEntities, models3dResources)) errors = [...errors, 'Not every model3d entity has a valid resource (must be a primitive or an url)'];\n if (!validateAllAudioEntityHasValidResource(audio, audioResources)) errors = [...errors, 'Not every audio entity has a valid resource (must be a primitive or an url)'];\n if (!validateCameraNames(intersections.filter(isIntersectionsCameraWatcherConfig))) errors = [...errors, 'Not every intersection camera name is valid'];\n if (!validateActorNamesForEveryEntity(intersections)) errors = [...errors, 'Not every intersection actor name is valid'];\n\n return errors;\n}\n\nfunction validateEntityNames(entities: Record<string, ReadonlyArray<TWithNameOptional | TWithName>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(entities).forEach((list): void => {\n const [, key] = Object.entries(list)[0];\n const [, value] = Object.entries(list)[1];\n\n const isValid: boolean = validateNames(value as ReadonlyArray<TWithNameOptional | TWithName>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") names must be defined and contain only letters, numbers and underscores`];\n });\n\n return errors;\n}\n\nfunction validateEntityTags(entities: Record<string, ReadonlyArray<TWithTags>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(entities).forEach((list): void => {\n const [, key] = Object.entries(list)[0];\n const [, value] = Object.entries(list)[1];\n\n const isValid: boolean = validateTagsForEveryEntity(value as ReadonlyArray<Record<string, TWithTags>>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") tags must contain only letters, numbers and underscores`];\n });\n\n return errors;\n}\n\nfunction validateNamesDuplication(entities: TSpaceConfigEntities, resources: TSpaceConfigResources): ReadonlyArray<string> {\n const bodies: ReadonlyArray<TPhysicsBodyConfig> = entities.physics?.bodies ?? [];\n\n return [\n //\"physics\" is not an array, but we could check the bodies\n ...Object.values(entities).filter(isArray).map(validateNoSameName),\n validateNoSameName(bodies),\n ...Object.values(resources).map(validateNoSameName)\n ].filter(isDefined);\n}\n\nfunction validateUrls(models3dResources: Record<string, ReadonlyArray<TModel3dResourceConfig>>, withFileUrls: Record<string, ReadonlyArray<TAbstractResourceConfig>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(models3dResources).forEach((configs): void => {\n const [, key] = Object.entries(configs)[0];\n const [, value] = Object.entries(configs)[1];\n const isValid: boolean = validateModel3dFileUrls(value as ReadonlyArray<TModel3dResourceConfig>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") URLs must contain only letters, numbers and underscores`];\n });\n\n Object.entries(withFileUrls).forEach((configs): void => {\n const [, key] = Object.entries(configs)[0];\n const [, value] = Object.entries(configs)[1];\n const isValid: boolean = validateFileUrls(value as ReadonlyArray<TAbstractResourceConfig>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") URLs must contain only letters, numbers and underscores`];\n });\n\n return errors;\n}\n"],"names":["validSpaceConfig","config","jsonResult","validator","Validator","TSpaceConfigSchema","valid","errors","validate","isValid","validateJsonSchema","dataResult","name","version","scenes","resources","entities","canvasSelector","tags","models3d","models3dResources","audio","audioResources","envMaps","textures","actors","cameras","spatialGrids","controls","intersections","lights","materials","models3dEntities","physics","fogs","texts","basicErrors","SpaceSchemaVersion","V1","V2","length","test","validateTags","validateConfigBasics","activeErrors","Object","entries","forEach","list","key","value","filter","v","isActive","validateActiveEntities","relationsErrors","every","control","some","camera","cameraName","validateAllActorsHasModel3d","validateAllActorsWithPhysicsHasRelatedPhysicsBody","validateAllModel3dEntityHasValidResource","validateAllAudioEntityHasValidResource","validateCameraNames","isIntersectionsCameraWatcherConfig","validateActorNamesForEveryEntity","validateRelations","namesErrors","validateNames","validateEntityNames","tagsErrors","validateTagsForEveryEntity","validateEntityTags","duplicationErrors","bodies","values","isArray","map","validateNoSameName","isDefined","validateNamesDuplication","urlsErrors","withFileUrls","configs","validateModel3dFileUrls","validateFileUrls","validateUrls","validateData"],"mappings":"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"}
1
+ {"version":3,"file":"SchemasValidator.js","sources":["../../../src/Space/Validators/SchemasValidator.ts"],"sourcesContent":["import type { Schema } from '@cfworker/json-schema';\nimport { Validator } from '@cfworker/json-schema';\nimport type { TAbstractResourceConfig } from '@hellpig/anarchy-engine/Abstract';\nimport type { TActorConfig } from '@hellpig/anarchy-engine/Actor';\nimport type { TAnyAudioConfig, TAudioResourceConfig } from '@hellpig/anarchy-engine/Audio';\nimport type { TAnyCameraConfig } from '@hellpig/anarchy-engine/Camera';\nimport type { TControlsConfig } from '@hellpig/anarchy-engine/Controls';\nimport type { TAnyIntersectionsWatcherConfig } from '@hellpig/anarchy-engine/Intersections';\nimport { isIntersectionsCameraWatcherConfig } from '@hellpig/anarchy-engine/Intersections';\nimport type { TActive, TWithName, TWithNameOptional, TWithTags } from '@hellpig/anarchy-engine/Mixins';\nimport type { TModel3dConfig, TModel3dResourceConfig } from '@hellpig/anarchy-engine/Models3d';\nimport type { TPhysicsBodyConfig, TPhysicsConfig } from '@hellpig/anarchy-engine/Physics';\nimport type { TSceneConfig } from '@hellpig/anarchy-engine/Scene/Models';\nimport { SpaceSchemaVersion } from '@hellpig/anarchy-engine/Space/Constants';\nimport type { TSpaceConfig, TSpaceConfigEntities, TSpaceConfigResources } from '@hellpig/anarchy-engine/Space/Models';\nimport TSpaceConfigSchema from '@hellpig/anarchy-engine/Space/Schemas/TSpaceConfig.json';\nimport {\n validate,\n validateActorNamesForEveryEntity,\n validateAllActorsHasModel3d,\n validateAllActorsWithPhysicsHasRelatedPhysicsBody,\n validateAllAudioEntityHasValidResource,\n validateAllModel3dEntityHasValidResource,\n validateCameraNames,\n validateFileUrls,\n validateModel3dFileUrls,\n validateNames,\n validateNoSameName,\n validateTags,\n validateTagsForEveryEntity\n} from '@hellpig/anarchy-engine/Space/Utils';\nimport { isDefined } from '@hellpig/anarchy-shared/Utils';\nimport { isArray } from 'lodash-es';\n\ntype TSchemaValidationResult = Readonly<{ isValid: boolean; errors: ReadonlyArray<any> | null | undefined }>;\n\nexport function validSpaceConfig(config: TSpaceConfig): TSchemaValidationResult {\n const jsonResult = validateJsonSchema(config);\n const dataResult = validateData(config);\n const jsonErrors: ReadonlyArray<any> = jsonResult.errors ?? [];\n const dataErrors: ReadonlyArray<any> = dataResult.errors ?? [];\n\n return { isValid: jsonResult.isValid && dataResult.isValid, errors: [...jsonErrors, ...dataErrors] };\n}\n\nfunction validateJsonSchema(config: TSpaceConfig): TSchemaValidationResult {\n const validator = new Validator(TSpaceConfigSchema as Schema, '7');\n const { valid, errors } = validator.validate(config);\n return { isValid: valid, errors };\n}\n\nfunction validateData({ name, version, scenes, resources, entities, canvasSelector, tags }: TSpaceConfig): TSchemaValidationResult {\n const { models3d: models3dResources, audio: audioResources, envMaps, textures } = resources;\n const { actors, audio, cameras, spatialGrids, controls, intersections, lights, materials, models3d: models3dEntities, physics, fogs, texts } = entities;\n\n const basicErrors: ReadonlyArray<string> = validateConfigBasics(name, version, scenes, canvasSelector, tags);\n const activeErrors: ReadonlyArray<string> = validateActiveEntities({ cameras, scenes, controls });\n const relationsErrors: ReadonlyArray<string> = validateRelations(controls, cameras, actors, models3dEntities, models3dResources, audioResources, audio, intersections, physics);\n const namesErrors: ReadonlyArray<string> = validateEntityNames({\n scenes,\n spatialGrids,\n actors,\n cameras,\n intersections,\n lights,\n fogs,\n texts,\n controls,\n models3dResources,\n materials,\n envMaps,\n textures\n });\n const tagsErrors: ReadonlyArray<string> = validateEntityTags({\n scenes,\n spatialGrids,\n actors,\n cameras,\n intersections,\n lights,\n fogs,\n texts,\n controls,\n models3dResources,\n materials,\n envMaps,\n textures\n });\n const duplicationErrors: ReadonlyArray<string> = validateNamesDuplication(entities, resources);\n const urlsErrors: ReadonlyArray<string> = validateUrls({ models3dResources }, { envMaps, textures });\n\n const errors: ReadonlyArray<string> = [...basicErrors, ...activeErrors, ...relationsErrors, ...namesErrors, ...tagsErrors, ...duplicationErrors, ...urlsErrors];\n\n return { isValid: errors.length === 0, errors };\n}\n\nfunction validateConfigBasics(name: string, version: SpaceSchemaVersion, scenes: ReadonlyArray<TSceneConfig>, canvasSelector: string, tags?: ReadonlyArray<string>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n if (version !== SpaceSchemaVersion.V1) errors = [...errors, `Unsupported schema's version(${version}). Supported version is: ${SpaceSchemaVersion.V2}`];\n if (scenes.length === 0) errors = [...errors, 'No scenes are defined'];\n if (!/^[a-zA-Z0-9\\s.#\\-_>[\\]='\"*^$~|(),:]+$/.test(canvasSelector)) errors = [...errors, 'Canvas selector must be defined and contain only allowed characters (a normal css selector)'];\n if (!validateTags(tags)) errors = [...errors, 'Space config tags must contain only letters, numbers and underscores'];\n if (!validate(name)) errors = [...errors, 'Space config name must be defined and contain only letters, numbers and underscores'];\n\n return errors;\n}\n\nfunction validateActiveEntities(entities: Record<string, ReadonlyArray<TActive>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(entities).forEach((list): void => {\n const [, key] = Object.entries(list)[0];\n const [, value] = Object.entries(list)[1];\n\n if ((value as ReadonlyArray<TActive>).filter((v: TActive): boolean => v.isActive).length > 1) errors = [...errors, `Must be only one active entity of \"${key}\", but multiple are active`];\n });\n\n return errors;\n}\n\nfunction validateRelations(\n controls: ReadonlyArray<TControlsConfig>,\n cameras: ReadonlyArray<TAnyCameraConfig>,\n actors: ReadonlyArray<TActorConfig>,\n models3dEntities: ReadonlyArray<TModel3dConfig>,\n models3dResources: ReadonlyArray<TModel3dResourceConfig>,\n audioResources: ReadonlyArray<TAudioResourceConfig>,\n audio: ReadonlyArray<TAnyAudioConfig>,\n intersections: ReadonlyArray<TAnyIntersectionsWatcherConfig>,\n physics: TPhysicsConfig\n): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n if (controls.length > 0 && cameras.length === 0) errors = [...errors, 'Controls cannot be defined without at least one camera, but there are no cameras'];\n if (!controls.every((control: TControlsConfig): boolean => cameras.some((camera: TAnyCameraConfig): boolean => camera.name === control.cameraName)))\n errors = [...errors, 'Not every control has a camera'];\n if (!validateAllActorsHasModel3d(actors, models3dEntities)) errors = [...errors, 'Not every actor has a defined model3dSource (check actors model3dSource against models3d entities)'];\n if (!validateAllActorsWithPhysicsHasRelatedPhysicsBody(actors, physics)) errors = [...errors, 'Not every actor has a defined model3dSource (check actors model3dSource against models3d entities)'];\n if (!validateAllModel3dEntityHasValidResource(models3dEntities, models3dResources)) errors = [...errors, 'Not every model3d entity has a valid resource (must be a primitive or an url)'];\n if (!validateAllAudioEntityHasValidResource(audio, audioResources)) errors = [...errors, 'Not every audio entity has a valid resource (must be a primitive or an url)'];\n if (!validateCameraNames(intersections.filter(isIntersectionsCameraWatcherConfig))) errors = [...errors, 'Not every intersection camera name is valid'];\n if (!validateActorNamesForEveryEntity(intersections)) errors = [...errors, 'Not every intersection actor name is valid'];\n\n return errors;\n}\n\nfunction validateEntityNames(entities: Record<string, ReadonlyArray<TWithNameOptional | TWithName>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(entities).forEach((list): void => {\n const [, key] = Object.entries(list)[0];\n const [, value] = Object.entries(list)[1];\n\n const isValid: boolean = validateNames(value as ReadonlyArray<TWithNameOptional | TWithName>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") names must be defined and contain only letters, numbers and underscores`];\n });\n\n return errors;\n}\n\nfunction validateEntityTags(entities: Record<string, ReadonlyArray<TWithTags>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(entities).forEach((list): void => {\n const [, key] = Object.entries(list)[0];\n const [, value] = Object.entries(list)[1];\n\n const isValid: boolean = validateTagsForEveryEntity(value as ReadonlyArray<Record<string, TWithTags>>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") tags must contain only letters, numbers and underscores`];\n });\n\n return errors;\n}\n\nfunction validateNamesDuplication(entities: TSpaceConfigEntities, resources: TSpaceConfigResources): ReadonlyArray<string> {\n const bodies: ReadonlyArray<TPhysicsBodyConfig> = entities.physics?.bodies ?? [];\n\n return [\n //\"physics\" is not an array, but we could check the bodies\n ...Object.values(entities).filter(isArray).map(validateNoSameName),\n validateNoSameName(bodies),\n ...Object.values(resources).map(validateNoSameName)\n ].filter(isDefined);\n}\n\nfunction validateUrls(models3dResources: Record<string, ReadonlyArray<TModel3dResourceConfig>>, withFileUrls: Record<string, ReadonlyArray<TAbstractResourceConfig>>): ReadonlyArray<string> {\n let errors: ReadonlyArray<string> = [];\n\n Object.entries(models3dResources).forEach((configs): void => {\n const [, key] = Object.entries(configs)[0];\n const [, value] = Object.entries(configs)[1];\n const isValid: boolean = validateModel3dFileUrls(value as ReadonlyArray<TModel3dResourceConfig>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") URLs must contain only letters, numbers and underscores`];\n });\n\n Object.entries(withFileUrls).forEach((configs): void => {\n const [, key] = Object.entries(configs)[0];\n const [, value] = Object.entries(configs)[1];\n const isValid: boolean = validateFileUrls(value as ReadonlyArray<TAbstractResourceConfig>);\n if (!isValid) errors = [...errors, `Entity (\"${key}\") URLs must contain only letters, numbers and underscores`];\n });\n\n return errors;\n}\n"],"names":["validSpaceConfig","config","jsonResult","validator","Validator","TSpaceConfigSchema","valid","errors","validate","isValid","validateJsonSchema","dataResult","name","version","scenes","resources","entities","canvasSelector","tags","models3d","models3dResources","audio","audioResources","envMaps","textures","actors","cameras","spatialGrids","controls","intersections","lights","materials","models3dEntities","physics","fogs","texts","basicErrors","SpaceSchemaVersion","V1","V2","length","test","validateTags","validateConfigBasics","activeErrors","Object","entries","forEach","list","key","value","filter","v","isActive","validateActiveEntities","relationsErrors","every","control","some","camera","cameraName","validateAllActorsHasModel3d","validateAllActorsWithPhysicsHasRelatedPhysicsBody","validateAllModel3dEntityHasValidResource","validateAllAudioEntityHasValidResource","validateCameraNames","isIntersectionsCameraWatcherConfig","validateActorNamesForEveryEntity","validateRelations","namesErrors","validateNames","validateEntityNames","tagsErrors","validateTagsForEveryEntity","validateEntityTags","duplicationErrors","bodies","values","isArray","map","validateNoSameName","isDefined","validateNamesDuplication","urlsErrors","withFileUrls","configs","validateModel3dFileUrls","validateFileUrls","validateUrls","validateData"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValidateConfig.js","sources":["../../../src/Space/Validators/ValidateConfig.ts"],"sourcesContent":["import type { TSpaceConfig } from '@Anarchy/Engine/Space/Models';\nimport { validSpaceConfig } from '@Anarchy/Engine/Space/Validators/SchemasValidator';\n\nexport function validateConfig(config: TSpaceConfig): void | never {\n const { isValid, errors } = validSpaceConfig(config);\n if (!isValid) {\n // TODO LOGGER: should be forwarded to the errors hub (which is not implemented yet)\n console.error(errors);\n throw new Error('Failed to launch a space: invalid data format');\n }\n}\n"],"names":["validateConfig","config","isValid","errors","validSpaceConfig","console","error","Error"],"mappings":"oDAGO,SAASA,eAAeC,QAC7B,MAAMC,QAAEA,QAAAC,OAASA,QAAWC,iBAAiBH,QAC7C,IAAKC,QAGH,MADAG,QAAQC,MAAMH,QACR,IAAII,MAAM,gDAEpB"}
1
+ {"version":3,"file":"ValidateConfig.js","sources":["../../../src/Space/Validators/ValidateConfig.ts"],"sourcesContent":["import type { TSpaceConfig } from '@hellpig/anarchy-engine/Space/Models';\nimport { validSpaceConfig } from '@hellpig/anarchy-engine/Space/Validators/SchemasValidator';\n\nexport function validateConfig(config: TSpaceConfig): void | never {\n const { isValid, errors } = validSpaceConfig(config);\n if (!isValid) {\n // TODO LOGGER: should be forwarded to the errors hub (which is not implemented yet)\n console.error(errors);\n throw new Error('Failed to launch a space: invalid data format');\n }\n}\n"],"names":["validateConfig","config","isValid","errors","validSpaceConfig","console","error","Error"],"mappings":"oDAGO,SAASA,eAAeC,QAC7B,MAAMC,QAAEA,QAAAC,OAASA,QAAWC,iBAAiBH,QAC7C,IAAKC,QAGH,MADAG,QAAQC,MAAMH,QACR,IAAII,MAAM,gDAEpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValidateSpace.js","sources":["../../../src/Space/Validators/ValidateSpace.ts"],"sourcesContent":["import type { TSpace, TSpaceRegistry } from '@Anarchy/Engine/Space/Models';\nimport { isNotDefined } from '@Anarchy/Shared/Utils';\n\nexport function validateSpacesDoNotUseSameCanvas(registry: TSpaceRegistry, space: TSpace): boolean {\n const duplicates: TSpace | undefined = registry.find((s: TSpace): boolean => Object.is(s.getCanvasElement(), space.getCanvasElement()));\n return isNotDefined(duplicates);\n}\n"],"names":["validateSpacesDoNotUseSameCanvas","registry","space","duplicates","find","s","Object","is","getCanvasElement","isNotDefined"],"mappings":"gFAGO,SAASA,iCAAiCC,SAA0BC,OACzE,MAAMC,WAAiCF,SAASG,KAAMC,GAAuBC,OAAOC,GAAGF,EAAEG,mBAAoBN,MAAMM,qBACnH,OAAOC,aAAaN,WACtB"}
1
+ {"version":3,"file":"ValidateSpace.js","sources":["../../../src/Space/Validators/ValidateSpace.ts"],"sourcesContent":["import type { TSpace, TSpaceRegistry } from '@hellpig/anarchy-engine/Space/Models';\nimport { isNotDefined } from '@hellpig/anarchy-shared/Utils';\n\nexport function validateSpacesDoNotUseSameCanvas(registry: TSpaceRegistry, space: TSpace): boolean {\n const duplicates: TSpace | undefined = registry.find((s: TSpace): boolean => Object.is(s.getCanvasElement(), space.getCanvasElement()));\n return isNotDefined(duplicates);\n}\n"],"names":["validateSpacesDoNotUseSameCanvas","registry","space","duplicates","find","s","Object","is","getCanvasElement","isNotDefined"],"mappings":"gFAGO,SAASA,iCAAiCC,SAA0BC,OACzE,MAAMC,WAAiCF,SAASG,KAAMC,GAAuBC,OAAOC,GAAGF,EAAEG,mBAAoBN,MAAMM,qBACnH,OAAOC,aAAaN,WACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigToParams.js","sources":["../../../src/Spatial/Adapters/ConfigToParams.ts"],"sourcesContent":["import type { TSpatialGridConfig, TSpatialGridParams } from '@Anarchy/Engine/Spatial/Models';\n\nexport function spatialConfigToParams(config: TSpatialGridConfig): TSpatialGridParams {\n return {\n ...config\n };\n}\n"],"names":["spatialConfigToParams","config"],"mappings":"AAEO,SAASA,sBAAsBC,QACpC,MAAO,IACFA,OAEP"}
1
+ {"version":3,"file":"ConfigToParams.js","sources":["../../../src/Spatial/Adapters/ConfigToParams.ts"],"sourcesContent":["import type { TSpatialGridConfig, TSpatialGridParams } from '@hellpig/anarchy-engine/Spatial/Models';\n\nexport function spatialConfigToParams(config: TSpatialGridConfig): TSpatialGridParams {\n return {\n ...config\n };\n}\n"],"names":["spatialConfigToParams","config"],"mappings":"AAEO,SAASA,sBAAsBC,QACpC,MAAO,IACFA,OAEP"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigToParamsSpatialData.js","sources":["../../../src/Spatial/Adapters/ConfigToParamsSpatialData.ts"],"sourcesContent":["import type { TSpatialConfigToParamsSpatialDataDependencies, TSpatialDataConfig, TSpatialDataParams } from '@Anarchy/Engine/Spatial/Models';\n\nexport function spatialDataConfigToParams(config: TSpatialDataConfig, { spatialGridRegistry }: TSpatialConfigToParamsSpatialDataDependencies): TSpatialDataParams {\n return {\n ...config,\n grid: config.grid ? spatialGridRegistry.getByName(config.grid) : undefined\n };\n}\n"],"names":["spatialDataConfigToParams","config","spatialGridRegistry","grid","getByName"],"mappings":"AAEO,SAASA,0BAA0BC,QAA4BC,oBAAEA,sBACtE,MAAO,IACFD,OACHE,KAAMF,OAAOE,KAAOD,oBAAoBE,UAAUH,OAAOE,WAAQ,EAErE"}
1
+ {"version":3,"file":"ConfigToParamsSpatialData.js","sources":["../../../src/Spatial/Adapters/ConfigToParamsSpatialData.ts"],"sourcesContent":["import type { TSpatialConfigToParamsSpatialDataDependencies, TSpatialDataConfig, TSpatialDataParams } from '@hellpig/anarchy-engine/Spatial/Models';\n\nexport function spatialDataConfigToParams(config: TSpatialDataConfig, { spatialGridRegistry }: TSpatialConfigToParamsSpatialDataDependencies): TSpatialDataParams {\n return {\n ...config,\n grid: config.grid ? spatialGridRegistry.getByName(config.grid) : undefined\n };\n}\n"],"names":["spatialDataConfigToParams","config","spatialGridRegistry","grid","getByName"],"mappings":"AAEO,SAASA,0BAA0BC,QAA4BC,oBAAEA,sBACtE,MAAO,IACFD,OACHE,KAAMF,OAAOE,KAAOD,oBAAoBE,UAAUH,OAAOE,WAAQ,EAErE"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityToConfig.js","sources":["../../../src/Spatial/Adapters/EntityToConfig.ts"],"sourcesContent":["import type { TActor } from '@Anarchy/Engine/Actor';\nimport { extractSerializableRegistrableFields } from '@Anarchy/Engine/Mixins';\nimport type { TSpatialCellId, TSpatialCellSerializedData, TSpatialCellWrapper, TSpatialGridConfig, TSpatialGridWrapper } from '@Anarchy/Engine/Spatial/Models';\nimport { filterOutEmptyFields } from '@Anarchy/Shared/Utils';\n\nexport function spatialGridEntityToConfig(entity: TSpatialGridWrapper): TSpatialGridConfig {\n return filterOutEmptyFields({\n ...entity.getParams(),\n ...extractSerializableRegistrableFields(entity)\n });\n}\n\nexport function entityToConfigSpatialCell(entity: TSpatialCellWrapper): TSpatialCellSerializedData {\n const { minX, minY, maxX, maxY } = entity;\n const objects: ReadonlyArray<string> = entity.getObjects().map((v: TActor): string => v.id);\n const id: TSpatialCellId = entity.id as TSpatialCellId;\n return filterOutEmptyFields({ id, minX, minY, maxX, maxY, objects, version: entity.getVersion() });\n}\n"],"names":["spatialGridEntityToConfig","entity","filterOutEmptyFields","getParams","extractSerializableRegistrableFields","entityToConfigSpatialCell","minX","minY","maxX","maxY","objects","getObjects","map","v","id","version","getVersion"],"mappings":"yMAKO,SAASA,0BAA0BC,QACxC,OAAOC,qBAAqB,IACvBD,OAAOE,eACPC,qCAAqCH,SAE5C,CAEO,SAASI,0BAA0BJ,QACxC,MAAMK,KAAEA,KAAAC,KAAMA,KAAAC,KAAMA,KAAAC,KAAMA,MAASR,OAC7BS,QAAiCT,OAAOU,aAAaC,IAAKC,GAAsBA,EAAEC,IAExF,OAAOZ,qBAAqB,CAAEY,GADHb,OAAOa,GACAR,UAAMC,UAAMC,UAAMC,UAAMC,gBAASK,QAASd,OAAOe,cACrF"}
1
+ {"version":3,"file":"EntityToConfig.js","sources":["../../../src/Spatial/Adapters/EntityToConfig.ts"],"sourcesContent":["import type { TActor } from '@hellpig/anarchy-engine/Actor';\nimport { extractSerializableRegistrableFields } from '@hellpig/anarchy-engine/Mixins';\nimport type { TSpatialCellId, TSpatialCellSerializedData, TSpatialCellWrapper, TSpatialGridConfig, TSpatialGridWrapper } from '@hellpig/anarchy-engine/Spatial/Models';\nimport { filterOutEmptyFields } from '@hellpig/anarchy-shared/Utils';\n\nexport function spatialGridEntityToConfig(entity: TSpatialGridWrapper): TSpatialGridConfig {\n return filterOutEmptyFields({\n ...entity.getParams(),\n ...extractSerializableRegistrableFields(entity)\n });\n}\n\nexport function entityToConfigSpatialCell(entity: TSpatialCellWrapper): TSpatialCellSerializedData {\n const { minX, minY, maxX, maxY } = entity;\n const objects: ReadonlyArray<string> = entity.getObjects().map((v: TActor): string => v.id);\n const id: TSpatialCellId = entity.id as TSpatialCellId;\n return filterOutEmptyFields({ id, minX, minY, maxX, maxY, objects, version: entity.getVersion() });\n}\n"],"names":["spatialGridEntityToConfig","entity","filterOutEmptyFields","getParams","extractSerializableRegistrableFields","entityToConfigSpatialCell","minX","minY","maxX","maxY","objects","getObjects","map","v","id","version","getVersion"],"mappings":"yMAKO,SAASA,0BAA0BC,QACxC,OAAOC,qBAAqB,IACvBD,OAAOE,eACPC,qCAAqCH,SAE5C,CAEO,SAASI,0BAA0BJ,QACxC,MAAMK,KAAEA,KAAAC,KAAMA,KAAAC,KAAMA,KAAAC,KAAMA,MAASR,OAC7BS,QAAiCT,OAAOU,aAAaC,IAAKC,GAAsBA,EAAEC,IAExF,OAAOZ,qBAAqB,CAAEY,GADHb,OAAOa,GACAR,UAAMC,UAAMC,UAAMC,UAAMC,gBAASK,QAASd,OAAOe,cACrF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SpatialGridFactory.js","sources":["../../../src/Spatial/Factories/SpatialGridFactory.ts"],"sourcesContent":["import type { TReactiveFactory } from '@Anarchy/Engine/Abstract';\nimport { FactoryType, ReactiveFactory } from '@Anarchy/Engine/Abstract';\nimport { spatialConfigToParams as configToParams } from '@Anarchy/Engine/Spatial/Adapters';\nimport type { TSpatialGridFactory, TSpatialGridParams, TSpatialGridWrapper } from '@Anarchy/Engine/Spatial/Models';\nimport { SpatialGridWrapper } from '@Anarchy/Engine/Spatial/Wrappers';\n\nexport function SpatialGridFactory(): TSpatialGridFactory {\n const factory: TReactiveFactory<TSpatialGridWrapper, TSpatialGridParams> = ReactiveFactory(FactoryType.SpatialGrid, SpatialGridWrapper);\n\n // eslint-disable-next-line functional/immutable-data\n return Object.assign(factory, { configToParams });\n}\n"],"names":["SpatialGridFactory","factory","ReactiveFactory","FactoryType","SpatialGrid","SpatialGridWrapper","Object","assign","configToParams"],"mappings":"6QAMO,SAASA,qBACd,MAAMC,QAAqEC,gBAAgBC,YAAYC,YAAaC,oBAGpH,OAAOC,OAAOC,OAAON,QAAS,CAAAO,eAAEA,uBAClC"}
1
+ {"version":3,"file":"SpatialGridFactory.js","sources":["../../../src/Spatial/Factories/SpatialGridFactory.ts"],"sourcesContent":["import type { TReactiveFactory } from '@hellpig/anarchy-engine/Abstract';\nimport { FactoryType, ReactiveFactory } from '@hellpig/anarchy-engine/Abstract';\nimport { spatialConfigToParams as configToParams } from '@hellpig/anarchy-engine/Spatial/Adapters';\nimport type { TSpatialGridFactory, TSpatialGridParams, TSpatialGridWrapper } from '@hellpig/anarchy-engine/Spatial/Models';\nimport { SpatialGridWrapper } from '@hellpig/anarchy-engine/Spatial/Wrappers';\n\nexport function SpatialGridFactory(): TSpatialGridFactory {\n const factory: TReactiveFactory<TSpatialGridWrapper, TSpatialGridParams> = ReactiveFactory(FactoryType.SpatialGrid, SpatialGridWrapper);\n\n // eslint-disable-next-line functional/immutable-data\n return Object.assign(factory, { configToParams });\n}\n"],"names":["SpatialGridFactory","factory","ReactiveFactory","FactoryType","SpatialGrid","SpatialGridWrapper","Object","assign","configToParams"],"mappings":"6QAMO,SAASA,qBACd,MAAMC,QAAqEC,gBAAgBC,YAAYC,YAAaC,oBAGpH,OAAOC,OAAOC,OAAON,QAAS,CAAAO,eAAEA,uBAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"WithReactivePosition.js","sources":["../../../src/Spatial/Mixins/WithReactivePosition.ts"],"sourcesContent":["import type { TWithReactivePosition } from '@Anarchy/Engine/Spatial/Models';\nimport { Subject } from 'rxjs';\nimport type { Group, Mesh, Object3D } from 'three';\nimport { Vector3 } from 'three';\n\nexport function withReactivePosition(entity: Mesh | Group | Object3D): TWithReactivePosition {\n const position$: Subject<Vector3> = new Subject<Vector3>();\n let prevPosition: Vector3 = new Vector3();\n\n function update(): void {\n if (prevPosition.equals(entity.position)) return;\n\n const newPosition: Vector3 = entity.position.clone();\n position$.next(newPosition);\n prevPosition = newPosition;\n }\n\n return { value$: position$, update };\n}\n"],"names":["withReactivePosition","entity","position$","Subject","prevPosition","Vector3","value$","update","equals","position","newPosition","clone","next"],"mappings":"sGAKO,SAASA,qBAAqBC,QACnC,MAAMC,UAA8B,IAAIC,QACxC,IAAIC,aAAwB,IAAIC,QAUhC,MAAO,CAAEC,OAAQJ,UAAWK,OAR5B,WACE,GAAIH,aAAaI,OAAOP,OAAOQ,UAAW,OAE1C,MAAMC,YAAuBT,OAAOQ,SAASE,QAC7CT,UAAUU,KAAKF,aACfN,aAAeM,WACjB,EAGF"}
1
+ {"version":3,"file":"WithReactivePosition.js","sources":["../../../src/Spatial/Mixins/WithReactivePosition.ts"],"sourcesContent":["import type { TWithReactivePosition } from '@hellpig/anarchy-engine/Spatial/Models';\nimport { Subject } from 'rxjs';\nimport type { Group, Mesh, Object3D } from 'three';\nimport { Vector3 } from 'three';\n\nexport function withReactivePosition(entity: Mesh | Group | Object3D): TWithReactivePosition {\n const position$: Subject<Vector3> = new Subject<Vector3>();\n let prevPosition: Vector3 = new Vector3();\n\n function update(): void {\n if (prevPosition.equals(entity.position)) return;\n\n const newPosition: Vector3 = entity.position.clone();\n position$.next(newPosition);\n prevPosition = newPosition;\n }\n\n return { value$: position$, update };\n}\n"],"names":["withReactivePosition","entity","position$","Subject","prevPosition","Vector3","value$","update","equals","position","newPosition","clone","next"],"mappings":"sGAKO,SAASA,qBAAqBC,QACnC,MAAMC,UAA8B,IAAIC,QACxC,IAAIC,aAAwB,IAAIC,QAUhC,MAAO,CAAEC,OAAQJ,UAAWK,OAR5B,WACE,GAAIH,aAAaI,OAAOP,OAAOQ,UAAW,OAE1C,MAAMC,YAAuBT,OAAOQ,SAASE,QAC7CT,UAAUU,KAAKF,aACfN,aAAeM,WACjB,EAGF"}
@@ -1 +1 @@
1
- {"version":3,"file":"WithReactiveRotation.js","sources":["../../../src/Spatial/Mixins/WithReactiveRotation.ts"],"sourcesContent":["import type { TWithReactiveRotation } from '@Anarchy/Engine/Spatial/Models';\nimport { Subject } from 'rxjs';\nimport type { Group, Mesh, Object3D } from 'three';\nimport { Euler } from 'three';\n\nexport function withReactiveRotation(entity: Mesh | Group | Object3D): TWithReactiveRotation {\n const rotation$: Subject<Euler> = new Subject<Euler>();\n let prevRotation: Euler = new Euler();\n\n function update(): void {\n if (prevRotation.equals(entity.rotation)) return;\n\n const newRotation: Euler = entity.rotation.clone();\n rotation$.next(newRotation);\n prevRotation = newRotation;\n }\n\n return { value$: rotation$, update };\n}\n"],"names":["withReactiveRotation","entity","rotation$","Subject","prevRotation","Euler","value$","update","equals","rotation","newRotation","clone","next"],"mappings":"oGAKO,SAASA,qBAAqBC,QACnC,MAAMC,UAA4B,IAAIC,QACtC,IAAIC,aAAsB,IAAIC,MAU9B,MAAO,CAAEC,OAAQJ,UAAWK,OAR5B,WACE,GAAIH,aAAaI,OAAOP,OAAOQ,UAAW,OAE1C,MAAMC,YAAqBT,OAAOQ,SAASE,QAC3CT,UAAUU,KAAKF,aACfN,aAAeM,WACjB,EAGF"}
1
+ {"version":3,"file":"WithReactiveRotation.js","sources":["../../../src/Spatial/Mixins/WithReactiveRotation.ts"],"sourcesContent":["import type { TWithReactiveRotation } from '@hellpig/anarchy-engine/Spatial/Models';\nimport { Subject } from 'rxjs';\nimport type { Group, Mesh, Object3D } from 'three';\nimport { Euler } from 'three';\n\nexport function withReactiveRotation(entity: Mesh | Group | Object3D): TWithReactiveRotation {\n const rotation$: Subject<Euler> = new Subject<Euler>();\n let prevRotation: Euler = new Euler();\n\n function update(): void {\n if (prevRotation.equals(entity.rotation)) return;\n\n const newRotation: Euler = entity.rotation.clone();\n rotation$.next(newRotation);\n prevRotation = newRotation;\n }\n\n return { value$: rotation$, update };\n}\n"],"names":["withReactiveRotation","entity","rotation$","Subject","prevRotation","Euler","value$","update","equals","rotation","newRotation","clone","next"],"mappings":"oGAKO,SAASA,qBAAqBC,QACnC,MAAMC,UAA4B,IAAIC,QACtC,IAAIC,aAAsB,IAAIC,MAU9B,MAAO,CAAEC,OAAQJ,UAAWK,OAR5B,WACE,GAAIH,aAAaI,OAAOP,OAAOQ,UAAW,OAE1C,MAAMC,YAAqBT,OAAOQ,SAASE,QAC3CT,UAAUU,KAAKF,aACfN,aAAeM,WACjB,EAGF"}
@@ -1 +1 @@
1
- {"version":3,"file":"WithSpatial.js","sources":["../../../src/Spatial/Mixins/WithSpatial.ts"],"sourcesContent":["import type { TActorParams } from '@Anarchy/Engine/Actor';\nimport { LoopUpdatePriority } from '@Anarchy/Engine/Loop';\nimport type { TDestroyable } from '@Anarchy/Engine/Mixins';\nimport { destroyableMixin } from '@Anarchy/Engine/Mixins';\nimport type { TSpatialCellWrapper, TSpatialData, TSpatialGridWrapper, TWithSpatial } from '@Anarchy/Engine/Spatial/Models';\nimport type { TWriteable } from '@Anarchy/Shared/Utils';\nimport type { Subscription } from 'rxjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nexport function withSpatial(params: TActorParams): TWithSpatial {\n const autoUpdate$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(params.spatial.isAutoUpdate);\n const cellsChanged$: Subject<ReadonlyArray<TSpatialCellWrapper>> = new Subject<ReadonlyArray<TSpatialCellWrapper>>();\n\n const destroyable: TDestroyable = destroyableMixin();\n\n const result: TWithSpatial = {\n spatial: {\n data: {\n updatePriority: params.spatial.updatePriority ?? LoopUpdatePriority.LOW,\n grid: params.spatial.grid || undefined,\n cells: []\n },\n setData({ updatePriority, cells }: TSpatialData): void {\n this.setSpatialUpdatePriority(updatePriority);\n this.setSpatialCells(cells);\n },\n getData(): TSpatialData {\n return this.data;\n },\n setSpatialUpdatePriority(value: LoopUpdatePriority): void {\n // eslint-disable-next-line functional/immutable-data\n (this.data as TWriteable<TSpatialData>).updatePriority = value;\n },\n getSpatialUpdatePriority(): LoopUpdatePriority {\n return this.data.updatePriority;\n },\n setGrid(grid: TSpatialGridWrapper): void {\n // eslint-disable-next-line functional/immutable-data\n (this.data as TWriteable<TSpatialData>).grid = grid;\n },\n getGrid(): TSpatialGridWrapper | undefined {\n return this.data.grid;\n },\n resetGrid(): void {\n this.setGrid(undefined as unknown as TSpatialGridWrapper);\n },\n getSpatialCells(): ReadonlyArray<TSpatialCellWrapper> {\n return this.data.cells;\n },\n setSpatialCells(cells: ReadonlyArray<TSpatialCellWrapper>): void {\n // eslint-disable-next-line functional/immutable-data\n (this.data as TWriteable<TSpatialData>).cells = cells;\n cellsChanged$.next(cells);\n },\n resetSpatialCells(): void {\n this.setSpatialCells([]);\n },\n ...destroyable,\n autoUpdate$,\n cellsChanged$: cellsChanged$.asObservable()\n }\n };\n\n const destroySub$: Subscription = destroyable.destroy$.subscribe((): void => {\n destroySub$.unsubscribe();\n\n result.spatial.resetGrid();\n result.spatial.resetSpatialCells();\n cellsChanged$.complete();\n });\n\n return result;\n}\n"],"names":["withSpatial","params","autoUpdate$","BehaviorSubject","spatial","isAutoUpdate","cellsChanged$","Subject","destroyable","destroyableMixin","result","data","updatePriority","LoopUpdatePriority","LOW","grid","cells","setData","this","setSpatialUpdatePriority","setSpatialCells","getData","value","getSpatialUpdatePriority","setGrid","getGrid","resetGrid","getSpatialCells","next","resetSpatialCells","asObservable","destroySub$","destroy$","subscribe","unsubscribe","complete"],"mappings":"yTASO,SAASA,YAAYC,QAC1B,MAAMC,YAAwC,IAAIC,gBAAyBF,OAAOG,QAAQC,cACpFC,cAA6D,IAAIC,QAEjEC,YAA4BC,mBAE5BC,OAAuB,CAC3BN,QAAS,CACPO,KAAM,CACJC,eAAgBX,OAAOG,QAAQQ,gBAAkBC,mBAAmBC,IACpEC,KAAMd,OAAOG,QAAQW,WAAQ,EAC7BC,MAAO,IAET,OAAAC,EAAQL,eAAEA,eAAAI,MAAgBA,QACxBE,KAAKC,yBAAyBP,gBAC9BM,KAAKE,gBAAgBJ,MACvB,EACA,OAAAK,GACE,OAAOH,KAAKP,IACd,EACA,wBAAAQ,CAAyBG,OAEtBJ,KAAKP,KAAkCC,eAAiBU,KAC3D,EACA,wBAAAC,GACE,OAAOL,KAAKP,KAAKC,cACnB,EACA,OAAAY,CAAQT,MAELG,KAAKP,KAAkCI,KAAOA,IACjD,EACA,OAAAU,GACE,OAAOP,KAAKP,KAAKI,IACnB,EACA,SAAAW,GACER,KAAKM,eACP,EACA,eAAAG,GACE,OAAOT,KAAKP,KAAKK,KACnB,EACA,eAAAI,CAAgBJ,OAEbE,KAAKP,KAAkCK,MAAQA,MAChDV,cAAcsB,KAAKZ,MACrB,EACA,iBAAAa,GACEX,KAAKE,gBAAgB,GACvB,KACGZ,YACHN,wBACAI,cAAeA,cAAcwB,iBAI3BC,YAA4BvB,YAAYwB,SAASC,UAAU,KAC/DF,YAAYG,cAEZxB,OAAON,QAAQsB,YACfhB,OAAON,QAAQyB,oBACfvB,cAAc6B,aAGhB,OAAOzB,MACT"}
1
+ {"version":3,"file":"WithSpatial.js","sources":["../../../src/Spatial/Mixins/WithSpatial.ts"],"sourcesContent":["import type { TActorParams } from '@hellpig/anarchy-engine/Actor';\nimport { LoopUpdatePriority } from '@hellpig/anarchy-engine/Loop';\nimport type { TDestroyable } from '@hellpig/anarchy-engine/Mixins';\nimport { destroyableMixin } from '@hellpig/anarchy-engine/Mixins';\nimport type { TSpatialCellWrapper, TSpatialData, TSpatialGridWrapper, TWithSpatial } from '@hellpig/anarchy-engine/Spatial/Models';\nimport type { TWriteable } from '@hellpig/anarchy-shared/Utils';\nimport type { Subscription } from 'rxjs';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nexport function withSpatial(params: TActorParams): TWithSpatial {\n const autoUpdate$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(params.spatial.isAutoUpdate);\n const cellsChanged$: Subject<ReadonlyArray<TSpatialCellWrapper>> = new Subject<ReadonlyArray<TSpatialCellWrapper>>();\n\n const destroyable: TDestroyable = destroyableMixin();\n\n const result: TWithSpatial = {\n spatial: {\n data: {\n updatePriority: params.spatial.updatePriority ?? LoopUpdatePriority.LOW,\n grid: params.spatial.grid || undefined,\n cells: []\n },\n setData({ updatePriority, cells }: TSpatialData): void {\n this.setSpatialUpdatePriority(updatePriority);\n this.setSpatialCells(cells);\n },\n getData(): TSpatialData {\n return this.data;\n },\n setSpatialUpdatePriority(value: LoopUpdatePriority): void {\n // eslint-disable-next-line functional/immutable-data\n (this.data as TWriteable<TSpatialData>).updatePriority = value;\n },\n getSpatialUpdatePriority(): LoopUpdatePriority {\n return this.data.updatePriority;\n },\n setGrid(grid: TSpatialGridWrapper): void {\n // eslint-disable-next-line functional/immutable-data\n (this.data as TWriteable<TSpatialData>).grid = grid;\n },\n getGrid(): TSpatialGridWrapper | undefined {\n return this.data.grid;\n },\n resetGrid(): void {\n this.setGrid(undefined as unknown as TSpatialGridWrapper);\n },\n getSpatialCells(): ReadonlyArray<TSpatialCellWrapper> {\n return this.data.cells;\n },\n setSpatialCells(cells: ReadonlyArray<TSpatialCellWrapper>): void {\n // eslint-disable-next-line functional/immutable-data\n (this.data as TWriteable<TSpatialData>).cells = cells;\n cellsChanged$.next(cells);\n },\n resetSpatialCells(): void {\n this.setSpatialCells([]);\n },\n ...destroyable,\n autoUpdate$,\n cellsChanged$: cellsChanged$.asObservable()\n }\n };\n\n const destroySub$: Subscription = destroyable.destroy$.subscribe((): void => {\n destroySub$.unsubscribe();\n\n result.spatial.resetGrid();\n result.spatial.resetSpatialCells();\n cellsChanged$.complete();\n });\n\n return result;\n}\n"],"names":["withSpatial","params","autoUpdate$","BehaviorSubject","spatial","isAutoUpdate","cellsChanged$","Subject","destroyable","destroyableMixin","result","data","updatePriority","LoopUpdatePriority","LOW","grid","cells","setData","this","setSpatialUpdatePriority","setSpatialCells","getData","value","getSpatialUpdatePriority","setGrid","getGrid","resetGrid","getSpatialCells","next","resetSpatialCells","asObservable","destroySub$","destroy$","subscribe","unsubscribe","complete"],"mappings":"yTASO,SAASA,YAAYC,QAC1B,MAAMC,YAAwC,IAAIC,gBAAyBF,OAAOG,QAAQC,cACpFC,cAA6D,IAAIC,QAEjEC,YAA4BC,mBAE5BC,OAAuB,CAC3BN,QAAS,CACPO,KAAM,CACJC,eAAgBX,OAAOG,QAAQQ,gBAAkBC,mBAAmBC,IACpEC,KAAMd,OAAOG,QAAQW,WAAQ,EAC7BC,MAAO,IAET,OAAAC,EAAQL,eAAEA,eAAAI,MAAgBA,QACxBE,KAAKC,yBAAyBP,gBAC9BM,KAAKE,gBAAgBJ,MACvB,EACA,OAAAK,GACE,OAAOH,KAAKP,IACd,EACA,wBAAAQ,CAAyBG,OAEtBJ,KAAKP,KAAkCC,eAAiBU,KAC3D,EACA,wBAAAC,GACE,OAAOL,KAAKP,KAAKC,cACnB,EACA,OAAAY,CAAQT,MAELG,KAAKP,KAAkCI,KAAOA,IACjD,EACA,OAAAU,GACE,OAAOP,KAAKP,KAAKI,IACnB,EACA,SAAAW,GACER,KAAKM,eACP,EACA,eAAAG,GACE,OAAOT,KAAKP,KAAKK,KACnB,EACA,eAAAI,CAAgBJ,OAEbE,KAAKP,KAAkCK,MAAQA,MAChDV,cAAcsB,KAAKZ,MACrB,EACA,iBAAAa,GACEX,KAAKE,gBAAgB,GACvB,KACGZ,YACHN,wBACAI,cAAeA,cAAcwB,iBAI3BC,YAA4BvB,YAAYwB,SAASC,UAAU,KAC/DF,YAAYG,cAEZxB,OAAON,QAAQsB,YACfhB,OAAON,QAAQyB,oBACfvB,cAAc6B,aAGhB,OAAOzB,MACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"WithUpdateSpatialCell.js","sources":["../../../src/Spatial/Mixins/WithUpdateSpatialCell.ts"],"sourcesContent":["import type { TActor } from '@Anarchy/Engine/Actor';\nimport type { TSpatialCell, TSpatialCellWrapper, TSpatialGridWrapper, TWithUpdateSpatialCell } from '@Anarchy/Engine/Spatial/Models';\nimport type { TReadonlyVector3 } from '@Anarchy/Engine/ThreeLib';\nimport { isDefined, isNotDefined } from '@Anarchy/Shared/Utils';\n\nexport function withUpdateSpatialCell(): TWithUpdateSpatialCell {\n let prevCells: ReadonlyArray<Pick<TSpatialCell, 'maxX' | 'maxY' | 'minX' | 'minY'>> = [];\n\n function updateSpatialCells(this: TActor, newPosition: TReadonlyVector3): void | never {\n const grid: TSpatialGridWrapper | undefined = this.spatial.getGrid();\n if (isNotDefined(grid)) throw new Error(`Grid is not defined for Actor name: \"${this.name}\", id: \"${this.id}\"`);\n const cells: ReadonlyArray<TSpatialCellWrapper> = this.spatial.getSpatialCells();\n\n //first run\n if (prevCells.length === 0) {\n prevCells = cells.map(({ maxX, maxY, minX, minY }: TSpatialCellWrapper): Pick<TSpatialCell, 'maxX' | 'maxY' | 'minX' | 'minY'> => ({ maxX, maxY, minX, minY }));\n return;\n }\n\n const isOutside = ({ minX, minY, maxX, maxY }: Pick<TSpatialCell, 'maxX' | 'maxY' | 'minX' | 'minY'>, newPosition: TReadonlyVector3): boolean => {\n return newPosition.x < minX || newPosition.x > maxX || newPosition.z < minY || newPosition.z > maxY;\n };\n\n // eslint-disable-next-line functional/no-loop-statements\n for (let index: number = 0; index < cells.length; index++) {\n if (isDefined(prevCells[index]) && isOutside(prevCells[index], newPosition)) {\n if (isNotDefined(grid)) throw new Error(`Cannot update actor's (id: \"${this.id}\") spatial grid's cell: grid is not defined`);\n grid.updateActorCell(this);\n }\n }\n\n prevCells = cells.map(({ maxX, maxY, minX, minY }: TSpatialCellWrapper) => ({ maxX, maxY, minX, minY }));\n }\n\n return {\n updateSpatialCells\n };\n}\n"],"names":["withUpdateSpatialCell","prevCells","updateSpatialCells","newPosition","grid","this","spatial","getGrid","isNotDefined","Error","name","id","cells","getSpatialCells","length","map","maxX","maxY","minX","minY","isOutside","x","z","index","isDefined","updateActorCell"],"mappings":"0FAKO,SAASA,wBACd,IAAIC,UAAkF,GA4BtF,MAAO,CACLC,mBA3BF,SAA0CC,aACxC,MAAMC,KAAwCC,KAAKC,QAAQC,UAC3D,GAAIC,aAAaJ,MAAO,MAAM,IAAIK,MAAM,wCAAwCJ,KAAKK,eAAeL,KAAKM,OACzG,MAAMC,MAA4CP,KAAKC,QAAQO,kBAG/D,GAAyB,IAArBZ,UAAUa,OAEZ,YADAb,UAAYW,MAAMG,IAAI,EAAGC,UAAMC,UAAMC,UAAMC,cAAK,CAAqFH,UAAMC,UAAMC,UAAMC,cAIzJ,MAAMC,UAAY,EAAGF,UAAMC,UAAMH,UAAMC,WAA+Dd,eAC7FA,aAAYkB,EAAIH,MAAQf,aAAYkB,EAAIL,MAAQb,aAAYmB,EAAIH,MAAQhB,aAAYmB,EAAIL,KAIjG,IAAA,IAASM,MAAgB,EAAGA,MAAQX,MAAME,OAAQS,QAChD,GAAIC,UAAUvB,UAAUsB,SAAWH,UAAUnB,UAAUsB,OAAQpB,aAAc,CAC3E,GAAIK,aAAaJ,MAAO,MAAM,IAAIK,MAAM,+BAA+BJ,KAAKM,iDAC5EP,KAAKqB,gBAAgBpB,KACvB,CAGFJ,UAAYW,MAAMG,IAAI,EAAGC,UAAMC,UAAMC,UAAMC,cAAK,CAA8BH,UAAMC,UAAMC,UAAMC,YAClG,EAKF"}
1
+ {"version":3,"file":"WithUpdateSpatialCell.js","sources":["../../../src/Spatial/Mixins/WithUpdateSpatialCell.ts"],"sourcesContent":["import type { TActor } from '@hellpig/anarchy-engine/Actor';\nimport type { TSpatialCell, TSpatialCellWrapper, TSpatialGridWrapper, TWithUpdateSpatialCell } from '@hellpig/anarchy-engine/Spatial/Models';\nimport type { TReadonlyVector3 } from '@hellpig/anarchy-engine/ThreeLib';\nimport { isDefined, isNotDefined } from '@hellpig/anarchy-shared/Utils';\n\nexport function withUpdateSpatialCell(): TWithUpdateSpatialCell {\n let prevCells: ReadonlyArray<Pick<TSpatialCell, 'maxX' | 'maxY' | 'minX' | 'minY'>> = [];\n\n function updateSpatialCells(this: TActor, newPosition: TReadonlyVector3): void | never {\n const grid: TSpatialGridWrapper | undefined = this.spatial.getGrid();\n if (isNotDefined(grid)) throw new Error(`Grid is not defined for Actor name: \"${this.name}\", id: \"${this.id}\"`);\n const cells: ReadonlyArray<TSpatialCellWrapper> = this.spatial.getSpatialCells();\n\n //first run\n if (prevCells.length === 0) {\n prevCells = cells.map(({ maxX, maxY, minX, minY }: TSpatialCellWrapper): Pick<TSpatialCell, 'maxX' | 'maxY' | 'minX' | 'minY'> => ({ maxX, maxY, minX, minY }));\n return;\n }\n\n const isOutside = ({ minX, minY, maxX, maxY }: Pick<TSpatialCell, 'maxX' | 'maxY' | 'minX' | 'minY'>, newPosition: TReadonlyVector3): boolean => {\n return newPosition.x < minX || newPosition.x > maxX || newPosition.z < minY || newPosition.z > maxY;\n };\n\n // eslint-disable-next-line functional/no-loop-statements\n for (let index: number = 0; index < cells.length; index++) {\n if (isDefined(prevCells[index]) && isOutside(prevCells[index], newPosition)) {\n if (isNotDefined(grid)) throw new Error(`Cannot update actor's (id: \"${this.id}\") spatial grid's cell: grid is not defined`);\n grid.updateActorCell(this);\n }\n }\n\n prevCells = cells.map(({ maxX, maxY, minX, minY }: TSpatialCellWrapper) => ({ maxX, maxY, minX, minY }));\n }\n\n return {\n updateSpatialCells\n };\n}\n"],"names":["withUpdateSpatialCell","prevCells","updateSpatialCells","newPosition","grid","this","spatial","getGrid","isNotDefined","Error","name","id","cells","getSpatialCells","length","map","maxX","maxY","minX","minY","isOutside","x","z","index","isDefined","updateActorCell"],"mappings":"0FAKO,SAASA,wBACd,IAAIC,UAAkF,GA4BtF,MAAO,CACLC,mBA3BF,SAA0CC,aACxC,MAAMC,KAAwCC,KAAKC,QAAQC,UAC3D,GAAIC,aAAaJ,MAAO,MAAM,IAAIK,MAAM,wCAAwCJ,KAAKK,eAAeL,KAAKM,OACzG,MAAMC,MAA4CP,KAAKC,QAAQO,kBAG/D,GAAyB,IAArBZ,UAAUa,OAEZ,YADAb,UAAYW,MAAMG,IAAI,EAAGC,UAAMC,UAAMC,UAAMC,cAAK,CAAqFH,UAAMC,UAAMC,UAAMC,cAIzJ,MAAMC,UAAY,EAAGF,UAAMC,UAAMH,UAAMC,WAA+Dd,eAC7FA,aAAYkB,EAAIH,MAAQf,aAAYkB,EAAIL,MAAQb,aAAYmB,EAAIH,MAAQhB,aAAYmB,EAAIL,KAIjG,IAAA,IAASM,MAAgB,EAAGA,MAAQX,MAAME,OAAQS,QAChD,GAAIC,UAAUvB,UAAUsB,SAAWH,UAAUnB,UAAUsB,OAAQpB,aAAc,CAC3E,GAAIK,aAAaJ,MAAO,MAAM,IAAIK,MAAM,+BAA+BJ,KAAKM,iDAC5EP,KAAKqB,gBAAgBpB,KACvB,CAGFJ,UAAYW,MAAMG,IAAI,EAAGC,UAAMC,UAAMC,UAAMC,cAAK,CAA8BH,UAAMC,UAAMC,UAAMC,YAClG,EAKF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SpatialGridRegistry.js","sources":["../../../src/Spatial/Registries/SpatialGridRegistry.ts"],"sourcesContent":["import { RegistryType } from '@Anarchy/Engine/Abstract/Constants';\nimport { AbstractEntityRegistry } from '@Anarchy/Engine/Abstract/Registries';\nimport type { TSpatialGridRegistry, TSpatialGridWrapper } from '@Anarchy/Engine/Spatial/Models';\n\nexport function SpatialGridRegistry(): TSpatialGridRegistry {\n return AbstractEntityRegistry<TSpatialGridWrapper>(RegistryType.SpatialGrid);\n}\n"],"names":["SpatialGridRegistry","AbstractEntityRegistry","RegistryType","SpatialGrid"],"mappings":"2JAIO,SAASA,sBACd,OAAOC,uBAA4CC,aAAaC,YAClE"}
1
+ {"version":3,"file":"SpatialGridRegistry.js","sources":["../../../src/Spatial/Registries/SpatialGridRegistry.ts"],"sourcesContent":["import { RegistryType } from '@hellpig/anarchy-engine/Abstract/Constants';\nimport { AbstractEntityRegistry } from '@hellpig/anarchy-engine/Abstract/Registries';\nimport type { TSpatialGridRegistry, TSpatialGridWrapper } from '@hellpig/anarchy-engine/Spatial/Models';\n\nexport function SpatialGridRegistry(): TSpatialGridRegistry {\n return AbstractEntityRegistry<TSpatialGridWrapper>(RegistryType.SpatialGrid);\n}\n"],"names":["SpatialGridRegistry","AbstractEntityRegistry","RegistryType","SpatialGrid"],"mappings":"2JAIO,SAASA,sBACd,OAAOC,uBAA4CC,aAAaC,YAClE"}
@@ -1 +1 @@
1
- {"version":3,"file":"SpatialGridService.js","sources":["../../../src/Spatial/Services/SpatialGridService.ts"],"sourcesContent":["import type { TAbstractService } from '@Anarchy/Engine/Abstract';\nimport { AbstractService } from '@Anarchy/Engine/Abstract';\nimport type { TDisposable } from '@Anarchy/Engine/Mixins';\nimport { withCreateServiceMixin, withSerializableEntities } from '@Anarchy/Engine/Mixins';\nimport { withCreateFromConfigServiceMixin } from '@Anarchy/Engine/Mixins/Services/WithCreateFromConfigService';\nimport { withFactoryService } from '@Anarchy/Engine/Mixins/Services/WithFactoryService';\nimport { withRegistryService } from '@Anarchy/Engine/Mixins/Services/WithRegistryService';\nimport type {\n TSpatialGridConfig,\n TSpatialGridFactory,\n TSpatialGridRegistry,\n TSpatialGridService,\n TSpatialGridServiceWithCreate,\n TSpatialGridServiceWithCreateFromConfig,\n TSpatialGridServiceWithFactory,\n TSpatialGridServiceWithRegistry,\n TSpatialGridWrapper\n} from '@Anarchy/Engine/Spatial/Models';\nimport { mergeAll } from '@Anarchy/Engine/Utils';\nimport type { Subscription } from 'rxjs';\n\nexport function SpatialGridService(factory: TSpatialGridFactory, registry: TSpatialGridRegistry): TSpatialGridService {\n const factorySub$: Subscription = factory.entityCreated$.subscribe((spatialGrid: TSpatialGridWrapper): void => registry.add(spatialGrid));\n const disposable: ReadonlyArray<TDisposable> = [registry, factory, factorySub$];\n const abstractService: TAbstractService = AbstractService(disposable);\n\n const withCreateService: TSpatialGridServiceWithCreate = withCreateServiceMixin(factory, undefined);\n const withCreateFromConfigService: TSpatialGridServiceWithCreateFromConfig = withCreateFromConfigServiceMixin(withCreateService.create, factory.configToParams, undefined);\n const withFactory: TSpatialGridServiceWithFactory = withFactoryService(factory);\n const withRegistry: TSpatialGridServiceWithRegistry = withRegistryService(registry);\n\n return mergeAll(abstractService, withCreateService, withCreateFromConfigService, withFactory, withRegistry, withSerializableEntities<TSpatialGridWrapper, TSpatialGridConfig, undefined>(registry));\n}\n"],"names":["SpatialGridService","factory","registry","factorySub$","entityCreated$","subscribe","spatialGrid","add","abstractService","AbstractService","withCreateService","withCreateServiceMixin","withCreateFromConfigService","withCreateFromConfigServiceMixin","create","configToParams","withFactory","withFactoryService","withRegistry","withRegistryService","mergeAll","withSerializableEntities"],"mappings":"6hBAqBO,SAASA,mBAAmBC,QAA8BC,UAC/D,MAAMC,YAA4BF,QAAQG,eAAeC,UAAWC,aAA2CJ,SAASK,IAAID,cAEtHE,gBAAoCC,gBADK,CAACP,SAAUD,QAASE,cAG7DO,kBAAmDC,uBAAuBV,gBAC1EW,4BAAuEC,iCAAiCH,kBAAkBI,OAAQb,QAAQc,uBAC1IC,YAA8CC,mBAAmBhB,SACjEiB,aAAgDC,oBAAoBjB,UAE1E,OAAOkB,SAASZ,gBAAiBE,kBAAmBE,4BAA6BI,YAAaE,aAAcG,yBAA6EnB,UAC3L"}
1
+ {"version":3,"file":"SpatialGridService.js","sources":["../../../src/Spatial/Services/SpatialGridService.ts"],"sourcesContent":["import type { TAbstractService } from '@hellpig/anarchy-engine/Abstract';\nimport { AbstractService } from '@hellpig/anarchy-engine/Abstract';\nimport type { TDisposable } from '@hellpig/anarchy-engine/Mixins';\nimport { withCreateServiceMixin, withSerializableEntities } from '@hellpig/anarchy-engine/Mixins';\nimport { withCreateFromConfigServiceMixin } from '@hellpig/anarchy-engine/Mixins/Services/WithCreateFromConfigService';\nimport { withFactoryService } from '@hellpig/anarchy-engine/Mixins/Services/WithFactoryService';\nimport { withRegistryService } from '@hellpig/anarchy-engine/Mixins/Services/WithRegistryService';\nimport type {\n TSpatialGridConfig,\n TSpatialGridFactory,\n TSpatialGridRegistry,\n TSpatialGridService,\n TSpatialGridServiceWithCreate,\n TSpatialGridServiceWithCreateFromConfig,\n TSpatialGridServiceWithFactory,\n TSpatialGridServiceWithRegistry,\n TSpatialGridWrapper\n} from '@hellpig/anarchy-engine/Spatial/Models';\nimport { mergeAll } from '@hellpig/anarchy-engine/Utils';\nimport type { Subscription } from 'rxjs';\n\nexport function SpatialGridService(factory: TSpatialGridFactory, registry: TSpatialGridRegistry): TSpatialGridService {\n const factorySub$: Subscription = factory.entityCreated$.subscribe((spatialGrid: TSpatialGridWrapper): void => registry.add(spatialGrid));\n const disposable: ReadonlyArray<TDisposable> = [registry, factory, factorySub$];\n const abstractService: TAbstractService = AbstractService(disposable);\n\n const withCreateService: TSpatialGridServiceWithCreate = withCreateServiceMixin(factory, undefined);\n const withCreateFromConfigService: TSpatialGridServiceWithCreateFromConfig = withCreateFromConfigServiceMixin(withCreateService.create, factory.configToParams, undefined);\n const withFactory: TSpatialGridServiceWithFactory = withFactoryService(factory);\n const withRegistry: TSpatialGridServiceWithRegistry = withRegistryService(registry);\n\n return mergeAll(abstractService, withCreateService, withCreateFromConfigService, withFactory, withRegistry, withSerializableEntities<TSpatialGridWrapper, TSpatialGridConfig, undefined>(registry));\n}\n"],"names":["SpatialGridService","factory","registry","factorySub$","entityCreated$","subscribe","spatialGrid","add","abstractService","AbstractService","withCreateService","withCreateServiceMixin","withCreateFromConfigService","withCreateFromConfigServiceMixin","create","configToParams","withFactory","withFactoryService","withRegistry","withRegistryService","mergeAll","withSerializableEntities"],"mappings":"6hBAqBO,SAASA,mBAAmBC,QAA8BC,UAC/D,MAAMC,YAA4BF,QAAQG,eAAeC,UAAWC,aAA2CJ,SAASK,IAAID,cAEtHE,gBAAoCC,gBADK,CAACP,SAAUD,QAASE,cAG7DO,kBAAmDC,uBAAuBV,gBAC1EW,4BAAuEC,iCAAiCH,kBAAkBI,OAAQb,QAAQc,uBAC1IC,YAA8CC,mBAAmBhB,SACjEiB,aAAgDC,oBAAoBjB,UAE1E,OAAOkB,SAASZ,gBAAiBE,kBAAmBE,4BAA6BI,YAAaE,aAAcG,yBAA6EnB,UAC3L"}
@@ -1,6 +1,6 @@
1
1
  import { TActor } from '../../Actor';
2
2
  import { ColorRepresentation, Mesh } from 'three';
3
- import { Line2 } from 'three/examples/jsm/lines/Line2';
3
+ import { Line2 } from '../../../../../node_modules/@types/three/examples/jsm/lines/Line2';
4
4
  export declare function createLine(color: ColorRepresentation, width: number, positions: Array<number>): Line2;
5
5
  export declare function createOutline(actor: TActor, color: ColorRepresentation, lineWidth: number): Line2;
6
6
  export declare function createBoundingBox(minX: number, minZ: number, maxX: number, maxZ: number, color?: ColorRepresentation, wireframe?: boolean, height?: number): Mesh;
@@ -1 +1 @@
1
- {"version":3,"file":"SpatialHelper.js","sources":["../../../src/Spatial/Services/SpatialHelper.ts"],"sourcesContent":["import type { TActor } from '@Anarchy/Engine/Actor';\nimport { meters } from '@Anarchy/Engine/Measurements/Utils';\nimport type { ColorRepresentation, Vector3 } from 'three';\nimport { Box3, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\n\nexport function createLine(color: ColorRepresentation, width: number, positions: Array<number>): Line2 {\n const material = new LineMaterial({\n color,\n linewidth: meters(width),\n worldUnits: true,\n alphaToCoverage: true\n });\n const geometry: LineGeometry = new LineGeometry();\n geometry.setPositions(positions);\n\n return new Line2(geometry, material);\n}\n\nexport function createOutline(actor: TActor, color: ColorRepresentation, lineWidth: number): Line2 {\n const boundingBox = new Box3().setFromObject(actor.model3d.getRawModel3d());\n const min: Vector3 = boundingBox.min;\n const max: Vector3 = boundingBox.max;\n const positions = getBoxEdges(min, max);\n\n return createLine(color, lineWidth, positions);\n}\n\nfunction getBoxEdges(min: Vector3, max: Vector3): Array<number> {\n return [\n // Bottom edges\n min.x,\n min.y,\n min.z,\n max.x,\n min.y,\n min.z,\n max.x,\n min.y,\n min.z,\n max.x,\n min.y,\n max.z,\n max.x,\n min.y,\n max.z,\n min.x,\n min.y,\n max.z,\n min.x,\n min.y,\n max.z,\n min.x,\n min.y,\n min.z,\n\n // Top edges\n min.x,\n max.y,\n min.z,\n max.x,\n max.y,\n min.z,\n max.x,\n max.y,\n min.z,\n max.x,\n max.y,\n max.z,\n max.x,\n max.y,\n max.z,\n min.x,\n max.y,\n max.z,\n min.x,\n max.y,\n max.z,\n min.x,\n max.y,\n min.z,\n\n // Vertical edges\n min.x,\n min.y,\n min.z,\n min.x,\n max.y,\n min.z,\n max.x,\n min.y,\n min.z,\n max.x,\n max.y,\n min.z,\n max.x,\n min.y,\n max.z,\n max.x,\n max.y,\n max.z,\n min.x,\n min.y,\n max.z,\n min.x,\n max.y,\n max.z\n ];\n}\n\nexport function createBoundingBox(minX: number, minZ: number, maxX: number, maxZ: number, color: ColorRepresentation = '#00ff00', wireframe: boolean = true, height: number = 0): Mesh {\n const geometry: PlaneGeometry = new PlaneGeometry(maxX - minX, maxZ - minZ);\n const material: MeshBasicMaterial = new MeshBasicMaterial({ color, wireframe });\n const plane: Mesh = new Mesh(geometry, material);\n plane.position.set((minX + maxX) / 2, height, (minZ + maxZ) / 2);\n // eslint-disable-next-line functional/immutable-data\n plane.rotation.x = -Math.PI / 2;\n return plane;\n}\n"],"names":["createLine","color","width","positions","material","LineMaterial","linewidth","meters","worldUnits","alphaToCoverage","geometry","LineGeometry","setPositions","Line2","createOutline","actor","lineWidth","boundingBox","Box3","setFromObject","model3d","getRawModel3d","min","max","x","y","z","createBoundingBox","minX","minZ","maxX","maxZ","wireframe","height","PlaneGeometry","MeshBasicMaterial","plane","Mesh","position","set","rotation","Math","PI"],"mappings":"iTAQO,SAASA,WAAWC,MAA4BC,MAAeC,WACpE,MAAMC,SAAW,IAAIC,aAAa,CAChCJ,YACAK,UAAWC,OAAOL,OAClBM,YAAY,EACZC,iBAAiB,IAEbC,SAAyB,IAAIC,aAGnC,OAFAD,SAASE,aAAaT,WAEf,IAAIU,MAAMH,SAAUN,SAC7B,CAEO,SAASU,cAAcC,MAAed,MAA4Be,WACvE,MAAMC,aAAc,IAAIC,MAAOC,cAAcJ,MAAMK,QAAQC,iBAQ7D,IAAqBC,IAAcC,IAHjC,OAAOvB,WAAWC,MAAOe,UAIlB,EADYM,IAPEL,YAAYK,KAU3BE,EACJF,IAAIG,EACJH,IAAII,GAL2BH,IANZN,YAAYM,KAY3BC,EACJF,IAAIG,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJF,IAAIG,EACJH,IAAIC,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJH,IAAII,EAGJJ,IAAIE,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJF,IAAIG,EACJH,IAAIC,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJH,IAAII,EAGJJ,IAAIE,EACJF,IAAIG,EACJH,IAAII,EACJJ,IAAIE,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJF,IAAIG,EACJH,IAAIC,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJF,IAAIG,GAhFR,CAoFO,SAASC,kBAAkBC,KAAcC,KAAcC,KAAcC,KAAc9B,MAA6B,UAAW+B,WAAqB,EAAMC,OAAiB,GAC5K,MAAMvB,SAA0B,IAAIwB,cAAcJ,KAAOF,KAAMG,KAAOF,MAChEzB,SAA8B,IAAI+B,kBAAkB,CAAElC,YAAO+B,sBAC7DI,MAAc,IAAIC,KAAK3B,SAAUN,UAIvC,OAHAgC,MAAME,SAASC,KAAKX,KAAOE,MAAQ,EAAGG,QAASJ,KAAOE,MAAQ,GAE9DK,MAAMI,SAAShB,GAAKiB,KAAKC,GAAK,EACvBN,KACT"}
1
+ {"version":3,"file":"SpatialHelper.js","sources":["../../../src/Spatial/Services/SpatialHelper.ts"],"sourcesContent":["import type { TActor } from '@hellpig/anarchy-engine/Actor';\nimport { meters } from '@hellpig/anarchy-engine/Measurements/Utils';\nimport type { ColorRepresentation, Vector3 } from 'three';\nimport { Box3, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\n\nexport function createLine(color: ColorRepresentation, width: number, positions: Array<number>): Line2 {\n const material = new LineMaterial({\n color,\n linewidth: meters(width),\n worldUnits: true,\n alphaToCoverage: true\n });\n const geometry: LineGeometry = new LineGeometry();\n geometry.setPositions(positions);\n\n return new Line2(geometry, material);\n}\n\nexport function createOutline(actor: TActor, color: ColorRepresentation, lineWidth: number): Line2 {\n const boundingBox = new Box3().setFromObject(actor.model3d.getRawModel3d());\n const min: Vector3 = boundingBox.min;\n const max: Vector3 = boundingBox.max;\n const positions = getBoxEdges(min, max);\n\n return createLine(color, lineWidth, positions);\n}\n\nfunction getBoxEdges(min: Vector3, max: Vector3): Array<number> {\n return [\n // Bottom edges\n min.x,\n min.y,\n min.z,\n max.x,\n min.y,\n min.z,\n max.x,\n min.y,\n min.z,\n max.x,\n min.y,\n max.z,\n max.x,\n min.y,\n max.z,\n min.x,\n min.y,\n max.z,\n min.x,\n min.y,\n max.z,\n min.x,\n min.y,\n min.z,\n\n // Top edges\n min.x,\n max.y,\n min.z,\n max.x,\n max.y,\n min.z,\n max.x,\n max.y,\n min.z,\n max.x,\n max.y,\n max.z,\n max.x,\n max.y,\n max.z,\n min.x,\n max.y,\n max.z,\n min.x,\n max.y,\n max.z,\n min.x,\n max.y,\n min.z,\n\n // Vertical edges\n min.x,\n min.y,\n min.z,\n min.x,\n max.y,\n min.z,\n max.x,\n min.y,\n min.z,\n max.x,\n max.y,\n min.z,\n max.x,\n min.y,\n max.z,\n max.x,\n max.y,\n max.z,\n min.x,\n min.y,\n max.z,\n min.x,\n max.y,\n max.z\n ];\n}\n\nexport function createBoundingBox(minX: number, minZ: number, maxX: number, maxZ: number, color: ColorRepresentation = '#00ff00', wireframe: boolean = true, height: number = 0): Mesh {\n const geometry: PlaneGeometry = new PlaneGeometry(maxX - minX, maxZ - minZ);\n const material: MeshBasicMaterial = new MeshBasicMaterial({ color, wireframe });\n const plane: Mesh = new Mesh(geometry, material);\n plane.position.set((minX + maxX) / 2, height, (minZ + maxZ) / 2);\n // eslint-disable-next-line functional/immutable-data\n plane.rotation.x = -Math.PI / 2;\n return plane;\n}\n"],"names":["createLine","color","width","positions","material","LineMaterial","linewidth","meters","worldUnits","alphaToCoverage","geometry","LineGeometry","setPositions","Line2","createOutline","actor","lineWidth","boundingBox","Box3","setFromObject","model3d","getRawModel3d","min","max","x","y","z","createBoundingBox","minX","minZ","maxX","maxZ","wireframe","height","PlaneGeometry","MeshBasicMaterial","plane","Mesh","position","set","rotation","Math","PI"],"mappings":"iTAQO,SAASA,WAAWC,MAA4BC,MAAeC,WACpE,MAAMC,SAAW,IAAIC,aAAa,CAChCJ,YACAK,UAAWC,OAAOL,OAClBM,YAAY,EACZC,iBAAiB,IAEbC,SAAyB,IAAIC,aAGnC,OAFAD,SAASE,aAAaT,WAEf,IAAIU,MAAMH,SAAUN,SAC7B,CAEO,SAASU,cAAcC,MAAed,MAA4Be,WACvE,MAAMC,aAAc,IAAIC,MAAOC,cAAcJ,MAAMK,QAAQC,iBAQ7D,IAAqBC,IAAcC,IAHjC,OAAOvB,WAAWC,MAAOe,UAIlB,EADYM,IAPEL,YAAYK,KAU3BE,EACJF,IAAIG,EACJH,IAAII,GAL2BH,IANZN,YAAYM,KAY3BC,EACJF,IAAIG,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJF,IAAIG,EACJH,IAAIC,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJH,IAAII,EAGJJ,IAAIE,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJF,IAAIG,EACJH,IAAIC,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJH,IAAII,EAGJJ,IAAIE,EACJF,IAAIG,EACJH,IAAII,EACJJ,IAAIE,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJH,IAAII,EACJH,IAAIC,EACJD,IAAIE,EACJH,IAAII,EACJH,IAAIC,EACJF,IAAIG,EACJF,IAAIG,EACJH,IAAIC,EACJD,IAAIE,EACJF,IAAIG,EACJJ,IAAIE,EACJF,IAAIG,EACJF,IAAIG,EACJJ,IAAIE,EACJD,IAAIE,EACJF,IAAIG,GAhFR,CAoFO,SAASC,kBAAkBC,KAAcC,KAAcC,KAAcC,KAAc9B,MAA6B,UAAW+B,WAAqB,EAAMC,OAAiB,GAC5K,MAAMvB,SAA0B,IAAIwB,cAAcJ,KAAOF,KAAMG,KAAOF,MAChEzB,SAA8B,IAAI+B,kBAAkB,CAAElC,YAAO+B,sBAC7DI,MAAc,IAAIC,KAAK3B,SAAUN,UAIvC,OAHAgC,MAAME,SAASC,KAAKX,KAAOE,MAAQ,EAAGG,QAASJ,KAAOE,MAAQ,GAE9DK,MAAMI,SAAShB,GAAKiB,KAAKC,GAAK,EACvBN,KACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"SpatialCellWrapper.js","sources":["../../../src/Spatial/Wrappers/SpatialCellWrapper.ts"],"sourcesContent":["import type { TAbstractWrapper } from '@Anarchy/Engine/Abstract';\nimport { AbstractWrapper, WrapperType } from '@Anarchy/Engine/Abstract';\nimport type { TActor } from '@Anarchy/Engine/Actor';\nimport { entityToConfigSpatialCell } from '@Anarchy/Engine/Spatial/Adapters';\nimport type { TSpatialCell, TSpatialCellParams, TSpatialCellSerializedData, TSpatialCellWrapper } from '@Anarchy/Engine/Spatial/Models';\nimport type { Subscription } from 'rxjs';\nimport { Subject } from 'rxjs';\n\nexport function SpatialCellWrapper(params: TSpatialCellParams): TSpatialCellWrapper {\n const entity: TSpatialCell = {\n minX: params.minX,\n minY: params.minZ,\n maxX: params.maxX,\n maxY: params.maxZ,\n id: `spatial_cell_${params.x}_${params.z}`,\n version: 0,\n objects: []\n };\n\n const wrapper: TAbstractWrapper<TSpatialCell> = AbstractWrapper(entity, WrapperType.SpatialCell, params as any);\n const update$: Subject<TSpatialCell> = new Subject<TSpatialCell>();\n\n const sub$: Subscription = wrapper.destroy$.subscribe((): void => {\n sub$.unsubscribe();\n\n // eslint-disable-next-line functional/immutable-data\n entity.objects.length = 0;\n\n update$.complete();\n });\n\n const findObject = (id: string): TActor | undefined => entity.objects.find((o: TActor): boolean => o.id === id);\n\n function addObject(object: TActor): void {\n // eslint-disable-next-line functional/immutable-data\n entity.objects.push(object);\n // eslint-disable-next-line functional/immutable-data\n entity.version++;\n update$.next(entity);\n }\n\n const getObjects = (): ReadonlyArray<TActor> => entity.objects;\n\n const removeObject = (actor: TActor): void => {\n const index: number = getObjects().indexOf(actor);\n if (index === -1) throw new Error(`Cannot remove actor (id: \"${actor.id}\", name: \"${actor.name}\") from spatial cell (id: \"${entity.id}\"). Such actor is not in the cell`);\n\n // eslint-disable-next-line functional/immutable-data\n entity.objects.splice(index, 1);\n // eslint-disable-next-line functional/immutable-data\n entity.version++;\n update$.next(entity);\n };\n\n // eslint-disable-next-line functional/immutable-data\n const result = Object.assign(wrapper, {\n name: params.name ?? entity.id,\n // eslint-disable-next-line no-restricted-syntax\n get minX(): number {\n return entity.minX;\n },\n // eslint-disable-next-line no-restricted-syntax\n get minY(): number {\n return entity.minY;\n },\n // eslint-disable-next-line no-restricted-syntax\n get maxX(): number {\n return entity.maxX;\n },\n // eslint-disable-next-line no-restricted-syntax\n get maxY(): number {\n return entity.maxY;\n },\n getVersion: (): number => entity.version,\n findObject,\n addObject,\n getObjects,\n removeObject,\n update$: update$.asObservable(),\n serialize: (): TSpatialCellSerializedData => entityToConfigSpatialCell(result)\n });\n\n return result;\n}\n"],"names":["SpatialCellWrapper","params","entity","minX","minY","minZ","maxX","maxY","maxZ","id","x","z","version","objects","wrapper","AbstractWrapper","WrapperType","SpatialCell","update$","Subject","sub$","destroy$","subscribe","unsubscribe","length","complete","getObjects","result","Object","assign","name","getVersion","findObject","find","o","addObject","object","push","next","removeObject","actor","index","indexOf","Error","splice","asObservable","serialize","entityToConfigSpatialCell"],"mappings":"yRAQO,SAASA,mBAAmBC,QACjC,MAAMC,OAAuB,CAC3BC,KAAMF,OAAOE,KACbC,KAAMH,OAAOI,KACbC,KAAML,OAAOK,KACbC,KAAMN,OAAOO,KACbC,GAAI,gBAAgBR,OAAOS,KAAKT,OAAOU,IACvCC,QAAS,EACTC,QAAS,IAGLC,QAA0CC,gBAAgBb,OAAQc,YAAYC,YAAahB,QAC3FiB,QAAiC,IAAIC,QAErCC,KAAqBN,QAAQO,SAASC,UAAU,KACpDF,KAAKG,cAGLrB,OAAOW,QAAQW,OAAS,EAExBN,QAAQO,aAaJC,WAAa,IAA6BxB,OAAOW,QAcjDc,OAASC,OAAOC,OAAOf,QAAS,CACpCgB,KAAM7B,OAAO6B,MAAQ5B,OAAOO,GAE5B,QAAIN,GACF,OAAOD,OAAOC,IAChB,EAEA,QAAIC,GACF,OAAOF,OAAOE,IAChB,EAEA,QAAIE,GACF,OAAOJ,OAAOI,IAChB,EAEA,QAAIC,GACF,OAAOL,OAAOK,IAChB,EACAwB,WAAY,IAAc7B,OAAOU,QACjCoB,WA3CkBvB,IAAmCP,OAAOW,QAAQoB,KAAMC,GAAuBA,EAAEzB,KAAOA,IA4C1G0B,UA1CF,SAAmBC,QAEjBlC,OAAOW,QAAQwB,KAAKD,QAEpBlC,OAAOU,UACPM,QAAQoB,KAAKpC,OACf,EAqCEwB,sBACAa,aAlCoBC,QACpB,MAAMC,MAAgBf,aAAagB,QAAQF,OAC3C,IAAc,IAAVC,MAAc,MAAM,IAAIE,MAAM,6BAA6BH,MAAM/B,eAAe+B,MAAMV,kCAAkC5B,OAAOO,uCAGnIP,OAAOW,QAAQ+B,OAAOH,MAAO,GAE7BvC,OAAOU,UACPM,QAAQoB,KAAKpC,SA2BbgB,QAASA,QAAQ2B,eACjBC,UAAW,IAAkCC,0BAA0BpB,UAGzE,OAAOA,MACT"}
1
+ {"version":3,"file":"SpatialCellWrapper.js","sources":["../../../src/Spatial/Wrappers/SpatialCellWrapper.ts"],"sourcesContent":["import type { TAbstractWrapper } from '@hellpig/anarchy-engine/Abstract';\nimport { AbstractWrapper, WrapperType } from '@hellpig/anarchy-engine/Abstract';\nimport type { TActor } from '@hellpig/anarchy-engine/Actor';\nimport { entityToConfigSpatialCell } from '@hellpig/anarchy-engine/Spatial/Adapters';\nimport type { TSpatialCell, TSpatialCellParams, TSpatialCellSerializedData, TSpatialCellWrapper } from '@hellpig/anarchy-engine/Spatial/Models';\nimport type { Subscription } from 'rxjs';\nimport { Subject } from 'rxjs';\n\nexport function SpatialCellWrapper(params: TSpatialCellParams): TSpatialCellWrapper {\n const entity: TSpatialCell = {\n minX: params.minX,\n minY: params.minZ,\n maxX: params.maxX,\n maxY: params.maxZ,\n id: `spatial_cell_${params.x}_${params.z}`,\n version: 0,\n objects: []\n };\n\n const wrapper: TAbstractWrapper<TSpatialCell> = AbstractWrapper(entity, WrapperType.SpatialCell, params as any);\n const update$: Subject<TSpatialCell> = new Subject<TSpatialCell>();\n\n const sub$: Subscription = wrapper.destroy$.subscribe((): void => {\n sub$.unsubscribe();\n\n // eslint-disable-next-line functional/immutable-data\n entity.objects.length = 0;\n\n update$.complete();\n });\n\n const findObject = (id: string): TActor | undefined => entity.objects.find((o: TActor): boolean => o.id === id);\n\n function addObject(object: TActor): void {\n // eslint-disable-next-line functional/immutable-data\n entity.objects.push(object);\n // eslint-disable-next-line functional/immutable-data\n entity.version++;\n update$.next(entity);\n }\n\n const getObjects = (): ReadonlyArray<TActor> => entity.objects;\n\n const removeObject = (actor: TActor): void => {\n const index: number = getObjects().indexOf(actor);\n if (index === -1) throw new Error(`Cannot remove actor (id: \"${actor.id}\", name: \"${actor.name}\") from spatial cell (id: \"${entity.id}\"). Such actor is not in the cell`);\n\n // eslint-disable-next-line functional/immutable-data\n entity.objects.splice(index, 1);\n // eslint-disable-next-line functional/immutable-data\n entity.version++;\n update$.next(entity);\n };\n\n // eslint-disable-next-line functional/immutable-data\n const result = Object.assign(wrapper, {\n name: params.name ?? entity.id,\n // eslint-disable-next-line no-restricted-syntax\n get minX(): number {\n return entity.minX;\n },\n // eslint-disable-next-line no-restricted-syntax\n get minY(): number {\n return entity.minY;\n },\n // eslint-disable-next-line no-restricted-syntax\n get maxX(): number {\n return entity.maxX;\n },\n // eslint-disable-next-line no-restricted-syntax\n get maxY(): number {\n return entity.maxY;\n },\n getVersion: (): number => entity.version,\n findObject,\n addObject,\n getObjects,\n removeObject,\n update$: update$.asObservable(),\n serialize: (): TSpatialCellSerializedData => entityToConfigSpatialCell(result)\n });\n\n return result;\n}\n"],"names":["SpatialCellWrapper","params","entity","minX","minY","minZ","maxX","maxY","maxZ","id","x","z","version","objects","wrapper","AbstractWrapper","WrapperType","SpatialCell","update$","Subject","sub$","destroy$","subscribe","unsubscribe","length","complete","getObjects","result","Object","assign","name","getVersion","findObject","find","o","addObject","object","push","next","removeObject","actor","index","indexOf","Error","splice","asObservable","serialize","entityToConfigSpatialCell"],"mappings":"yRAQO,SAASA,mBAAmBC,QACjC,MAAMC,OAAuB,CAC3BC,KAAMF,OAAOE,KACbC,KAAMH,OAAOI,KACbC,KAAML,OAAOK,KACbC,KAAMN,OAAOO,KACbC,GAAI,gBAAgBR,OAAOS,KAAKT,OAAOU,IACvCC,QAAS,EACTC,QAAS,IAGLC,QAA0CC,gBAAgBb,OAAQc,YAAYC,YAAahB,QAC3FiB,QAAiC,IAAIC,QAErCC,KAAqBN,QAAQO,SAASC,UAAU,KACpDF,KAAKG,cAGLrB,OAAOW,QAAQW,OAAS,EAExBN,QAAQO,aAaJC,WAAa,IAA6BxB,OAAOW,QAcjDc,OAASC,OAAOC,OAAOf,QAAS,CACpCgB,KAAM7B,OAAO6B,MAAQ5B,OAAOO,GAE5B,QAAIN,GACF,OAAOD,OAAOC,IAChB,EAEA,QAAIC,GACF,OAAOF,OAAOE,IAChB,EAEA,QAAIE,GACF,OAAOJ,OAAOI,IAChB,EAEA,QAAIC,GACF,OAAOL,OAAOK,IAChB,EACAwB,WAAY,IAAc7B,OAAOU,QACjCoB,WA3CkBvB,IAAmCP,OAAOW,QAAQoB,KAAMC,GAAuBA,EAAEzB,KAAOA,IA4C1G0B,UA1CF,SAAmBC,QAEjBlC,OAAOW,QAAQwB,KAAKD,QAEpBlC,OAAOU,UACPM,QAAQoB,KAAKpC,OACf,EAqCEwB,sBACAa,aAlCoBC,QACpB,MAAMC,MAAgBf,aAAagB,QAAQF,OAC3C,IAAc,IAAVC,MAAc,MAAM,IAAIE,MAAM,6BAA6BH,MAAM/B,eAAe+B,MAAMV,kCAAkC5B,OAAOO,uCAGnIP,OAAOW,QAAQ+B,OAAOH,MAAO,GAE7BvC,OAAOU,UACPM,QAAQoB,KAAKpC,SA2BbgB,QAASA,QAAQ2B,eACjBC,UAAW,IAAkCC,0BAA0BpB,UAGzE,OAAOA,MACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"SpatialGridWrapper.js","sources":["../../../src/Spatial/Wrappers/SpatialGridWrapper.ts"],"sourcesContent":["import type { TAbstractWrapper } from '@Anarchy/Engine/Abstract';\nimport { AbstractWrapper, WrapperType } from '@Anarchy/Engine/Abstract';\nimport type { TActor } from '@Anarchy/Engine/Actor';\nimport type { TSceneWrapper } from '@Anarchy/Engine/Scene';\nimport { spatialGridEntityToConfig } from '@Anarchy/Engine/Spatial/Adapters/EntityToConfig';\nimport type { TSpatialCellId, TSpatialCellParams, TSpatialCellWrapper, TSpatialGrid, TSpatialGridConfig, TSpatialGridParams, TSpatialGridWrapper } from '@Anarchy/Engine/Spatial/Models';\nimport { createBoundingBox, createOutline } from '@Anarchy/Engine/Spatial/Services/SpatialHelper';\nimport { SpatialCellWrapper } from '@Anarchy/Engine/Spatial/Wrappers/SpatialCellWrapper';\nimport { isDefined, isNotDefined } from '@Anarchy/Shared/Utils';\nimport RBush from 'rbush';\nimport type { Subscription } from 'rxjs';\nimport { Subject } from 'rxjs';\nimport type { ColorRepresentation, Group, Mesh, Object3D } from 'three';\nimport { Box3, Vector3 } from 'three';\nimport type { Line2 } from 'three/examples/jsm/lines/Line2';\n\nexport function SpatialGridWrapper(params: TSpatialGridParams): TSpatialGridWrapper {\n const entity: TSpatialGrid = createEntity(params);\n let _debugOutlines: Array<Line2> = [];\n const _debugOutlinesIds: Array<number> = [];\n const update$: Subject<TSpatialCellWrapper> = new Subject<TSpatialCellWrapper>();\n\n function createEntity({ mapWidth, mapHeight, cellSize, centerX, centerZ }: TSpatialGridParams): TSpatialGrid {\n const startX: number = centerX - Math.floor(mapWidth / cellSize / 2) * cellSize;\n const startZ: number = centerZ - Math.floor(mapHeight / cellSize / 2) * cellSize;\n\n const grid: TSpatialGrid = new RBush();\n\n // eslint-disable-next-line functional/no-loop-statements\n for (let x: number = 0; x < mapWidth; x += cellSize) {\n // eslint-disable-next-line functional/no-loop-statements\n for (let z: number = 0; z < mapHeight; z += cellSize) {\n const cell: TSpatialCellParams = { minX: startX + x, minZ: startZ + z, maxX: startX + x + cellSize, maxZ: startZ + z + cellSize, x, z };\n const cellW: TSpatialCellWrapper = SpatialCellWrapper(cell);\n grid.insert(cellW);\n }\n }\n\n return grid;\n }\n\n const wrapper: TAbstractWrapper<TSpatialGrid> = AbstractWrapper(entity, WrapperType.SpatialGrid, params);\n\n function getBoundingBox(mesh: Mesh | Group | Object3D): Box3 {\n const box: Box3 = new Box3();\n box.setFromObject(mesh);\n return box;\n }\n\n function registerActorToGrid(actor: TActor, gridW: TSpatialGridWrapper): void {\n actor.spatial.setGrid(gridW);\n }\n\n function addActor(this: TSpatialGridWrapper, actor: TActor): void | never {\n if (isNotDefined(actor.spatial.getGrid())) registerActorToGrid(actor, this);\n\n const boundingBox: Box3 = getBoundingBox(actor.model3d.getRawModel3d());\n const min: Vector3 = boundingBox.min;\n const max: Vector3 = boundingBox.max;\n\n const cells: ReadonlyArray<TSpatialCellWrapper> = entity.search({ minX: min.x, minY: min.z, maxX: max.x, maxY: max.z });\n // eslint-disable-next-line functional/no-loop-statements\n for (const cell of cells) {\n if (isNotDefined(cell.findObject(actor.id))) {\n cell.addObject(actor);\n update$.next(cell);\n }\n }\n actor.spatial.setSpatialCells(cells);\n }\n\n const getAllCells = (): ReadonlyArray<TSpatialCellWrapper> => entity.all();\n\n function getAllInCell(x: number, z: number): ReadonlyArray<TActor> {\n const cells: ReadonlyArray<TSpatialCellWrapper> = entity.search({ minX: x, minY: z, maxX: x, maxY: z });\n if (cells.length === 1) return cells[0].getObjects();\n if (cells.length > 1) return cells.flatMap((cell: TSpatialCellWrapper): ReadonlyArray<TActor> => cell.getObjects());\n return [];\n }\n\n const getCoordsFromGridId = (cellId: TSpatialCellId): Vector3 => {\n const [x, z] = cellId.split('_').slice(-2).map(Number);\n return new Vector3(x, 0, z);\n };\n\n function getAllInCellByCellId(cellId: TSpatialCellId): ReadonlyArray<TActor> {\n // const cells: ReadonlyArray<TSpatialCellWrapper> = entity.all().filter((cell) => cell.id === cellId);\n const { x, z } = getCoordsFromGridId(cellId);\n return getAllInCell(x, z);\n }\n\n function removeFromGrid(actor: TActor): void | never {\n const cells: ReadonlyArray<TSpatialCellWrapper> = actor.spatial.getSpatialCells();\n\n // eslint-disable-next-line functional/no-loop-statements\n for (const cell of cells) {\n cell.removeObject(actor);\n update$.next(cell);\n }\n\n actor.spatial.resetSpatialCells();\n }\n\n function clearGrid(): void {\n // TODO should be tested before usage\n throw new Error('SpatialGrid clearGrid not implemented, just a placeholder: test and fix before usage');\n // entity.clear();\n // getAllCells().forEach((cell: TSpatialCellWrapper): void => {\n // // eslint-disable-next-line functional/immutable-data\n // cell.version++;\n // update$.next(cell);\n // });\n }\n\n function updateActorCell(this: TSpatialGridWrapper, actor: TActor): void {\n removeFromGrid(actor);\n addActor.call(this, actor);\n }\n\n const findCellsForPoint = (x: number, z: number): ReadonlyArray<TSpatialCellWrapper> => entity.search({ minX: x, minY: z, maxX: x, maxY: z });\n\n const findCellsForBox = ({\n minX,\n minZ,\n maxX,\n maxZ\n }: Readonly<{\n minX: number;\n minZ: number;\n maxX: number;\n maxZ: number;\n }>): ReadonlyArray<TSpatialCellWrapper> => entity.search({ minX, minY: minZ, maxX, maxY: maxZ });\n\n // TODO test this function\n function findCellsByActorBox(actor: TActor): ReadonlyArray<TSpatialCellWrapper> {\n const actorBox: Box3 = getBoundingBox(actor.model3d.getRawModel3d());\n return findCellsForBox({ minX: actorBox.min.x, minZ: actorBox.min.z, maxX: actorBox.max.x, maxZ: actorBox.max.z });\n }\n\n function findCellById(id: TSpatialCellId): TSpatialCellWrapper | undefined {\n return entity.all().filter((cell: TSpatialCellWrapper): boolean => cell.id === id)[0];\n }\n\n const destroySub$: Subscription = wrapper.destroy$.subscribe((): void => {\n // eslint-disable-next-line functional/immutable-data\n _debugOutlines.length = 0;\n // eslint-disable-next-line functional/immutable-data\n _debugOutlinesIds.length = 0;\n destroySub$.unsubscribe();\n\n update$.complete();\n getAllCells().forEach((cell: TSpatialCellWrapper): void => void cell.destroy$.next());\n entity.clear();\n });\n\n const _debugVisualizeCellsBoxList: Array<Mesh> = [];\n\n // this visualization is for debugging purposes only\n function _debugVisualizeCells(sceneW: TSceneWrapper, color: ColorRepresentation = '#00ff00', wireframe: boolean = true, height: number = 0.1): void {\n entity.all().forEach((cell: TSpatialCellWrapper): void => {\n const box: Mesh = createBoundingBox(cell.minX, cell.minY, cell.maxX, cell.maxY, color, wireframe, height);\n sceneW.entity.add(box);\n // eslint-disable-next-line functional/immutable-data\n _debugVisualizeCellsBoxList.push(box);\n });\n }\n\n function _removeDebugVisualizeCells(sceneW: TSceneWrapper): void {\n _debugVisualizeCellsBoxList.forEach((box: Mesh): void => {\n sceneW.entity.remove(box);\n box.geometry.dispose();\n });\n // eslint-disable-next-line functional/immutable-data\n _debugVisualizeCellsBoxList.length = 0;\n }\n\n // this highlight is for debugging purposes only (only adds outlines to scene, might not remove them afterward!!!).\n // Also doesn't represent actor's rotation, so the outline might not be accurate for rotated objects\n function _debugHighlightObjects(sceneW: TSceneWrapper, x: number, z: number, color: ColorRepresentation = '#0000ff'): void {\n _debugOutlines.forEach((outline: Line2): void => void sceneW.entity.remove(outline));\n _debugOutlines = [];\n _debugOutlinesIds.forEach((id: number): void => {\n const obj: Object3D | undefined = sceneW.entity.getObjectById(id);\n if (isDefined(obj)) sceneW.entity.remove(obj);\n });\n // eslint-disable-next-line functional/immutable-data\n _debugOutlinesIds.length = 0;\n\n const actorsList: ReadonlyArray<TActor> = getAllInCell(x, z);\n\n actorsList.forEach((actor: TActor): void => {\n const outline: Line2 = createOutline(actor, color, 0.1);\n sceneW.entity.add(outline);\n // eslint-disable-next-line functional/immutable-data\n _debugOutlines.push(outline);\n // eslint-disable-next-line functional/immutable-data\n _debugOutlinesIds.push(outline.id);\n });\n }\n\n // eslint-disable-next-line functional/immutable-data\n const result = Object.assign(wrapper, {\n entity,\n addActor,\n getAllCells,\n getAllInCell,\n getAllInCellByCellId,\n findCellsForPoint,\n findCellsForBox,\n findCellsByActorBox,\n findCellById,\n removeFromGrid,\n clearGrid,\n _debugVisualizeCells,\n _removeDebugVisualizeCells,\n _debugHighlightObjects,\n updateActorCell,\n getParams: (): TSpatialGridParams => params,\n update$: update$.asObservable(),\n serialize: (): TSpatialGridConfig => spatialGridEntityToConfig(result)\n });\n\n return result;\n}\n"],"names":["SpatialGridWrapper","params","entity","mapWidth","mapHeight","cellSize","centerX","centerZ","startX","Math","floor","startZ","grid","RBush","x","z","cellW","SpatialCellWrapper","minX","minZ","maxX","maxZ","insert","createEntity","_debugOutlines","_debugOutlinesIds","update$","Subject","wrapper","AbstractWrapper","WrapperType","SpatialGrid","getBoundingBox","mesh","box","Box3","setFromObject","addActor","actor","isNotDefined","spatial","getGrid","gridW","setGrid","registerActorToGrid","this","boundingBox","model3d","getRawModel3d","min","max","cells","search","minY","maxY","cell","findObject","id","addObject","next","setSpatialCells","getAllCells","all","getAllInCell","length","getObjects","flatMap","removeFromGrid","getSpatialCells","removeObject","resetSpatialCells","findCellsForBox","destroySub$","destroy$","subscribe","unsubscribe","complete","forEach","clear","_debugVisualizeCellsBoxList","result","Object","assign","getAllInCellByCellId","cellId","split","slice","map","Number","Vector3","getCoordsFromGridId","findCellsForPoint","findCellsByActorBox","actorBox","findCellById","filter","clearGrid","Error","_debugVisualizeCells","sceneW","color","wireframe","height","createBoundingBox","add","push","_removeDebugVisualizeCells","remove","geometry","dispose","_debugHighlightObjects","outline","obj","getObjectById","isDefined","createOutline","updateActorCell","call","getParams","asObservable","serialize","spatialGridEntityToConfig"],"mappings":"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"}
1
+ {"version":3,"file":"SpatialGridWrapper.js","sources":["../../../src/Spatial/Wrappers/SpatialGridWrapper.ts"],"sourcesContent":["import type { TAbstractWrapper } from '@hellpig/anarchy-engine/Abstract';\nimport { AbstractWrapper, WrapperType } from '@hellpig/anarchy-engine/Abstract';\nimport type { TActor } from '@hellpig/anarchy-engine/Actor';\nimport type { TSceneWrapper } from '@hellpig/anarchy-engine/Scene';\nimport { spatialGridEntityToConfig } from '@hellpig/anarchy-engine/Spatial/Adapters/EntityToConfig';\nimport type { TSpatialCellId, TSpatialCellParams, TSpatialCellWrapper, TSpatialGrid, TSpatialGridConfig, TSpatialGridParams, TSpatialGridWrapper } from '@hellpig/anarchy-engine/Spatial/Models';\nimport { createBoundingBox, createOutline } from '@hellpig/anarchy-engine/Spatial/Services/SpatialHelper';\nimport { SpatialCellWrapper } from '@hellpig/anarchy-engine/Spatial/Wrappers/SpatialCellWrapper';\nimport { isDefined, isNotDefined } from '@hellpig/anarchy-shared/Utils';\nimport RBush from 'rbush';\nimport type { Subscription } from 'rxjs';\nimport { Subject } from 'rxjs';\nimport type { ColorRepresentation, Group, Mesh, Object3D } from 'three';\nimport { Box3, Vector3 } from 'three';\nimport type { Line2 } from 'three/examples/jsm/lines/Line2';\n\nexport function SpatialGridWrapper(params: TSpatialGridParams): TSpatialGridWrapper {\n const entity: TSpatialGrid = createEntity(params);\n let _debugOutlines: Array<Line2> = [];\n const _debugOutlinesIds: Array<number> = [];\n const update$: Subject<TSpatialCellWrapper> = new Subject<TSpatialCellWrapper>();\n\n function createEntity({ mapWidth, mapHeight, cellSize, centerX, centerZ }: TSpatialGridParams): TSpatialGrid {\n const startX: number = centerX - Math.floor(mapWidth / cellSize / 2) * cellSize;\n const startZ: number = centerZ - Math.floor(mapHeight / cellSize / 2) * cellSize;\n\n const grid: TSpatialGrid = new RBush();\n\n // eslint-disable-next-line functional/no-loop-statements\n for (let x: number = 0; x < mapWidth; x += cellSize) {\n // eslint-disable-next-line functional/no-loop-statements\n for (let z: number = 0; z < mapHeight; z += cellSize) {\n const cell: TSpatialCellParams = { minX: startX + x, minZ: startZ + z, maxX: startX + x + cellSize, maxZ: startZ + z + cellSize, x, z };\n const cellW: TSpatialCellWrapper = SpatialCellWrapper(cell);\n grid.insert(cellW);\n }\n }\n\n return grid;\n }\n\n const wrapper: TAbstractWrapper<TSpatialGrid> = AbstractWrapper(entity, WrapperType.SpatialGrid, params);\n\n function getBoundingBox(mesh: Mesh | Group | Object3D): Box3 {\n const box: Box3 = new Box3();\n box.setFromObject(mesh);\n return box;\n }\n\n function registerActorToGrid(actor: TActor, gridW: TSpatialGridWrapper): void {\n actor.spatial.setGrid(gridW);\n }\n\n function addActor(this: TSpatialGridWrapper, actor: TActor): void | never {\n if (isNotDefined(actor.spatial.getGrid())) registerActorToGrid(actor, this);\n\n const boundingBox: Box3 = getBoundingBox(actor.model3d.getRawModel3d());\n const min: Vector3 = boundingBox.min;\n const max: Vector3 = boundingBox.max;\n\n const cells: ReadonlyArray<TSpatialCellWrapper> = entity.search({ minX: min.x, minY: min.z, maxX: max.x, maxY: max.z });\n // eslint-disable-next-line functional/no-loop-statements\n for (const cell of cells) {\n if (isNotDefined(cell.findObject(actor.id))) {\n cell.addObject(actor);\n update$.next(cell);\n }\n }\n actor.spatial.setSpatialCells(cells);\n }\n\n const getAllCells = (): ReadonlyArray<TSpatialCellWrapper> => entity.all();\n\n function getAllInCell(x: number, z: number): ReadonlyArray<TActor> {\n const cells: ReadonlyArray<TSpatialCellWrapper> = entity.search({ minX: x, minY: z, maxX: x, maxY: z });\n if (cells.length === 1) return cells[0].getObjects();\n if (cells.length > 1) return cells.flatMap((cell: TSpatialCellWrapper): ReadonlyArray<TActor> => cell.getObjects());\n return [];\n }\n\n const getCoordsFromGridId = (cellId: TSpatialCellId): Vector3 => {\n const [x, z] = cellId.split('_').slice(-2).map(Number);\n return new Vector3(x, 0, z);\n };\n\n function getAllInCellByCellId(cellId: TSpatialCellId): ReadonlyArray<TActor> {\n // const cells: ReadonlyArray<TSpatialCellWrapper> = entity.all().filter((cell) => cell.id === cellId);\n const { x, z } = getCoordsFromGridId(cellId);\n return getAllInCell(x, z);\n }\n\n function removeFromGrid(actor: TActor): void | never {\n const cells: ReadonlyArray<TSpatialCellWrapper> = actor.spatial.getSpatialCells();\n\n // eslint-disable-next-line functional/no-loop-statements\n for (const cell of cells) {\n cell.removeObject(actor);\n update$.next(cell);\n }\n\n actor.spatial.resetSpatialCells();\n }\n\n function clearGrid(): void {\n // TODO should be tested before usage\n throw new Error('SpatialGrid clearGrid not implemented, just a placeholder: test and fix before usage');\n // entity.clear();\n // getAllCells().forEach((cell: TSpatialCellWrapper): void => {\n // // eslint-disable-next-line functional/immutable-data\n // cell.version++;\n // update$.next(cell);\n // });\n }\n\n function updateActorCell(this: TSpatialGridWrapper, actor: TActor): void {\n removeFromGrid(actor);\n addActor.call(this, actor);\n }\n\n const findCellsForPoint = (x: number, z: number): ReadonlyArray<TSpatialCellWrapper> => entity.search({ minX: x, minY: z, maxX: x, maxY: z });\n\n const findCellsForBox = ({\n minX,\n minZ,\n maxX,\n maxZ\n }: Readonly<{\n minX: number;\n minZ: number;\n maxX: number;\n maxZ: number;\n }>): ReadonlyArray<TSpatialCellWrapper> => entity.search({ minX, minY: minZ, maxX, maxY: maxZ });\n\n // TODO test this function\n function findCellsByActorBox(actor: TActor): ReadonlyArray<TSpatialCellWrapper> {\n const actorBox: Box3 = getBoundingBox(actor.model3d.getRawModel3d());\n return findCellsForBox({ minX: actorBox.min.x, minZ: actorBox.min.z, maxX: actorBox.max.x, maxZ: actorBox.max.z });\n }\n\n function findCellById(id: TSpatialCellId): TSpatialCellWrapper | undefined {\n return entity.all().filter((cell: TSpatialCellWrapper): boolean => cell.id === id)[0];\n }\n\n const destroySub$: Subscription = wrapper.destroy$.subscribe((): void => {\n // eslint-disable-next-line functional/immutable-data\n _debugOutlines.length = 0;\n // eslint-disable-next-line functional/immutable-data\n _debugOutlinesIds.length = 0;\n destroySub$.unsubscribe();\n\n update$.complete();\n getAllCells().forEach((cell: TSpatialCellWrapper): void => void cell.destroy$.next());\n entity.clear();\n });\n\n const _debugVisualizeCellsBoxList: Array<Mesh> = [];\n\n // this visualization is for debugging purposes only\n function _debugVisualizeCells(sceneW: TSceneWrapper, color: ColorRepresentation = '#00ff00', wireframe: boolean = true, height: number = 0.1): void {\n entity.all().forEach((cell: TSpatialCellWrapper): void => {\n const box: Mesh = createBoundingBox(cell.minX, cell.minY, cell.maxX, cell.maxY, color, wireframe, height);\n sceneW.entity.add(box);\n // eslint-disable-next-line functional/immutable-data\n _debugVisualizeCellsBoxList.push(box);\n });\n }\n\n function _removeDebugVisualizeCells(sceneW: TSceneWrapper): void {\n _debugVisualizeCellsBoxList.forEach((box: Mesh): void => {\n sceneW.entity.remove(box);\n box.geometry.dispose();\n });\n // eslint-disable-next-line functional/immutable-data\n _debugVisualizeCellsBoxList.length = 0;\n }\n\n // this highlight is for debugging purposes only (only adds outlines to scene, might not remove them afterward!!!).\n // Also doesn't represent actor's rotation, so the outline might not be accurate for rotated objects\n function _debugHighlightObjects(sceneW: TSceneWrapper, x: number, z: number, color: ColorRepresentation = '#0000ff'): void {\n _debugOutlines.forEach((outline: Line2): void => void sceneW.entity.remove(outline));\n _debugOutlines = [];\n _debugOutlinesIds.forEach((id: number): void => {\n const obj: Object3D | undefined = sceneW.entity.getObjectById(id);\n if (isDefined(obj)) sceneW.entity.remove(obj);\n });\n // eslint-disable-next-line functional/immutable-data\n _debugOutlinesIds.length = 0;\n\n const actorsList: ReadonlyArray<TActor> = getAllInCell(x, z);\n\n actorsList.forEach((actor: TActor): void => {\n const outline: Line2 = createOutline(actor, color, 0.1);\n sceneW.entity.add(outline);\n // eslint-disable-next-line functional/immutable-data\n _debugOutlines.push(outline);\n // eslint-disable-next-line functional/immutable-data\n _debugOutlinesIds.push(outline.id);\n });\n }\n\n // eslint-disable-next-line functional/immutable-data\n const result = Object.assign(wrapper, {\n entity,\n addActor,\n getAllCells,\n getAllInCell,\n getAllInCellByCellId,\n findCellsForPoint,\n findCellsForBox,\n findCellsByActorBox,\n findCellById,\n removeFromGrid,\n clearGrid,\n _debugVisualizeCells,\n _removeDebugVisualizeCells,\n _debugHighlightObjects,\n updateActorCell,\n getParams: (): TSpatialGridParams => params,\n update$: update$.asObservable(),\n serialize: (): TSpatialGridConfig => spatialGridEntityToConfig(result)\n });\n\n return result;\n}\n"],"names":["SpatialGridWrapper","params","entity","mapWidth","mapHeight","cellSize","centerX","centerZ","startX","Math","floor","startZ","grid","RBush","x","z","cellW","SpatialCellWrapper","minX","minZ","maxX","maxZ","insert","createEntity","_debugOutlines","_debugOutlinesIds","update$","Subject","wrapper","AbstractWrapper","WrapperType","SpatialGrid","getBoundingBox","mesh","box","Box3","setFromObject","addActor","actor","isNotDefined","spatial","getGrid","gridW","setGrid","registerActorToGrid","this","boundingBox","model3d","getRawModel3d","min","max","cells","search","minY","maxY","cell","findObject","id","addObject","next","setSpatialCells","getAllCells","all","getAllInCell","length","getObjects","flatMap","removeFromGrid","getSpatialCells","removeObject","resetSpatialCells","findCellsForBox","destroySub$","destroy$","subscribe","unsubscribe","complete","forEach","clear","_debugVisualizeCellsBoxList","result","Object","assign","getAllInCellByCellId","cellId","split","slice","map","Number","Vector3","getCoordsFromGridId","findCellsForPoint","findCellsByActorBox","actorBox","findCellById","filter","clearGrid","Error","_debugVisualizeCells","sceneW","color","wireframe","height","createBoundingBox","add","push","_removeDebugVisualizeCells","remove","geometry","dispose","_debugHighlightObjects","outline","obj","getObjectById","isDefined","createOutline","updateActorCell","call","getParams","asObservable","serialize","spatialGridEntityToConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigToParams.js","sources":["../../../src/Text/Adapters/ConfigToParams.ts"],"sourcesContent":["import { kinematicConfigToParams } from '@Anarchy/Engine/Kinematic';\nimport type { TTextConfig, TTextParams, TTextServiceDependencies } from '@Anarchy/Engine/Text/Models';\nimport { object3dConfigToParams } from '@Anarchy/Engine/ThreeLib';\nimport { isDefined } from '@Anarchy/Shared/Utils';\nimport { Vector2 } from 'three';\n\nexport function textConfigToParams(config: TTextConfig, dependencies: TTextServiceDependencies): TTextParams {\n const { position, center, rotation, scale, layers, physicsBodyName, kinematic, ...rest } = config;\n\n let result: TTextParams = {\n ...rest,\n physicsBody: isDefined(physicsBodyName) ? dependencies.physicsBodyService.getRegistry().getByName(physicsBodyName) : undefined,\n ...object3dConfigToParams({ position, rotation, scale, layers }),\n kinematic: kinematic ? kinematicConfigToParams(kinematic) : undefined\n };\n\n if (isDefined(center)) result = { ...result, center: new Vector2(center.x, center.y) };\n\n return result;\n}\n"],"names":["textConfigToParams","config","dependencies","position","center","rotation","scale","layers","physicsBodyName","kinematic","rest","result","physicsBody","isDefined","physicsBodyService","getRegistry","getByName","object3dConfigToParams","kinematicConfigToParams","Vector2","x","y"],"mappings":"kQAMO,SAASA,mBAAmBC,OAAqBC,cACtD,MAAMC,SAAEA,SAAAC,OAAUA,OAAAC,SAAQA,SAAAC,MAAUA,MAAAC,OAAOA,uBAAQC,gBAAAC,UAAiBA,aAAcC,MAAST,OAE3F,IAAIU,OAAsB,IACrBD,KACHE,YAAaC,UAAUL,iBAAmBN,aAAaY,mBAAmBC,cAAcC,UAAUR,sBAAmB,KAClHS,uBAAuB,CAAEd,kBAAUE,kBAAUC,YAAOC,gBACvDE,UAAWA,UAAYS,wBAAwBT,gBAAa,GAK9D,OAFII,UAAUT,UAASO,OAAS,IAAKA,OAAQP,OAAQ,IAAIe,QAAQf,OAAOgB,EAAGhB,OAAOiB,KAE3EV,MACT"}
1
+ {"version":3,"file":"ConfigToParams.js","sources":["../../../src/Text/Adapters/ConfigToParams.ts"],"sourcesContent":["import { kinematicConfigToParams } from '@hellpig/anarchy-engine/Kinematic';\nimport type { TTextConfig, TTextParams, TTextServiceDependencies } from '@hellpig/anarchy-engine/Text/Models';\nimport { object3dConfigToParams } from '@hellpig/anarchy-engine/ThreeLib';\nimport { isDefined } from '@hellpig/anarchy-shared/Utils';\nimport { Vector2 } from 'three';\n\nexport function textConfigToParams(config: TTextConfig, dependencies: TTextServiceDependencies): TTextParams {\n const { position, center, rotation, scale, layers, physicsBodyName, kinematic, ...rest } = config;\n\n let result: TTextParams = {\n ...rest,\n physicsBody: isDefined(physicsBodyName) ? dependencies.physicsBodyService.getRegistry().getByName(physicsBodyName) : undefined,\n ...object3dConfigToParams({ position, rotation, scale, layers }),\n kinematic: kinematic ? kinematicConfigToParams(kinematic) : undefined\n };\n\n if (isDefined(center)) result = { ...result, center: new Vector2(center.x, center.y) };\n\n return result;\n}\n"],"names":["textConfigToParams","config","dependencies","position","center","rotation","scale","layers","physicsBodyName","kinematic","rest","result","physicsBody","isDefined","physicsBodyService","getRegistry","getByName","object3dConfigToParams","kinematicConfigToParams","Vector2","x","y"],"mappings":"kQAMO,SAASA,mBAAmBC,OAAqBC,cACtD,MAAMC,SAAEA,SAAAC,OAAUA,OAAAC,SAAQA,SAAAC,MAAUA,MAAAC,OAAOA,uBAAQC,gBAAAC,UAAiBA,aAAcC,MAAST,OAE3F,IAAIU,OAAsB,IACrBD,KACHE,YAAaC,UAAUL,iBAAmBN,aAAaY,mBAAmBC,cAAcC,UAAUR,sBAAmB,KAClHS,uBAAuB,CAAEd,kBAAUE,kBAAUC,YAAOC,gBACvDE,UAAWA,UAAYS,wBAAwBT,gBAAa,GAK9D,OAFII,UAAUT,UAASO,OAAS,IAAKA,OAAQP,OAAQ,IAAIe,QAAQf,OAAOgB,EAAGhB,OAAOiB,KAE3EV,MACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"EntityToConfig.js","sources":["../../../src/Text/Adapters/EntityToConfig.ts"],"sourcesContent":["import { extractSerializableRegistrableFields } from '@Anarchy/Engine/Mixins';\nimport type { TText2dWrapper, TText3dTextureWrapper, TTextAnyWrapper, TTextConfig, TTextCssProps } from '@Anarchy/Engine/Text/Models';\nimport { vector2ToXy } from '@Anarchy/Engine/Utils';\nimport { filterOutEmptyFields, isNotDefined, kebabToCamel } from '@Anarchy/Shared/Utils';\nimport type { Vector2 } from 'three';\n\nexport function textEntityToConfig(entity: TTextAnyWrapper): TTextConfig {\n const { drive } = entity;\n\n const center: Vector2 | undefined = (entity as TText2dWrapper).entity.center;\n\n return filterOutEmptyFields({\n text: entity.getText(),\n type: entity.type,\n cssProps: extractInlineStyles((entity as TText2dWrapper).getElement()) ?? (entity as TText3dTextureWrapper).getPropsAsCss(),\n elementType: (entity as TText2dWrapper).getElement()?.tagName,\n center: center ? vector2ToXy(center) : undefined,\n receiveShadow: entity.getReceiveShadow(),\n frustumCulled: entity.getFrustumCulled(),\n renderOrder: entity.getRenderOrder(),\n visible: entity.getVisible(),\n castShadow: entity.getCastShadow(),\n ...extractSerializableRegistrableFields(entity),\n ...drive.serialize()\n });\n}\n\nfunction extractInlineStyles(element: HTMLElement | undefined): TTextCssProps | undefined {\n if (isNotDefined(element)) return undefined;\n\n const result: Record<string, string> = {};\n // eslint-disable-next-line functional/no-loop-statements\n for (let i: number = 0; i < element.style.length; i++) {\n const prop: string = element.style[i];\n const propName: string = kebabToCamel(prop);\n // eslint-disable-next-line functional/immutable-data\n result[propName] = element.style.getPropertyValue(prop);\n }\n if (Object.keys(result).length === 0) return undefined;\n return filterOutEmptyFields(result);\n}\n"],"names":["textEntityToConfig","entity","drive","center","filterOutEmptyFields","text","getText","type","cssProps","extractInlineStyles","getElement","getPropsAsCss","elementType","tagName","vector2ToXy","receiveShadow","getReceiveShadow","frustumCulled","getFrustumCulled","renderOrder","getRenderOrder","visible","getVisible","castShadow","getCastShadow","extractSerializableRegistrableFields","serialize","element","isNotDefined","result","i","style","length","prop","kebabToCamel","getPropertyValue","Object","keys"],"mappings":"iaAMO,SAASA,mBAAmBC,QACjC,MAAMC,MAAEA,OAAUD,OAEZE,OAA+BF,OAA0BA,OAAOE,OAEtE,OAAOC,qBAAqB,CAC1BC,KAAMJ,OAAOK,UACbC,KAAMN,OAAOM,KACbC,SAAUC,oBAAqBR,OAA0BS,eAAkBT,OAAiCU,gBAC5GC,YAAcX,OAA0BS,cAAcG,QACtDV,OAAQA,OAASW,YAAYX,aAAU,EACvCY,cAAed,OAAOe,mBACtBC,cAAehB,OAAOiB,mBACtBC,YAAalB,OAAOmB,iBACpBC,QAASpB,OAAOqB,aAChBC,WAAYtB,OAAOuB,mBAChBC,qCAAqCxB,WACrCC,MAAMwB,aAEb,CAEA,SAASjB,oBAAoBkB,SAC3B,GAAIC,aAAaD,SAAU,OAE3B,MAAME,OAAiC,CAAA,EAEvC,IAAA,IAASC,EAAY,EAAGA,EAAIH,QAAQI,MAAMC,OAAQF,IAAK,CACrD,MAAMG,KAAeN,QAAQI,MAAMD,GAGnCD,OAFyBK,aAAaD,OAEnBN,QAAQI,MAAMI,iBAAiBF,KACpD,CACA,OAAmC,IAA/BG,OAAOC,KAAKR,QAAQG,OACjB5B,qBAAqByB,aAD5B,CAEF"}
1
+ {"version":3,"file":"EntityToConfig.js","sources":["../../../src/Text/Adapters/EntityToConfig.ts"],"sourcesContent":["import { extractSerializableRegistrableFields } from '@hellpig/anarchy-engine/Mixins';\nimport type { TText2dWrapper, TText3dTextureWrapper, TTextAnyWrapper, TTextConfig, TTextCssProps } from '@hellpig/anarchy-engine/Text/Models';\nimport { vector2ToXy } from '@hellpig/anarchy-engine/Utils';\nimport { filterOutEmptyFields, isNotDefined, kebabToCamel } from '@hellpig/anarchy-shared/Utils';\nimport type { Vector2 } from 'three';\n\nexport function textEntityToConfig(entity: TTextAnyWrapper): TTextConfig {\n const { drive } = entity;\n\n const center: Vector2 | undefined = (entity as TText2dWrapper).entity.center;\n\n return filterOutEmptyFields({\n text: entity.getText(),\n type: entity.type,\n cssProps: extractInlineStyles((entity as TText2dWrapper).getElement()) ?? (entity as TText3dTextureWrapper).getPropsAsCss(),\n elementType: (entity as TText2dWrapper).getElement()?.tagName,\n center: center ? vector2ToXy(center) : undefined,\n receiveShadow: entity.getReceiveShadow(),\n frustumCulled: entity.getFrustumCulled(),\n renderOrder: entity.getRenderOrder(),\n visible: entity.getVisible(),\n castShadow: entity.getCastShadow(),\n ...extractSerializableRegistrableFields(entity),\n ...drive.serialize()\n });\n}\n\nfunction extractInlineStyles(element: HTMLElement | undefined): TTextCssProps | undefined {\n if (isNotDefined(element)) return undefined;\n\n const result: Record<string, string> = {};\n // eslint-disable-next-line functional/no-loop-statements\n for (let i: number = 0; i < element.style.length; i++) {\n const prop: string = element.style[i];\n const propName: string = kebabToCamel(prop);\n // eslint-disable-next-line functional/immutable-data\n result[propName] = element.style.getPropertyValue(prop);\n }\n if (Object.keys(result).length === 0) return undefined;\n return filterOutEmptyFields(result);\n}\n"],"names":["textEntityToConfig","entity","drive","center","filterOutEmptyFields","text","getText","type","cssProps","extractInlineStyles","getElement","getPropsAsCss","elementType","tagName","vector2ToXy","receiveShadow","getReceiveShadow","frustumCulled","getFrustumCulled","renderOrder","getRenderOrder","visible","getVisible","castShadow","getCastShadow","extractSerializableRegistrableFields","serialize","element","isNotDefined","result","i","style","length","prop","kebabToCamel","getPropertyValue","Object","keys"],"mappings":"iaAMO,SAASA,mBAAmBC,QACjC,MAAMC,MAAEA,OAAUD,OAEZE,OAA+BF,OAA0BA,OAAOE,OAEtE,OAAOC,qBAAqB,CAC1BC,KAAMJ,OAAOK,UACbC,KAAMN,OAAOM,KACbC,SAAUC,oBAAqBR,OAA0BS,eAAkBT,OAAiCU,gBAC5GC,YAAcX,OAA0BS,cAAcG,QACtDV,OAAQA,OAASW,YAAYX,aAAU,EACvCY,cAAed,OAAOe,mBACtBC,cAAehB,OAAOiB,mBACtBC,YAAalB,OAAOmB,iBACpBC,QAASpB,OAAOqB,aAChBC,WAAYtB,OAAOuB,mBAChBC,qCAAqCxB,WACrCC,MAAMwB,aAEb,CAEA,SAASjB,oBAAoBkB,SAC3B,GAAIC,aAAaD,SAAU,OAE3B,MAAME,OAAiC,CAAA,EAEvC,IAAA,IAASC,EAAY,EAAGA,EAAIH,QAAQI,MAAMC,OAAQF,IAAK,CACrD,MAAMG,KAAeN,QAAQI,MAAMD,GAGnCD,OAFyBK,aAAaD,OAEnBN,QAAQI,MAAMI,iBAAiBF,KACpD,CACA,OAAmC,IAA/BG,OAAOC,KAAKR,QAAQG,OACjB5B,qBAAqByB,aAD5B,CAEF"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextFactory.js","sources":["../../../src/Text/Factories/TextFactory.ts"],"sourcesContent":["import type { TReactiveFactory } from '@Anarchy/Engine/Abstract';\nimport { FactoryType, ReactiveFactory } from '@Anarchy/Engine/Abstract';\nimport { textConfigToParams } from '@Anarchy/Engine/Text/Adapters';\nimport type { TTextAnyWrapper, TTextFactory, TTextParams, TTextServiceDependencies } from '@Anarchy/Engine/Text/Models';\nimport { buildTextWrapper } from '@Anarchy/Engine/Text/Wrappers';\n\nexport function TextFactory(): TTextFactory {\n const factory: TReactiveFactory<TTextAnyWrapper, TTextParams, TTextServiceDependencies> = ReactiveFactory(FactoryType.Text, buildTextWrapper);\n // eslint-disable-next-line functional/immutable-data\n return Object.assign(factory, { configToParams: textConfigToParams });\n}\n"],"names":["TextFactory","factory","ReactiveFactory","FactoryType","Text","buildTextWrapper","Object","assign","configToParams","textConfigToParams"],"mappings":"wQAMO,SAASA,cACd,MAAMC,QAAoFC,gBAAgBC,YAAYC,KAAMC,kBAE5H,OAAOC,OAAOC,OAAON,QAAS,CAAEO,eAAgBC,oBAClD"}
1
+ {"version":3,"file":"TextFactory.js","sources":["../../../src/Text/Factories/TextFactory.ts"],"sourcesContent":["import type { TReactiveFactory } from '@hellpig/anarchy-engine/Abstract';\nimport { FactoryType, ReactiveFactory } from '@hellpig/anarchy-engine/Abstract';\nimport { textConfigToParams } from '@hellpig/anarchy-engine/Text/Adapters';\nimport type { TTextAnyWrapper, TTextFactory, TTextParams, TTextServiceDependencies } from '@hellpig/anarchy-engine/Text/Models';\nimport { buildTextWrapper } from '@hellpig/anarchy-engine/Text/Wrappers';\n\nexport function TextFactory(): TTextFactory {\n const factory: TReactiveFactory<TTextAnyWrapper, TTextParams, TTextServiceDependencies> = ReactiveFactory(FactoryType.Text, buildTextWrapper);\n // eslint-disable-next-line functional/immutable-data\n return Object.assign(factory, { configToParams: textConfigToParams });\n}\n"],"names":["TextFactory","factory","ReactiveFactory","FactoryType","Text","buildTextWrapper","Object","assign","configToParams","textConfigToParams"],"mappings":"wQAMO,SAASA,cACd,MAAMC,QAAoFC,gBAAgBC,YAAYC,KAAMC,kBAE5H,OAAOC,OAAOC,OAAON,QAAS,CAAEO,eAAgBC,oBAClD"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextLoopEffect.js","sources":["../../../src/Text/Loop/TextLoopEffect.ts"],"sourcesContent":["import type { TAnyCameraWrapper, TCameraService } from '@Anarchy/Engine/Camera';\nimport type { TMilliseconds } from '@Anarchy/Engine/Math';\nimport type { TSceneWrapper } from '@Anarchy/Engine/Scene';\nimport type { TText2dRegistry, TText2dRenderer, TText3dRegistry, TText3dRenderer, TTextLoop } from '@Anarchy/Engine/Text/Models';\nimport { isNotDefined } from '@Anarchy/Shared/Utils';\nimport type { BehaviorSubject, Subscription } from 'rxjs';\nimport { withLatestFrom } from 'rxjs';\n\nexport function textLoopEffect(\n loop: TTextLoop,\n text2dRegistry: TText2dRegistry,\n text3dRegistry: TText3dRegistry,\n text2dRenderer$: BehaviorSubject<TText2dRenderer | undefined>,\n text3dRenderer$: BehaviorSubject<TText3dRenderer | undefined>,\n scene: TSceneWrapper,\n cameraService: TCameraService\n): Subscription | never {\n return loop.tick$\n .pipe(withLatestFrom(cameraService.active$, text2dRenderer$, text3dRenderer$))\n .subscribe(([, activeCameraW, text2dRenderer, text3dRenderer]: [TMilliseconds, TAnyCameraWrapper | undefined, TText2dRenderer | undefined, TText3dRenderer | undefined]): void | never => {\n if (isNotDefined(activeCameraW)) return;\n\n if (!text2dRegistry?.isEmpty()) text2dRenderer?.renderer.render(scene.entity, activeCameraW.entity);\n if (!text3dRegistry?.isEmpty()) text3dRenderer?.renderer.render(scene.entity, activeCameraW.entity);\n });\n}\n"],"names":["textLoopEffect","loop","text2dRegistry","text3dRegistry","text2dRenderer$","text3dRenderer$","scene","cameraService","tick$","pipe","withLatestFrom","active$","subscribe","activeCameraW","text2dRenderer","text3dRenderer","isNotDefined","isEmpty","renderer","render","entity"],"mappings":"mLAQO,SAASA,eACdC,KACAC,eACAC,eACAC,gBACAC,gBACAC,MACAC,eAEA,OAAON,KAAKO,MACTC,KAAKC,eAAeH,cAAcI,QAASP,gBAAiBC,kBAC5DO,UAAU,EAAC,CAAGC,cAAeC,eAAgBC,mBACxCC,aAAaH,iBAEZX,gBAAgBe,WAAWH,gBAAgBI,SAASC,OAAOb,MAAMc,OAAQP,cAAcO,QACvFjB,gBAAgBc,WAAWF,gBAAgBG,SAASC,OAAOb,MAAMc,OAAQP,cAAcO,UAElG"}
1
+ {"version":3,"file":"TextLoopEffect.js","sources":["../../../src/Text/Loop/TextLoopEffect.ts"],"sourcesContent":["import type { TAnyCameraWrapper, TCameraService } from '@hellpig/anarchy-engine/Camera';\nimport type { TMilliseconds } from '@hellpig/anarchy-engine/Math';\nimport type { TSceneWrapper } from '@hellpig/anarchy-engine/Scene';\nimport type { TText2dRegistry, TText2dRenderer, TText3dRegistry, TText3dRenderer, TTextLoop } from '@hellpig/anarchy-engine/Text/Models';\nimport { isNotDefined } from '@hellpig/anarchy-shared/Utils';\nimport type { BehaviorSubject, Subscription } from 'rxjs';\nimport { withLatestFrom } from 'rxjs';\n\nexport function textLoopEffect(\n loop: TTextLoop,\n text2dRegistry: TText2dRegistry,\n text3dRegistry: TText3dRegistry,\n text2dRenderer$: BehaviorSubject<TText2dRenderer | undefined>,\n text3dRenderer$: BehaviorSubject<TText3dRenderer | undefined>,\n scene: TSceneWrapper,\n cameraService: TCameraService\n): Subscription | never {\n return loop.tick$\n .pipe(withLatestFrom(cameraService.active$, text2dRenderer$, text3dRenderer$))\n .subscribe(([, activeCameraW, text2dRenderer, text3dRenderer]: [TMilliseconds, TAnyCameraWrapper | undefined, TText2dRenderer | undefined, TText3dRenderer | undefined]): void | never => {\n if (isNotDefined(activeCameraW)) return;\n\n if (!text2dRegistry?.isEmpty()) text2dRenderer?.renderer.render(scene.entity, activeCameraW.entity);\n if (!text3dRegistry?.isEmpty()) text3dRenderer?.renderer.render(scene.entity, activeCameraW.entity);\n });\n}\n"],"names":["textLoopEffect","loop","text2dRegistry","text3dRegistry","text2dRenderer$","text3dRenderer$","scene","cameraService","tick$","pipe","withLatestFrom","active$","subscribe","activeCameraW","text2dRenderer","text3dRenderer","isNotDefined","isEmpty","renderer","render","entity"],"mappings":"mLAQO,SAASA,eACdC,KACAC,eACAC,eACAC,gBACAC,gBACAC,MACAC,eAEA,OAAON,KAAKO,MACTC,KAAKC,eAAeH,cAAcI,QAASP,gBAAiBC,kBAC5DO,UAAU,EAAC,CAAGC,cAAeC,eAAgBC,mBACxCC,aAAaH,iBAEZX,gBAAgBe,WAAWH,gBAAgBI,SAASC,OAAOb,MAAMc,OAAQP,cAAcO,QACvFjB,gBAAgBc,WAAWF,gBAAgBG,SAASC,OAAOb,MAAMc,OAAQP,cAAcO,UAElG"}
@@ -1,3 +1,3 @@
1
- import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer';
1
+ import { CSS2DRenderer } from '../../../../../node_modules/@types/three/examples/jsm/renderers/CSS2DRenderer';
2
2
  import { TTextRenderer } from './TTextRenderer';
3
3
  export type TText2dRenderer = TTextRenderer<CSS2DRenderer>;