@dcl/ecs 7.0.0-3532389879.commit-c89c80c → 7.0.0-3568547351.commit-5420eac

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 (212) hide show
  1. package/README.md +2 -3
  2. package/dist/components/extended/Animator.d.ts +49 -0
  3. package/dist/components/extended/Animator.js +58 -0
  4. package/dist/components/extended/Material.d.ts +42 -0
  5. package/dist/components/extended/Material.js +42 -0
  6. package/dist/components/extended/MeshCollider.d.ts +42 -0
  7. package/dist/components/extended/MeshCollider.js +41 -0
  8. package/dist/components/extended/MeshRenderer.d.ts +40 -0
  9. package/dist/components/extended/MeshRenderer.js +27 -0
  10. package/dist/components/generated/Animator.gen.d.ts +8 -0
  11. package/dist/components/generated/Animator.gen.js +19 -0
  12. package/dist/components/generated/AudioSource.gen.d.ts +8 -0
  13. package/dist/components/generated/AudioSource.gen.js +19 -0
  14. package/dist/components/generated/AudioStream.gen.d.ts +8 -0
  15. package/dist/components/generated/AudioStream.gen.js +19 -0
  16. package/dist/components/generated/AvatarAttach.gen.d.ts +8 -0
  17. package/dist/components/generated/AvatarAttach.gen.js +19 -0
  18. package/dist/components/generated/AvatarModifierArea.gen.d.ts +8 -0
  19. package/dist/components/generated/AvatarModifierArea.gen.js +19 -0
  20. package/dist/components/generated/AvatarShape.gen.d.ts +8 -0
  21. package/dist/components/generated/AvatarShape.gen.js +19 -0
  22. package/dist/components/generated/Billboard.gen.d.ts +8 -0
  23. package/dist/components/generated/Billboard.gen.js +19 -0
  24. package/dist/components/generated/CameraMode.gen.d.ts +8 -0
  25. package/dist/components/generated/CameraMode.gen.js +19 -0
  26. package/dist/components/generated/CameraModeArea.gen.d.ts +8 -0
  27. package/dist/components/generated/CameraModeArea.gen.js +19 -0
  28. package/dist/components/generated/GltfContainer.gen.d.ts +8 -0
  29. package/dist/components/generated/GltfContainer.gen.js +19 -0
  30. package/dist/components/generated/Material.gen.d.ts +8 -0
  31. package/dist/components/generated/Material.gen.js +19 -0
  32. package/dist/components/generated/MeshCollider.gen.d.ts +8 -0
  33. package/dist/components/generated/MeshCollider.gen.js +19 -0
  34. package/dist/components/generated/MeshRenderer.gen.d.ts +8 -0
  35. package/dist/components/generated/MeshRenderer.gen.js +19 -0
  36. package/dist/components/generated/NftShape.gen.d.ts +8 -0
  37. package/dist/components/generated/NftShape.gen.js +19 -0
  38. package/dist/components/generated/PointerEventsResult.gen.d.ts +8 -0
  39. package/dist/components/generated/PointerEventsResult.gen.js +19 -0
  40. package/dist/components/generated/PointerHoverFeedback.gen.d.ts +8 -0
  41. package/dist/components/generated/PointerHoverFeedback.gen.js +19 -0
  42. package/dist/components/generated/PointerLock.gen.d.ts +8 -0
  43. package/dist/components/generated/PointerLock.gen.js +19 -0
  44. package/dist/components/generated/Raycast.gen.d.ts +8 -0
  45. package/dist/components/generated/Raycast.gen.js +19 -0
  46. package/dist/components/generated/RaycastResult.gen.d.ts +8 -0
  47. package/dist/components/generated/RaycastResult.gen.js +19 -0
  48. package/dist/components/generated/TextShape.gen.d.ts +8 -0
  49. package/dist/components/generated/TextShape.gen.js +19 -0
  50. package/dist/components/generated/UiBackground.gen.d.ts +8 -0
  51. package/dist/components/generated/UiBackground.gen.js +19 -0
  52. package/dist/components/generated/UiText.gen.d.ts +8 -0
  53. package/dist/components/generated/UiText.gen.js +19 -0
  54. package/dist/components/generated/UiTransform.gen.d.ts +8 -0
  55. package/dist/components/generated/UiTransform.gen.js +19 -0
  56. package/dist/components/generated/VisibilityComponent.gen.d.ts +8 -0
  57. package/dist/components/generated/VisibilityComponent.gen.js +19 -0
  58. package/dist/components/generated/global.gen.d.ts +42 -0
  59. package/dist/components/generated/global.gen.js +23 -0
  60. package/dist/components/generated/ids.gen.d.ts +28 -0
  61. package/dist/components/generated/ids.gen.js +29 -0
  62. package/dist/components/generated/index.gen.d.ts +99 -0
  63. package/dist/components/generated/index.gen.js +96 -0
  64. package/dist/components/generated/pb/decentraland/common/colors.gen.d.ts +26 -0
  65. package/dist/components/generated/pb/decentraland/common/colors.gen.js +95 -0
  66. package/dist/components/generated/pb/decentraland/common/texture.gen.d.ts +56 -0
  67. package/dist/components/generated/pb/decentraland/common/texture.gen.js +139 -0
  68. package/dist/components/generated/pb/decentraland/common/vectors.gen.d.ts +36 -0
  69. package/dist/components/generated/pb/decentraland/common/vectors.gen.js +126 -0
  70. package/dist/components/generated/pb/decentraland/sdk/components/animator.gen.d.ts +30 -0
  71. package/dist/components/generated/pb/decentraland/sdk/components/animator.gen.js +109 -0
  72. package/dist/components/generated/pb/decentraland/sdk/components/audio_source.gen.d.ts +17 -0
  73. package/dist/components/generated/pb/decentraland/sdk/components/audio_source.gen.js +58 -0
  74. package/dist/components/generated/pb/decentraland/sdk/components/audio_stream.gen.d.ts +14 -0
  75. package/dist/components/generated/pb/decentraland/sdk/components/audio_stream.gen.js +46 -0
  76. package/dist/components/generated/pb/decentraland/sdk/components/avatar_attach.gen.d.ts +18 -0
  77. package/dist/components/generated/pb/decentraland/sdk/components/avatar_attach.gen.js +47 -0
  78. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +18 -0
  79. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +62 -0
  80. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +38 -0
  81. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +129 -0
  82. package/dist/components/generated/pb/decentraland/sdk/components/billboard.gen.d.ts +18 -0
  83. package/dist/components/generated/pb/decentraland/sdk/components/billboard.gen.js +45 -0
  84. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode.gen.d.ts +12 -0
  85. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode.gen.js +33 -0
  86. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +14 -0
  87. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +40 -0
  88. package/dist/components/generated/pb/decentraland/sdk/components/common/camera_type.gen.d.ts +4 -0
  89. package/dist/components/generated/pb/decentraland/sdk/components/common/camera_type.gen.js +7 -0
  90. package/dist/components/generated/pb/decentraland/sdk/components/common/id.gen.d.ts +1 -0
  91. package/dist/components/generated/pb/decentraland/sdk/components/common/id.gen.js +3 -0
  92. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +16 -0
  93. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +19 -0
  94. package/dist/components/generated/pb/decentraland/sdk/components/common/texts.gen.d.ts +15 -0
  95. package/dist/components/generated/pb/decentraland/sdk/components/common/texts.gen.js +19 -0
  96. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container.gen.d.ts +12 -0
  97. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container.gen.js +34 -0
  98. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +82 -0
  99. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.js +231 -0
  100. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +70 -0
  101. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +176 -0
  102. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +65 -0
  103. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +196 -0
  104. package/dist/components/generated/pb/decentraland/sdk/components/nft_shape.gen.d.ts +41 -0
  105. package/dist/components/generated/pb/decentraland/sdk/components/nft_shape.gen.js +73 -0
  106. package/dist/components/generated/pb/decentraland/sdk/components/pointer_events_result.gen.d.ts +34 -0
  107. package/dist/components/generated/pb/decentraland/sdk/components/pointer_events_result.gen.js +89 -0
  108. package/dist/components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen.d.ts +46 -0
  109. package/dist/components/generated/pb/decentraland/sdk/components/pointer_hover_feedback.gen.js +126 -0
  110. package/dist/components/generated/pb/decentraland/sdk/components/pointer_lock.gen.d.ts +11 -0
  111. package/dist/components/generated/pb/decentraland/sdk/components/pointer_lock.gen.js +34 -0
  112. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +19 -0
  113. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.js +58 -0
  114. package/dist/components/generated/pb/decentraland/sdk/components/raycast_result.gen.d.ts +32 -0
  115. package/dist/components/generated/pb/decentraland/sdk/components/raycast_result.gen.js +150 -0
  116. package/dist/components/generated/pb/decentraland/sdk/components/text_shape.gen.d.ts +41 -0
  117. package/dist/components/generated/pb/decentraland/sdk/components/text_shape.gen.js +176 -0
  118. package/dist/components/generated/pb/decentraland/sdk/components/ui_background.gen.d.ts +13 -0
  119. package/dist/components/generated/pb/decentraland/sdk/components/ui_background.gen.js +35 -0
  120. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +21 -0
  121. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +59 -0
  122. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +149 -0
  123. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +454 -0
  124. package/dist/components/generated/pb/decentraland/sdk/components/visibility_component.gen.d.ts +12 -0
  125. package/dist/components/generated/pb/decentraland/sdk/components/visibility_component.gen.js +34 -0
  126. package/dist/components/generated/pb/google/protobuf/descriptor.gen.d.ts +378 -0
  127. package/dist/components/generated/pb/google/protobuf/descriptor.gen.js +1476 -0
  128. package/dist/components/generated/types.gen.d.ts +6 -0
  129. package/dist/components/generated/types.gen.js +8 -0
  130. package/dist/components/index.d.ts +15 -0
  131. package/dist/components/index.js +16 -0
  132. package/dist/components/legacy/Transform.d.ts +27 -0
  133. package/dist/components/legacy/Transform.js +55 -0
  134. package/dist/components/types.d.ts +4 -0
  135. package/dist/components/types.js +1 -0
  136. package/dist/engine/component.d.ts +72 -0
  137. package/dist/engine/component.js +130 -0
  138. package/dist/engine/entity-utils.d.ts +18 -0
  139. package/dist/engine/entity-utils.js +34 -0
  140. package/dist/engine/entity.d.ts +17 -0
  141. package/dist/engine/entity.js +55 -0
  142. package/dist/engine/index.d.ts +12 -0
  143. package/dist/engine/index.js +172 -0
  144. package/dist/engine/input.d.ts +36 -0
  145. package/dist/engine/input.js +156 -0
  146. package/dist/engine/readonly.d.ts +29 -0
  147. package/dist/engine/readonly.js +6 -0
  148. package/dist/engine/systems.d.ts +16 -0
  149. package/dist/engine/systems.js +44 -0
  150. package/dist/engine/types.d.ts +148 -0
  151. package/dist/engine/types.js +1 -0
  152. package/dist/index.d.ts +16 -4679
  153. package/dist/index.js +24 -15202
  154. package/dist/runtime/initialization/index.d.ts +21 -0
  155. package/dist/runtime/initialization/index.js +20 -0
  156. package/dist/runtime/invariant.d.ts +1 -0
  157. package/dist/runtime/invariant.js +8 -0
  158. package/dist/runtime/types.d.ts +22 -0
  159. package/dist/runtime/types.js +19 -0
  160. package/dist/schemas/Array.d.ts +5 -0
  161. package/dist/schemas/Array.js +24 -0
  162. package/dist/schemas/ISchema.d.ts +9 -0
  163. package/dist/schemas/ISchema.js +1 -0
  164. package/dist/schemas/Map.d.ts +19 -0
  165. package/dist/schemas/Map.js +31 -0
  166. package/dist/schemas/Optional.d.ts +5 -0
  167. package/dist/schemas/Optional.js +25 -0
  168. package/dist/schemas/basic/Boolean.d.ts +5 -0
  169. package/dist/schemas/basic/Boolean.js +14 -0
  170. package/dist/schemas/basic/Enum.d.ts +5 -0
  171. package/dist/schemas/basic/Enum.js +16 -0
  172. package/dist/schemas/basic/Float.d.ts +9 -0
  173. package/dist/schemas/basic/Float.js +28 -0
  174. package/dist/schemas/basic/Integer.d.ts +17 -0
  175. package/dist/schemas/basic/Integer.js +56 -0
  176. package/dist/schemas/basic/String.d.ts +9 -0
  177. package/dist/schemas/basic/String.js +18 -0
  178. package/dist/schemas/custom/Color3.d.ts +13 -0
  179. package/dist/schemas/custom/Color3.js +20 -0
  180. package/dist/schemas/custom/Color4.d.ts +14 -0
  181. package/dist/schemas/custom/Color4.js +22 -0
  182. package/dist/schemas/custom/Entity.d.ts +6 -0
  183. package/dist/schemas/custom/Entity.js +14 -0
  184. package/dist/schemas/custom/Quaternion.d.ts +14 -0
  185. package/dist/schemas/custom/Quaternion.js +22 -0
  186. package/dist/schemas/custom/Vector3.d.ts +13 -0
  187. package/dist/schemas/custom/Vector3.js +20 -0
  188. package/dist/schemas/index.d.ts +42 -0
  189. package/dist/schemas/index.js +37 -0
  190. package/dist/schemas/typing.d.ts +15 -0
  191. package/dist/schemas/typing.js +1 -0
  192. package/dist/serialization/ByteBuffer/index.d.ts +140 -0
  193. package/dist/serialization/ByteBuffer/index.js +244 -0
  194. package/dist/serialization/crdt/componentOperation.d.ts +31 -0
  195. package/dist/serialization/crdt/componentOperation.js +47 -0
  196. package/dist/serialization/wireMessage.d.ts +39 -0
  197. package/dist/serialization/wireMessage.js +52 -0
  198. package/dist/systems/async-task.d.ts +5 -0
  199. package/dist/systems/async-task.js +28 -0
  200. package/dist/systems/crdt/index.d.ts +8 -0
  201. package/dist/systems/crdt/index.js +169 -0
  202. package/dist/systems/crdt/types.d.ts +18 -0
  203. package/dist/systems/crdt/types.js +1 -0
  204. package/dist/systems/crdt/utils.d.ts +9 -0
  205. package/dist/systems/crdt/utils.js +11 -0
  206. package/dist/systems/cyclicParentingChecker.d.ts +17 -0
  207. package/dist/systems/cyclicParentingChecker.js +33 -0
  208. package/dist/systems/events.d.ts +56 -0
  209. package/dist/systems/events.js +145 -0
  210. package/package.json +9 -14
  211. package/dist/index.min.js +0 -1
  212. package/dist/index.min.js.map +0 -1
@@ -0,0 +1,6 @@
1
+ export type { Position as PBPosition, Vector2 as PBVector2, Vector3 as PBVector3 } from './pb/decentraland/common/vectors.gen';
2
+ export type { Color3 as PBColor3, Color4 as PBColor4 } from './pb/decentraland/common/colors.gen';
3
+ export * from './pb/decentraland/sdk/components/common/camera_type.gen';
4
+ export * from './pb/decentraland/sdk/components/common/input_action.gen';
5
+ export * from './pb/decentraland/sdk/components/common/texts.gen';
6
+ export * from './pb/decentraland/common/texture.gen';
@@ -0,0 +1,8 @@
1
+ export * from './pb/decentraland/sdk/components/common/camera_type.gen';
2
+ // export { PbCameraType }
3
+ export * from './pb/decentraland/sdk/components/common/input_action.gen';
4
+ // export { PbInputAction }
5
+ export * from './pb/decentraland/sdk/components/common/texts.gen';
6
+ // export { PbTexts }
7
+ export * from './pb/decentraland/common/texture.gen';
8
+ // export { PbTexture }
@@ -0,0 +1,15 @@
1
+ import { ISchema } from '../engine';
2
+ import { ComponentGetter } from './generated/index.gen';
3
+ export * from './generated/index.gen';
4
+ import { TransformComponent } from './legacy/Transform';
5
+ import { AnimatorComponentDefinitionExtended } from './extended/Animator';
6
+ import { MeshColliderComponentDefinitionExtended } from './extended/MeshCollider';
7
+ import { MeshRendererComponentDefinitionExtended } from './extended/MeshRenderer';
8
+ import { MaterialComponentDefinitionExtended } from './extended/Material';
9
+ import { ComponentDefinition } from '../engine/component';
10
+ export { ISchema, ComponentDefinition };
11
+ export declare const Transform: ComponentGetter<TransformComponent>;
12
+ export declare const Material: ComponentGetter<MaterialComponentDefinitionExtended>;
13
+ export declare const Animator: ComponentGetter<AnimatorComponentDefinitionExtended>;
14
+ export declare const MeshRenderer: ComponentGetter<MeshRendererComponentDefinitionExtended>;
15
+ export declare const MeshCollider: ComponentGetter<MeshColliderComponentDefinitionExtended>;
@@ -0,0 +1,16 @@
1
+ export * from './generated/index.gen';
2
+ import { defineTransformComponent } from './legacy/Transform';
3
+ import { defineAnimatorComponent } from './extended/Animator';
4
+ import { defineMeshColliderComponent } from './extended/MeshCollider';
5
+ import { defineMeshRendererComponent } from './extended/MeshRenderer';
6
+ import { defineMaterialComponent } from './extended/Material';
7
+ /*#__PURE__*/
8
+ export const Transform = (engine) => defineTransformComponent(engine);
9
+ /*#__PURE__*/
10
+ export const Material = (engine) => defineMaterialComponent(engine);
11
+ /*#__PURE__*/
12
+ export const Animator = (engine) => defineAnimatorComponent(engine);
13
+ /*#__PURE__*/
14
+ export const MeshRenderer = (engine) => defineMeshRendererComponent(engine);
15
+ /*#__PURE__*/
16
+ export const MeshCollider = (engine) => defineMeshColliderComponent(engine);
@@ -0,0 +1,27 @@
1
+ import type { ISchema } from '../../schemas/ISchema';
2
+ import { Entity } from '../../engine/entity';
3
+ import { ComponentDefinition, IEngine } from '../../engine';
4
+ export declare type TransformComponent = ComponentDefinition<ISchema<TransformType>, Partial<TransformType>>;
5
+ /**
6
+ * @public
7
+ */
8
+ export declare type TransformType = {
9
+ position: {
10
+ x: number;
11
+ y: number;
12
+ z: number;
13
+ };
14
+ rotation: {
15
+ x: number;
16
+ y: number;
17
+ z: number;
18
+ w: number;
19
+ };
20
+ scale: {
21
+ x: number;
22
+ y: number;
23
+ z: number;
24
+ };
25
+ parent?: Entity;
26
+ };
27
+ export declare function defineTransformComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): ComponentDefinition<ISchema<TransformType>, Partial<TransformType>>;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ export const COMPONENT_ID = 1;
5
+ /** @internal */
6
+ export const TRANSFORM_LENGTH = 44;
7
+ /** @internal */
8
+ export const TransformSchema = {
9
+ serialize(value, builder) {
10
+ const ptr = builder.incrementWriteOffset(TRANSFORM_LENGTH);
11
+ builder.setFloat32(ptr, value.position.x);
12
+ builder.setFloat32(ptr + 4, value.position.y);
13
+ builder.setFloat32(ptr + 8, value.position.z);
14
+ builder.setFloat32(ptr + 12, value.rotation.x);
15
+ builder.setFloat32(ptr + 16, value.rotation.y);
16
+ builder.setFloat32(ptr + 20, value.rotation.z);
17
+ builder.setFloat32(ptr + 24, value.rotation.w);
18
+ builder.setFloat32(ptr + 28, value.scale.x);
19
+ builder.setFloat32(ptr + 32, value.scale.y);
20
+ builder.setFloat32(ptr + 36, value.scale.z);
21
+ builder.setUint32(ptr + 40, value.parent || 0);
22
+ },
23
+ deserialize(reader) {
24
+ const ptr = reader.incrementReadOffset(TRANSFORM_LENGTH);
25
+ return {
26
+ position: {
27
+ x: reader.getFloat32(ptr),
28
+ y: reader.getFloat32(ptr + 4),
29
+ z: reader.getFloat32(ptr + 8)
30
+ },
31
+ rotation: {
32
+ x: reader.getFloat32(ptr + 12),
33
+ y: reader.getFloat32(ptr + 16),
34
+ z: reader.getFloat32(ptr + 20),
35
+ w: reader.getFloat32(ptr + 24)
36
+ },
37
+ scale: {
38
+ x: reader.getFloat32(ptr + 28),
39
+ y: reader.getFloat32(ptr + 32),
40
+ z: reader.getFloat32(ptr + 36)
41
+ },
42
+ parent: reader.getUint32(ptr + 40)
43
+ };
44
+ },
45
+ create() {
46
+ return {
47
+ position: { x: 0, y: 0, z: 0 },
48
+ scale: { x: 1, y: 1, z: 1 },
49
+ rotation: { x: 0, y: 0, z: 0, w: 1 }
50
+ };
51
+ }
52
+ };
53
+ export function defineTransformComponent(engine) {
54
+ return engine.defineComponentFromSchema(TransformSchema, COMPONENT_ID);
55
+ }
@@ -0,0 +1,4 @@
1
+ export type { AnimatorComponentDefinition, AnimatorComponentDefinitionExtended } from './extended/Animator';
2
+ export type { MeshRendererComponentDefinition, MeshRendererComponentDefinitionExtended } from './extended/MeshRenderer';
3
+ export type { MeshColliderComponentDefinition, MeshColliderComponentDefinitionExtended } from './extended/MeshCollider';
4
+ export type { TextureHelper, MaterialComponentDefinition, MaterialComponentDefinitionExtended } from './extended/Material';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ import type { ISchema } from '../schemas/ISchema';
2
+ import { ByteBuffer } from '../serialization/ByteBuffer';
3
+ import { Entity } from './entity';
4
+ import { DeepReadonly } from './readonly';
5
+ /**
6
+ * @public
7
+ */
8
+ export declare type EcsResult<T extends ISchema> = T extends ISchema ? ReturnType<T['deserialize']> : never;
9
+ /**
10
+ * @public
11
+ */
12
+ export declare type ComponentType<T extends ISchema> = EcsResult<T>;
13
+ /**
14
+ * @public
15
+ */
16
+ export declare type ComponentDefinition<T extends ISchema<ConstructorType>, ConstructorType = any> = {
17
+ _id: number;
18
+ /**
19
+ * Return the default value of the current component
20
+ */
21
+ default(): DeepReadonly<ComponentType<T>>;
22
+ /**
23
+ * Get if the entity has this component
24
+ * @param entity - entity to test
25
+ */
26
+ has(entity: Entity): boolean;
27
+ /**
28
+ * Get the readonly component of the entity (to mutate it, use getMutable instead), throw an error if the entity doesn't have the component.
29
+ * @param entity - Entity that will be used to get the component
30
+ * @returns
31
+ */
32
+ get(entity: Entity): DeepReadonly<ComponentType<T>>;
33
+ /**
34
+ * Get the readonly component of the entity (to mutate it, use getMutable instead), or null if the entity doesn't have the component.
35
+ * @param entity - Entity that will be used to try to get the component
36
+ */
37
+ getOrNull(entity: Entity): DeepReadonly<ComponentType<T>> | null;
38
+ /**
39
+ * Add the current component to an entity, throw an error if the component already exists (use `createOrReplace` instead).
40
+ * - Internal comment: This method adds the &lt;entity,component&gt; to the list to be reviewed next frame
41
+ * @param entity - Entity that will be used to create the component
42
+ * @param val - The initial value
43
+ */
44
+ create(entity: Entity, val?: ConstructorType): ComponentType<T>;
45
+ /**
46
+ * Add the current component to an entity or replace the content if the entity already has the component
47
+ * - Internal comment: This method adds the &lt;entity,component&gt; to the list to be reviewed next frame
48
+ * @param entity - Entity that will be used to create or replace the component
49
+ * @param val - The initial or new value
50
+ */
51
+ createOrReplace(entity: Entity, val?: ConstructorType): ComponentType<T>;
52
+ /**
53
+ * Delete the current component to an entity, return null if the entity doesn't have the current component.
54
+ * - Internal comment: This method adds the &lt;entity,component&gt; to the list to be reviewed next frame
55
+ * @param entity - Entity to delete the component from
56
+ */
57
+ deleteFrom(entity: Entity): ComponentType<T> | null;
58
+ /**
59
+ * Get the mutable component of the entity, throw an error if the entity doesn't have the component.
60
+ * - Internal comment: This method adds the &lt;entity,component&gt; to the list to be reviewed next frame
61
+ * @param entity - Entity to get the component from
62
+ */
63
+ getMutable(entity: Entity): ComponentType<T>;
64
+ /**
65
+ * Get the mutable component of the entity, return null if the entity doesn't have the component.
66
+ * - Internal comment: This method adds the &lt;entity,component&gt; to the list to be reviewed next frame
67
+ * @param entity - Entity to get the component from
68
+ */
69
+ getMutableOrNull(entity: Entity): ComponentType<T> | null;
70
+ writeToByteBuffer(entity: Entity, buffer: ByteBuffer): void;
71
+ };
72
+ export declare function defineComponent<T extends ISchema, ConstructorType = ComponentType<T>>(componentId: number, spec: T, constructorDefault?: ConstructorType): ComponentDefinition<T, ConstructorType>;
@@ -0,0 +1,130 @@
1
+ import { createByteBuffer } from '../serialization/ByteBuffer';
2
+ import { deepReadonly } from './readonly';
3
+ export function defineComponent(componentId, spec, constructorDefault
4
+ // meta: { syncFlags }
5
+ ) {
6
+ const data = new Map();
7
+ const dirtyIterator = new Set();
8
+ const defaultBuffer = createByteBuffer();
9
+ if (constructorDefault) {
10
+ spec.serialize(constructorDefault, defaultBuffer);
11
+ }
12
+ function getDefaultValue() {
13
+ if (constructorDefault) {
14
+ return spec.deserialize(createByteBuffer({
15
+ writing: {
16
+ buffer: defaultBuffer.buffer(),
17
+ currentOffset: defaultBuffer.currentWriteOffset()
18
+ }
19
+ }));
20
+ }
21
+ else {
22
+ return spec.create();
23
+ }
24
+ }
25
+ function prefillValue(value) {
26
+ return { ...getDefaultValue(), ...value };
27
+ }
28
+ return {
29
+ _id: componentId,
30
+ default() {
31
+ return getDefaultValue();
32
+ },
33
+ isDirty(entity) {
34
+ return dirtyIterator.has(entity);
35
+ },
36
+ has(entity) {
37
+ return data.has(entity);
38
+ },
39
+ deleteFrom(entity) {
40
+ const component = data.get(entity);
41
+ data.delete(entity);
42
+ dirtyIterator.add(entity);
43
+ return component || null;
44
+ },
45
+ getOrNull(entity) {
46
+ const component = data.get(entity);
47
+ return component ? deepReadonly(component) : null;
48
+ },
49
+ get(entity) {
50
+ const component = data.get(entity);
51
+ if (!component) {
52
+ throw new Error(`[getFrom] Component ${componentId} for entity #${entity} not found`);
53
+ }
54
+ return deepReadonly(component);
55
+ },
56
+ create(entity, value) {
57
+ const component = data.get(entity);
58
+ if (component) {
59
+ throw new Error(`[create] Component ${componentId} for ${entity} already exists`);
60
+ }
61
+ const usedValue = value === undefined ? getDefaultValue() : prefillValue(value);
62
+ data.set(entity, usedValue);
63
+ dirtyIterator.add(entity);
64
+ return usedValue;
65
+ },
66
+ createOrReplace(entity, value) {
67
+ const usedValue = value === undefined ? getDefaultValue() : prefillValue(value);
68
+ data.set(entity, usedValue);
69
+ dirtyIterator.add(entity);
70
+ return usedValue;
71
+ },
72
+ getMutableOrNull(entity) {
73
+ const component = data.get(entity);
74
+ if (!component) {
75
+ return null;
76
+ }
77
+ dirtyIterator.add(entity);
78
+ return component;
79
+ },
80
+ getMutable(entity) {
81
+ const component = this.getMutableOrNull(entity);
82
+ if (component === null) {
83
+ throw new Error(`[mutable] Component ${componentId} for ${entity} not found`);
84
+ }
85
+ return component;
86
+ },
87
+ *iterator() {
88
+ for (const [entity, component] of data) {
89
+ yield [entity, component];
90
+ }
91
+ },
92
+ *dirtyIterator() {
93
+ for (const entity of dirtyIterator) {
94
+ yield entity;
95
+ }
96
+ },
97
+ toBinary(entity) {
98
+ const component = data.get(entity);
99
+ if (!component) {
100
+ throw new Error(`[toBinary] Component ${componentId} for ${entity} not found`);
101
+ }
102
+ const writeBuffer = createByteBuffer();
103
+ spec.serialize(component, writeBuffer);
104
+ return writeBuffer;
105
+ },
106
+ writeToByteBuffer(entity, buffer) {
107
+ const component = data.get(entity);
108
+ if (!component) {
109
+ throw new Error(`[writeToByteBuffer] Component ${componentId} for entity #${entity} not found`);
110
+ }
111
+ spec.serialize(component, buffer);
112
+ },
113
+ updateFromBinary(entity, buffer) {
114
+ const component = data.get(entity);
115
+ if (!component) {
116
+ throw new Error(`[updateFromBinary] Component ${componentId} for ${entity} not found`);
117
+ }
118
+ return this.upsertFromBinary(entity, buffer);
119
+ },
120
+ upsertFromBinary(entity, buffer) {
121
+ const newValue = spec.deserialize(buffer);
122
+ data.set(entity, newValue);
123
+ dirtyIterator.add(entity);
124
+ return newValue;
125
+ },
126
+ clearDirty() {
127
+ dirtyIterator.clear();
128
+ }
129
+ };
130
+ }
@@ -0,0 +1,18 @@
1
+ import { Entity } from './entity';
2
+ export declare namespace EntityUtils {
3
+ /**
4
+ * Range is the first element and the last possible element, they both are included in the interval.
5
+ * [start, end]
6
+ */
7
+ type EntityRange = readonly [number, number];
8
+ const MAX_ENTITIES = 4294967295;
9
+ const DYNAMIC_ENTITIES_START_AT = 100000;
10
+ const RESERVED_STATIC_ENTITIES = 512;
11
+ const RESERVED_ENTITIES_RANGE: EntityRange;
12
+ const STATIC_ENTITIES_RANGE: EntityRange;
13
+ const DYNAMIC_ENTITIES_RANGE: EntityRange;
14
+ function isDynamicEntity(entity: Entity): boolean;
15
+ function isStaticEntity(entity: Entity): boolean;
16
+ function isReservedEntity(entity: Entity): boolean;
17
+ }
18
+ export default EntityUtils;
@@ -0,0 +1,34 @@
1
+ export var EntityUtils;
2
+ (function (EntityUtils) {
3
+ EntityUtils.MAX_ENTITIES = 0xffffffff;
4
+ EntityUtils.DYNAMIC_ENTITIES_START_AT = 100e3;
5
+ EntityUtils.RESERVED_STATIC_ENTITIES = 512;
6
+ EntityUtils.RESERVED_ENTITIES_RANGE = [
7
+ 0,
8
+ EntityUtils.RESERVED_STATIC_ENTITIES - 1
9
+ ];
10
+ EntityUtils.STATIC_ENTITIES_RANGE = [
11
+ EntityUtils.RESERVED_STATIC_ENTITIES,
12
+ EntityUtils.DYNAMIC_ENTITIES_START_AT - 1
13
+ ];
14
+ EntityUtils.DYNAMIC_ENTITIES_RANGE = [
15
+ EntityUtils.DYNAMIC_ENTITIES_START_AT,
16
+ EntityUtils.MAX_ENTITIES
17
+ ];
18
+ function isInRange(entity, range) {
19
+ return entity >= range[0] && entity <= range[1];
20
+ }
21
+ function isDynamicEntity(entity) {
22
+ return isInRange(entity, EntityUtils.DYNAMIC_ENTITIES_RANGE);
23
+ }
24
+ EntityUtils.isDynamicEntity = isDynamicEntity;
25
+ function isStaticEntity(entity) {
26
+ return isInRange(entity, EntityUtils.STATIC_ENTITIES_RANGE);
27
+ }
28
+ EntityUtils.isStaticEntity = isStaticEntity;
29
+ function isReservedEntity(entity) {
30
+ return isInRange(entity, EntityUtils.RESERVED_ENTITIES_RANGE);
31
+ }
32
+ EntityUtils.isReservedEntity = isReservedEntity;
33
+ })(EntityUtils || (EntityUtils = {}));
34
+ export default EntityUtils;
@@ -0,0 +1,17 @@
1
+ import { EntityUtils } from './entity-utils';
2
+ /**
3
+ * @public
4
+ */
5
+ export declare type Entity = unknown;
6
+ export declare function EntityContainer(): {
7
+ generateEntity(dynamic?: boolean): Entity;
8
+ removeEntity(entity: Entity): boolean;
9
+ entityExists(entity: Entity): boolean;
10
+ getExistingEntities(): Set<Entity>;
11
+ };
12
+ declare function Entity(range: EntityUtils.EntityRange): {
13
+ getExistingEntities(): Set<unknown>;
14
+ generateEntity: () => Entity;
15
+ removeEntity: (entity: Entity) => boolean;
16
+ };
17
+ export {};
@@ -0,0 +1,55 @@
1
+ import { EntityUtils } from './entity-utils';
2
+ export function EntityContainer() {
3
+ const staticEntity = Entity(EntityUtils.STATIC_ENTITIES_RANGE);
4
+ const dynamicEntity = Entity(EntityUtils.DYNAMIC_ENTITIES_RANGE);
5
+ return {
6
+ generateEntity(dynamic = false) {
7
+ if (dynamic) {
8
+ return dynamicEntity.generateEntity();
9
+ }
10
+ else {
11
+ return staticEntity.generateEntity();
12
+ }
13
+ },
14
+ removeEntity(entity) {
15
+ return (staticEntity.removeEntity(entity) || dynamicEntity.removeEntity(entity));
16
+ },
17
+ entityExists(entity) {
18
+ return (EntityUtils.isReservedEntity(entity) ||
19
+ staticEntity.getExistingEntities().has(entity) ||
20
+ dynamicEntity.getExistingEntities().has(entity));
21
+ },
22
+ getExistingEntities() {
23
+ return new Set([
24
+ ...staticEntity.getExistingEntities(),
25
+ ...dynamicEntity.getExistingEntities()
26
+ ]);
27
+ }
28
+ };
29
+ }
30
+ function Entity(range) {
31
+ function createEntity(entity) {
32
+ return entity;
33
+ }
34
+ let entityCounter = range[0];
35
+ const usedEntities = new Set();
36
+ function generateEntity() {
37
+ if (entityCounter >= range[1]) {
38
+ throw new Error(`It fails trying to generate an entity out of range [${range[0]}, ${range[1]}].`);
39
+ }
40
+ const entity = createEntity(entityCounter);
41
+ entityCounter++;
42
+ usedEntities.add(entity);
43
+ return entity;
44
+ }
45
+ function removeEntity(entity) {
46
+ return usedEntities.delete(entity);
47
+ }
48
+ return {
49
+ getExistingEntities() {
50
+ return new Set(usedEntities);
51
+ },
52
+ generateEntity,
53
+ removeEntity
54
+ };
55
+ }
@@ -0,0 +1,12 @@
1
+ import { ByteBuffer } from '../serialization/ByteBuffer';
2
+ import { ComponentDefinition, ComponentType } from './component';
3
+ import { Entity } from './entity';
4
+ import type { IEngine } from './types';
5
+ export * from './input';
6
+ export * from './readonly';
7
+ export * from './types';
8
+ export { ComponentType, Entity, ByteBuffer, ComponentDefinition };
9
+ /**
10
+ * @public
11
+ */
12
+ export declare function Engine(): IEngine;
@@ -0,0 +1,172 @@
1
+ import * as components from '../components';
2
+ import { Schemas } from '../schemas';
3
+ import { crdtSceneSystem } from '../systems/crdt';
4
+ import { defineComponent as defComponent } from './component';
5
+ import { EntityContainer } from './entity';
6
+ import { SystemContainer, SYSTEMS_REGULAR_PRIORITY } from './systems';
7
+ export * from './input';
8
+ export * from './readonly';
9
+ export * from './types';
10
+ function preEngine() {
11
+ const entityContainer = EntityContainer();
12
+ const componentsDefinition = new Map();
13
+ const systems = SystemContainer();
14
+ function addSystem(fn, priority = SYSTEMS_REGULAR_PRIORITY, name) {
15
+ systems.add(fn, priority, name);
16
+ }
17
+ function removeSystem(selector) {
18
+ return systems.remove(selector);
19
+ }
20
+ function addEntity(dynamic = false) {
21
+ // entitiesCompnonent.set(entity, new Set())
22
+ const entity = entityContainer.generateEntity(dynamic);
23
+ return entity;
24
+ }
25
+ function entityExists(entity) {
26
+ return entityContainer.entityExists(entity);
27
+ }
28
+ function addDynamicEntity() {
29
+ return addEntity(true);
30
+ }
31
+ function removeEntity(entity) {
32
+ for (const [, component] of componentsDefinition) {
33
+ if (component.has(entity)) {
34
+ component.deleteFrom(entity);
35
+ }
36
+ }
37
+ return entityContainer.removeEntity(entity);
38
+ }
39
+ function defineComponentFromSchema(spec, componentId, constructorDefault) {
40
+ const prev = componentsDefinition.get(componentId);
41
+ if (prev) {
42
+ // TODO: assert spec === prev.spec
43
+ return prev;
44
+ }
45
+ const newComponent = defComponent(componentId, spec, constructorDefault);
46
+ componentsDefinition.set(componentId, newComponent);
47
+ return newComponent;
48
+ }
49
+ function defineComponent(spec, componentId, constructorDefault) {
50
+ return defineComponentFromSchema(Schemas.Map(spec), componentId, constructorDefault);
51
+ }
52
+ function getComponent(componentId) {
53
+ const component = componentsDefinition.get(componentId);
54
+ if (!component) {
55
+ throw new Error(`Component ${componentId} not found. You need to declare the components at the beginnig of the engine declaration`);
56
+ }
57
+ return component;
58
+ }
59
+ function* getEntitiesWith(...components) {
60
+ for (const [entity, ...groupComp] of getComponentDefGroup(...components)) {
61
+ yield [entity, ...groupComp.map((c) => c.get(entity))];
62
+ }
63
+ }
64
+ function* getComponentDefGroup(...args) {
65
+ const [firstComponentDef, ...componentDefinitions] = args;
66
+ for (const [entity] of firstComponentDef.iterator()) {
67
+ let matches = true;
68
+ for (const componentDef of componentDefinitions) {
69
+ if (!componentDef.has(entity)) {
70
+ matches = false;
71
+ break;
72
+ }
73
+ }
74
+ if (matches) {
75
+ yield [entity, ...args];
76
+ }
77
+ }
78
+ }
79
+ function getSystems() {
80
+ return systems.getSystems();
81
+ }
82
+ function removeComponentDefinition(componentId) {
83
+ componentsDefinition.delete(componentId);
84
+ }
85
+ return {
86
+ entityExists,
87
+ componentsDefinition,
88
+ addEntity,
89
+ addDynamicEntity,
90
+ removeEntity,
91
+ addSystem,
92
+ getSystems,
93
+ removeSystem,
94
+ defineComponent,
95
+ defineComponentFromSchema,
96
+ getEntitiesWith,
97
+ getComponent,
98
+ removeComponentDefinition
99
+ };
100
+ }
101
+ /**
102
+ * @public
103
+ */
104
+ export function Engine() {
105
+ const engine = preEngine();
106
+ const crdtSystem = crdtSceneSystem(engine);
107
+ function update(dt) {
108
+ crdtSystem.receiveMessages();
109
+ for (const system of engine.getSystems()) {
110
+ const ret = system.fn(dt);
111
+ if (globalThis.DEBUG) {
112
+ if (ret && typeof ret === 'object' && typeof ret.then === 'function') {
113
+ throw new Error(`A system (${system.name || 'anonymous'}) returned a thenable. Systems cannot be async functions. Documentation: https://dcl.gg/sdk/sync-systems`);
114
+ }
115
+ }
116
+ }
117
+ // TODO: Perf tip
118
+ // Should we add some dirtyIteratorSet at engine level so we dont have
119
+ // to iterate all the component definitions to get the dirty ones ?
120
+ const dirtySet = new Map();
121
+ for (const [componentId, definition] of engine.componentsDefinition) {
122
+ for (const entity of definition.dirtyIterator()) {
123
+ if (!dirtySet.has(entity)) {
124
+ dirtySet.set(entity, new Set());
125
+ }
126
+ dirtySet.get(entity).add(componentId);
127
+ }
128
+ }
129
+ crdtSystem.createMessages(dirtySet);
130
+ for (const [_componentId, definition] of engine.componentsDefinition) {
131
+ definition.clearDirty();
132
+ }
133
+ }
134
+ const Transform = components.Transform(engine);
135
+ function* getTreeEntityArray(firstEntity, proccesedEntities) {
136
+ // This avoid infinite loop when there is a cyclic parenting
137
+ if (proccesedEntities.find((value) => firstEntity === value))
138
+ return;
139
+ proccesedEntities.push(firstEntity);
140
+ for (const [entity, value] of engine.getEntitiesWith(Transform)) {
141
+ if (value.parent === firstEntity) {
142
+ yield* getTreeEntityArray(entity, proccesedEntities);
143
+ }
144
+ }
145
+ yield firstEntity;
146
+ }
147
+ function removeEntityWithChildren(firstEntity) {
148
+ for (const entity of getTreeEntityArray(firstEntity, [])) {
149
+ engine.removeEntity(entity);
150
+ }
151
+ }
152
+ return {
153
+ addEntity: engine.addEntity,
154
+ addDynamicEntity: engine.addDynamicEntity,
155
+ removeEntity: engine.removeEntity,
156
+ removeEntityWithChildren,
157
+ addSystem: engine.addSystem,
158
+ removeSystem: engine.removeSystem,
159
+ // TODO: fix this type
160
+ defineComponent: engine.defineComponent,
161
+ defineComponentFromSchema: engine.defineComponentFromSchema,
162
+ getEntitiesWith: engine.getEntitiesWith,
163
+ getComponent: engine.getComponent,
164
+ removeComponentDefinition: engine.removeComponentDefinition,
165
+ update,
166
+ RootEntity: 0,
167
+ PlayerEntity: 1,
168
+ CameraEntity: 2,
169
+ entityExists: engine.entityExists,
170
+ addTransport: crdtSystem.addTransport
171
+ };
172
+ }