@dcl/ecs 7.12.3-19242573384.commit-09d14b4 → 7.12.3-19269914897.commit-1299cf2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/extended/TriggerArea.d.ts +22 -0
- package/dist/components/extended/TriggerArea.js +27 -0
- package/dist/components/extended/Tween.d.ts +94 -5
- package/dist/components/extended/Tween.js +119 -1
- package/dist/components/generated/CameraLayer.gen.js +1 -1
- package/dist/components/generated/component-names.gen.js +1 -1
- package/dist/components/generated/global.gen.d.ts +1 -1
- package/dist/components/generated/index.gen.d.ts +2 -2
- package/dist/components/generated/index.gen.js +4 -2
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +6 -0
- package/dist/components/manual/Tags.d.ts +34 -0
- package/dist/components/manual/Tags.js +37 -0
- package/dist/components/types.d.ts +3 -0
- package/dist/engine/index.js +10 -0
- package/dist/engine/types.d.ts +7 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +4 -3
- package/dist/runtime/initialization/index.d.ts +7 -0
- package/dist/runtime/initialization/index.js +6 -0
- package/dist/systems/crdt/index.d.ts +1 -0
- package/dist/systems/crdt/index.js +17 -5
- package/dist/systems/triggerArea.d.ts +50 -0
- package/dist/systems/triggerArea.js +113 -0
- package/dist-cjs/components/extended/TriggerArea.d.ts +22 -0
- package/dist-cjs/components/extended/TriggerArea.js +31 -0
- package/dist-cjs/components/extended/Tween.d.ts +94 -5
- package/dist-cjs/components/extended/Tween.js +119 -1
- package/dist-cjs/components/generated/CameraLayer.gen.js +1 -1
- package/dist-cjs/components/generated/component-names.gen.js +1 -1
- package/dist-cjs/components/generated/global.gen.d.ts +1 -1
- package/dist-cjs/components/generated/index.gen.d.ts +2 -2
- package/dist-cjs/components/generated/index.gen.js +4 -2
- package/dist-cjs/components/index.d.ts +4 -0
- package/dist-cjs/components/index.js +9 -1
- package/dist-cjs/components/manual/Tags.d.ts +34 -0
- package/dist-cjs/components/manual/Tags.js +39 -0
- package/dist-cjs/components/types.d.ts +3 -0
- package/dist-cjs/engine/index.js +10 -0
- package/dist-cjs/engine/types.d.ts +7 -0
- package/dist-cjs/index.d.ts +6 -5
- package/dist-cjs/index.js +5 -4
- package/dist-cjs/runtime/initialization/index.d.ts +7 -0
- package/dist-cjs/runtime/initialization/index.js +7 -1
- package/dist-cjs/systems/crdt/index.d.ts +1 -0
- package/dist-cjs/systems/crdt/index.js +18 -6
- package/dist-cjs/systems/triggerArea.d.ts +50 -0
- package/dist-cjs/systems/triggerArea.js +140 -0
- package/package.json +2 -2
|
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.MediaState = exports.NetworkParent = exports.NetworkEntity = exports.SyncComponents = exports.Name = exports.LightSource = exports.InputModifier = exports.VirtualCamera = exports.AvatarEquippedData = exports.AvatarShape = exports.Tween = exports.MeshCollider = exports.MeshRenderer = exports.AudioStream = exports.AudioSource = exports.Animator = exports.Material = exports.Transform = void 0;
|
|
20
|
+
exports.MediaState = exports.NetworkParent = exports.NetworkEntity = exports.SyncComponents = exports.Tags = exports.Name = exports.TriggerArea = exports.LightSource = exports.InputModifier = exports.VirtualCamera = exports.AvatarEquippedData = exports.AvatarShape = exports.Tween = exports.MeshCollider = exports.MeshRenderer = exports.AudioStream = exports.AudioSource = exports.Animator = exports.Material = exports.Transform = void 0;
|
|
21
21
|
const Animator_1 = require("./extended/Animator");
|
|
22
22
|
const AudioSource_1 = require("./extended/AudioSource");
|
|
23
23
|
const AudioStream_1 = require("./extended/AudioStream");
|
|
@@ -37,6 +37,8 @@ const NetworkParent_1 = __importDefault(require("./manual/NetworkParent"));
|
|
|
37
37
|
const SyncComponents_1 = __importDefault(require("./manual/SyncComponents"));
|
|
38
38
|
const Transform_1 = require("./manual/Transform");
|
|
39
39
|
const LightSource_1 = require("./extended/LightSource");
|
|
40
|
+
const TriggerArea_1 = require("./extended/TriggerArea");
|
|
41
|
+
const Tags_1 = __importDefault(require("./manual/Tags"));
|
|
40
42
|
__exportStar(require("./generated/index.gen"), exports);
|
|
41
43
|
/* @__PURE__ */
|
|
42
44
|
const Transform = (engine) => (0, Transform_1.defineTransformComponent)(engine);
|
|
@@ -77,12 +79,18 @@ exports.InputModifier = InputModifier;
|
|
|
77
79
|
/* @__PURE__ */
|
|
78
80
|
const LightSource = (engine) => (0, LightSource_1.defineLightSourceComponent)(engine);
|
|
79
81
|
exports.LightSource = LightSource;
|
|
82
|
+
/* @__PURE__ */
|
|
83
|
+
const TriggerArea = (engine) => (0, TriggerArea_1.defineTriggerAreaComponent)(engine);
|
|
84
|
+
exports.TriggerArea = TriggerArea;
|
|
80
85
|
/**
|
|
81
86
|
* @alpha
|
|
82
87
|
*/
|
|
83
88
|
/* @__PURE__ */
|
|
84
89
|
const Name = (engine) => (0, Name_1.default)(engine);
|
|
85
90
|
exports.Name = Name;
|
|
91
|
+
/* @__PURE__ */
|
|
92
|
+
const Tags = (engine) => (0, Tags_1.default)(engine);
|
|
93
|
+
exports.Tags = Tags;
|
|
86
94
|
/**
|
|
87
95
|
* @alpha
|
|
88
96
|
*/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine/types';
|
|
2
|
+
import { Entity } from '../../engine';
|
|
3
|
+
export interface TagsType {
|
|
4
|
+
tags: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface TagsComponentDefinitionExtended extends LastWriteWinElementSetComponentDefinition<TagsType> {
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*
|
|
10
|
+
* Add a tag to the entity's Tags component or create the component if it doesn't exist and add the tag
|
|
11
|
+
* @param entity - entity to add the tag to
|
|
12
|
+
* @param tagName - the tag name to add
|
|
13
|
+
* @returns true
|
|
14
|
+
*/
|
|
15
|
+
add(entity: Entity, tagName: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* @public
|
|
18
|
+
*
|
|
19
|
+
* Remove a tag from the entity's Tags component
|
|
20
|
+
* @param entity - entity to remove the tag from
|
|
21
|
+
* @param tagName - the tag name to remove
|
|
22
|
+
* @returns true if successful, false if the entity doesn't have a Tags component or the tag doesn't exist
|
|
23
|
+
*/
|
|
24
|
+
remove(entity: Entity, tagName: string): boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @public
|
|
28
|
+
*
|
|
29
|
+
* Define the Tags component
|
|
30
|
+
* @param engine - the engine to define the component on
|
|
31
|
+
* @returns the Tags component definition
|
|
32
|
+
*/
|
|
33
|
+
declare function defineTagsComponent(engine: Pick<IEngine, 'defineComponent'>): TagsComponentDefinitionExtended;
|
|
34
|
+
export default defineTagsComponent;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const schemas_1 = require("../../schemas");
|
|
4
|
+
/**
|
|
5
|
+
* @public
|
|
6
|
+
*
|
|
7
|
+
* Define the Tags component
|
|
8
|
+
* @param engine - the engine to define the component on
|
|
9
|
+
* @returns the Tags component definition
|
|
10
|
+
*/
|
|
11
|
+
function defineTagsComponent(engine) {
|
|
12
|
+
const Tags = engine.defineComponent('core-schema::Tags', {
|
|
13
|
+
tags: schemas_1.Schemas.Array(schemas_1.Schemas.String)
|
|
14
|
+
});
|
|
15
|
+
return {
|
|
16
|
+
...Tags,
|
|
17
|
+
add(entity, tagName) {
|
|
18
|
+
const tagsComponent = Tags.getMutableOrNull(entity);
|
|
19
|
+
if (tagsComponent) {
|
|
20
|
+
tagsComponent.tags.push(tagName);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
Tags.createOrReplace(entity, { tags: [tagName] });
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
remove(entity, tagName) {
|
|
28
|
+
const tagsComponent = Tags.getMutableOrNull(entity);
|
|
29
|
+
if (!tagsComponent || !tagsComponent.tags)
|
|
30
|
+
return false;
|
|
31
|
+
const newTags = tagsComponent.tags.filter((tag) => tag !== tagName);
|
|
32
|
+
if (newTags.length === tagsComponent.tags.length)
|
|
33
|
+
return false;
|
|
34
|
+
tagsComponent.tags = newTags;
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
exports.default = defineTagsComponent;
|
|
@@ -10,7 +10,10 @@ export type { TweenHelper, TweenComponentDefinitionExtended } from './extended/T
|
|
|
10
10
|
export type { CameraTransitionHelper, VirtualCameraComponentDefinitionExtended } from './extended/VirtualCamera';
|
|
11
11
|
export type { TransformComponentExtended, TransformTypeWithOptionals } from './manual/Transform';
|
|
12
12
|
export type { NameComponent, NameType } from './manual/Name';
|
|
13
|
+
export type { TagsComponentDefinitionExtended, TagsType } from './manual/Tags';
|
|
13
14
|
export type { ISyncComponents, ISyncComponentsType } from './manual/SyncComponents';
|
|
14
15
|
export type { INetowrkEntity, INetowrkEntityType } from './manual/NetworkEntity';
|
|
15
16
|
export type { INetowrkParent, INetowrkParentType } from './manual/NetworkParent';
|
|
16
17
|
export type { InputModifierHelper, InputModifierComponentDefinitionExtended } from './extended/InputModifier';
|
|
18
|
+
export type { LightSourceHelper, LightSourceComponentDefinitionExtended } from './extended/LightSource';
|
|
19
|
+
export type { TriggerAreaComponentDefinitionExtended } from './extended/TriggerArea';
|
package/dist-cjs/engine/index.js
CHANGED
|
@@ -172,6 +172,14 @@ function preEngine(options) {
|
|
|
172
172
|
const entity = getEntityOrNullByName(value);
|
|
173
173
|
return entity;
|
|
174
174
|
}
|
|
175
|
+
function* getEntitiesByTag(tagName) {
|
|
176
|
+
const TagComponent = components.Tags({ defineComponent });
|
|
177
|
+
for (const [entity, component] of getEntitiesWith(TagComponent)) {
|
|
178
|
+
if (entity !== 0 && component.tags?.some((tag) => tag === tagName)) {
|
|
179
|
+
yield entity;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
175
183
|
function* getComponentDefGroup(...args) {
|
|
176
184
|
const [firstComponentDef, ...componentDefinitions] = args;
|
|
177
185
|
for (const [entity] of firstComponentDef.iterator()) {
|
|
@@ -220,6 +228,7 @@ function preEngine(options) {
|
|
|
220
228
|
getComponentOrNull: getComponentOrNull,
|
|
221
229
|
getEntityOrNullByName,
|
|
222
230
|
getEntityByName,
|
|
231
|
+
getEntitiesByTag,
|
|
223
232
|
removeComponentDefinition,
|
|
224
233
|
registerComponentDefinition,
|
|
225
234
|
entityContainer,
|
|
@@ -275,6 +284,7 @@ function Engine(options) {
|
|
|
275
284
|
seal: partialEngine.seal,
|
|
276
285
|
getEntityOrNullByName: partialEngine.getEntityOrNullByName,
|
|
277
286
|
getEntityByName: partialEngine.getEntityByName,
|
|
287
|
+
getEntitiesByTag: partialEngine.getEntitiesByTag,
|
|
278
288
|
update,
|
|
279
289
|
RootEntity: 0,
|
|
280
290
|
PlayerEntity: 1,
|
|
@@ -196,6 +196,13 @@ export interface IEngine {
|
|
|
196
196
|
* @typeParam T - The type of the entity name value
|
|
197
197
|
*/
|
|
198
198
|
getEntityByName<T = never, K = T>(value: K & (T extends never ? never : string)): Entity;
|
|
199
|
+
/**
|
|
200
|
+
* @public
|
|
201
|
+
* Get all entities that have a specific tag in their Tag component
|
|
202
|
+
* @param tag - Tag to search
|
|
203
|
+
* @returns Iterator of entities that have the given tag
|
|
204
|
+
*/
|
|
205
|
+
getEntitiesByTag(tagName: string): Iterable<Entity>;
|
|
199
206
|
/**
|
|
200
207
|
* @public
|
|
201
208
|
* @param deltaTime - deltaTime in seconds
|
package/dist-cjs/index.d.ts
CHANGED
|
@@ -9,12 +9,12 @@ export * from './systems/raycast';
|
|
|
9
9
|
export * from './systems/videoEvents';
|
|
10
10
|
export * from './systems/async-task';
|
|
11
11
|
export * from './systems/tween';
|
|
12
|
+
export * from './systems/triggerArea';
|
|
12
13
|
export * from './engine/entity';
|
|
13
14
|
export * from './components/types';
|
|
14
|
-
import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended } from './components/types';
|
|
15
|
+
import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended } from './components/types';
|
|
15
16
|
import { NameComponent } from './components/manual/Name';
|
|
16
|
-
import {
|
|
17
|
-
import { AvatarShapeComponentDefinitionExtended } from './components/extended/AvatarShape';
|
|
17
|
+
import { TagsComponentDefinitionExtended } from './components/manual/Tags';
|
|
18
18
|
export declare const Transform: TransformComponentExtended;
|
|
19
19
|
export declare const Animator: AnimatorComponentDefinitionExtended;
|
|
20
20
|
export declare const AudioSource: AudioSourceComponentDefinitionExtended;
|
|
@@ -22,12 +22,13 @@ export declare const AudioStream: AudioStreamComponentDefinitionExtended;
|
|
|
22
22
|
export declare const Material: MaterialComponentDefinitionExtended;
|
|
23
23
|
export declare const MeshRenderer: MeshRendererComponentDefinitionExtended;
|
|
24
24
|
export declare const MeshCollider: MeshColliderComponentDefinitionExtended;
|
|
25
|
-
export declare const AvatarEquippedData: AvatarEquippedDataComponentDefinitionExtended;
|
|
26
|
-
export declare const AvatarShape: AvatarShapeComponentDefinitionExtended;
|
|
27
25
|
export declare const Name: NameComponent;
|
|
26
|
+
export declare const Tags: TagsComponentDefinitionExtended;
|
|
28
27
|
export declare const Tween: TweenComponentDefinitionExtended;
|
|
29
28
|
export declare const VirtualCamera: VirtualCameraComponentDefinitionExtended;
|
|
30
29
|
export declare const InputModifier: InputModifierComponentDefinitionExtended;
|
|
30
|
+
export declare const LightSource: LightSourceComponentDefinitionExtended;
|
|
31
|
+
export declare const TriggerArea: TriggerAreaComponentDefinitionExtended;
|
|
31
32
|
/**
|
|
32
33
|
* @alpha
|
|
33
34
|
* This is going to be used for sync components through a server.
|
package/dist-cjs/index.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
26
26
|
return result;
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.NetworkParent = exports.NetworkEntity = exports.SyncComponents = exports.
|
|
29
|
+
exports.NetworkParent = exports.NetworkEntity = exports.SyncComponents = exports.TriggerArea = exports.LightSource = exports.InputModifier = exports.VirtualCamera = exports.Tween = exports.Tags = exports.Name = exports.MeshCollider = exports.MeshRenderer = exports.Material = exports.AudioStream = exports.AudioSource = exports.Animator = exports.Transform = exports.components = exports.cyclicParentingChecker = void 0;
|
|
30
30
|
// The order of the following imports matters. Please do not auto-sort
|
|
31
31
|
__exportStar(require("./engine"), exports);
|
|
32
32
|
__exportStar(require("./schemas"), exports);
|
|
@@ -40,6 +40,7 @@ __exportStar(require("./systems/raycast"), exports);
|
|
|
40
40
|
__exportStar(require("./systems/videoEvents"), exports);
|
|
41
41
|
__exportStar(require("./systems/async-task"), exports);
|
|
42
42
|
__exportStar(require("./systems/tween"), exports);
|
|
43
|
+
__exportStar(require("./systems/triggerArea"), exports);
|
|
43
44
|
__exportStar(require("./engine/entity"), exports);
|
|
44
45
|
__exportStar(require("./components/types"), exports);
|
|
45
46
|
// @internal
|
|
@@ -54,13 +55,13 @@ exports.AudioStream = components.AudioStream(initialization_1.engine);
|
|
|
54
55
|
exports.Material = components.Material(initialization_1.engine);
|
|
55
56
|
exports.MeshRenderer = components.MeshRenderer(initialization_1.engine);
|
|
56
57
|
exports.MeshCollider = components.MeshCollider(initialization_1.engine);
|
|
57
|
-
exports.AvatarEquippedData =
|
|
58
|
-
/* @__PURE__*/ components.AvatarEquippedData(initialization_1.engine);
|
|
59
|
-
exports.AvatarShape = components.AvatarShape(initialization_1.engine);
|
|
60
58
|
exports.Name = components.Name(initialization_1.engine);
|
|
59
|
+
exports.Tags = components.Tags(initialization_1.engine);
|
|
61
60
|
exports.Tween = components.Tween(initialization_1.engine);
|
|
62
61
|
exports.VirtualCamera = components.VirtualCamera(initialization_1.engine);
|
|
63
62
|
exports.InputModifier = components.InputModifier(initialization_1.engine);
|
|
63
|
+
exports.LightSource = components.LightSource(initialization_1.engine);
|
|
64
|
+
exports.TriggerArea = components.TriggerArea(initialization_1.engine);
|
|
64
65
|
/**
|
|
65
66
|
* @alpha
|
|
66
67
|
* This is going to be used for sync components through a server.
|
|
@@ -9,6 +9,7 @@ import { IInputSystem } from './../../engine/input';
|
|
|
9
9
|
import { RaycastSystem } from '../../systems/raycast';
|
|
10
10
|
import { VideoEventsSystem } from '../../systems/videoEvents';
|
|
11
11
|
import { TweenSystem } from '../../systems/tween';
|
|
12
|
+
import { TriggerAreaEventsSystem } from '../../systems/triggerArea';
|
|
12
13
|
/**
|
|
13
14
|
* @public
|
|
14
15
|
* The engine is the part of the scene that sits in the middle and manages all of the other parts.
|
|
@@ -56,6 +57,12 @@ export { VideoEventsSystem };
|
|
|
56
57
|
*/
|
|
57
58
|
export declare const tweenSystem: TweenSystem;
|
|
58
59
|
export { TweenSystem };
|
|
60
|
+
/**
|
|
61
|
+
* @public
|
|
62
|
+
* Register callback functions for trigger area results.
|
|
63
|
+
*/
|
|
64
|
+
export declare const triggerAreaEventsSystem: TriggerAreaEventsSystem;
|
|
65
|
+
export { TriggerAreaEventsSystem };
|
|
59
66
|
/**
|
|
60
67
|
* @public
|
|
61
68
|
* Runs an async function
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* init and it'll be changing.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.executeTask = exports.tweenSystem = exports.videoEventsSystem = exports.raycastSystem = exports.pointerEventsSystem = exports.inputSystem = exports.engine = void 0;
|
|
7
|
+
exports.executeTask = exports.triggerAreaEventsSystem = exports.tweenSystem = exports.videoEventsSystem = exports.raycastSystem = exports.pointerEventsSystem = exports.inputSystem = exports.engine = void 0;
|
|
8
8
|
const engine_1 = require("../../engine");
|
|
9
9
|
const async_task_1 = require("../../systems/async-task");
|
|
10
10
|
const events_1 = require("../../systems/events");
|
|
@@ -13,6 +13,7 @@ const raycast_1 = require("../../systems/raycast");
|
|
|
13
13
|
const videoEvents_1 = require("../../systems/videoEvents");
|
|
14
14
|
const tween_1 = require("../../systems/tween");
|
|
15
15
|
const pointer_event_collider_checker_1 = require("../../systems/pointer-event-collider-checker");
|
|
16
|
+
const triggerArea_1 = require("../../systems/triggerArea");
|
|
16
17
|
/**
|
|
17
18
|
* @public
|
|
18
19
|
* The engine is the part of the scene that sits in the middle and manages all of the other parts.
|
|
@@ -55,6 +56,11 @@ exports.videoEventsSystem = (0, videoEvents_1.createVideoEventsSystem)(exports.e
|
|
|
55
56
|
* Register callback functions to a particular entity on video events.
|
|
56
57
|
*/
|
|
57
58
|
exports.tweenSystem = (0, tween_1.createTweenSystem)(exports.engine);
|
|
59
|
+
/**
|
|
60
|
+
* @public
|
|
61
|
+
* Register callback functions for trigger area results.
|
|
62
|
+
*/
|
|
63
|
+
exports.triggerAreaEventsSystem = (0, triggerArea_1.createTriggerAreaEventsSystem)(exports.engine);
|
|
58
64
|
/**
|
|
59
65
|
* Adds pointer event collider system only in DEV env
|
|
60
66
|
*/
|
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.crdtSceneSystem = void 0;
|
|
26
|
+
exports.crdtSceneSystem = exports.LIVEKIT_MAX_SIZE = void 0;
|
|
27
27
|
const entity_1 = require("../../engine/entity");
|
|
28
28
|
const ByteBuffer_1 = require("../../serialization/ByteBuffer");
|
|
29
29
|
const crdt_1 = require("../../serialization/crdt");
|
|
@@ -34,6 +34,8 @@ const types_1 = require("../../serialization/crdt/types");
|
|
|
34
34
|
const putComponentNetwork_1 = require("../../serialization/crdt/network/putComponentNetwork");
|
|
35
35
|
const components_1 = require("../../components");
|
|
36
36
|
const networkUtils = __importStar(require("../../serialization/crdt/network/utils"));
|
|
37
|
+
// NetworkMessages can only have a MAX_SIZE of 12kb. So we need to send it in chunks.
|
|
38
|
+
exports.LIVEKIT_MAX_SIZE = 12;
|
|
37
39
|
/**
|
|
38
40
|
* @internal
|
|
39
41
|
*/
|
|
@@ -232,8 +234,6 @@ function crdtSceneSystem(engine, onProcessEntityComponentChange) {
|
|
|
232
234
|
// Send CRDT messages to transports
|
|
233
235
|
const transportBuffer = new ByteBuffer_1.ReadWriteByteBuffer();
|
|
234
236
|
for (const index in transports) {
|
|
235
|
-
// NetworkMessages can only have a MAX_SIZE of 13kb. So we need to send it in chunks.
|
|
236
|
-
const LIVEKIT_MAX_SIZE = 13;
|
|
237
237
|
const __NetworkMessagesBuffer = [];
|
|
238
238
|
const transportIndex = Number(index);
|
|
239
239
|
const transport = transports[transportIndex];
|
|
@@ -244,9 +244,21 @@ function crdtSceneSystem(engine, onProcessEntityComponentChange) {
|
|
|
244
244
|
const buffer = new ByteBuffer_1.ReadWriteByteBuffer();
|
|
245
245
|
// Then we send all the new crdtMessages that the transport needs to process
|
|
246
246
|
for (const message of crdtMessages) {
|
|
247
|
-
if
|
|
248
|
-
|
|
249
|
-
|
|
247
|
+
// Check if adding this message would exceed the size limit
|
|
248
|
+
const currentBufferSize = transportBuffer.toBinary().byteLength;
|
|
249
|
+
const messageSize = message.messageBuffer.byteLength;
|
|
250
|
+
if (isNetworkTransport && (currentBufferSize + messageSize) / 1024 > exports.LIVEKIT_MAX_SIZE) {
|
|
251
|
+
// If the current buffer has content, save it as a chunk
|
|
252
|
+
if (currentBufferSize > 0) {
|
|
253
|
+
__NetworkMessagesBuffer.push(transportBuffer.toCopiedBinary());
|
|
254
|
+
transportBuffer.resetBuffer();
|
|
255
|
+
}
|
|
256
|
+
// If the message itself is larger than the limit, we need to handle it specially
|
|
257
|
+
// For now, we'll skip it to prevent infinite loops
|
|
258
|
+
if (messageSize / 1024 > exports.LIVEKIT_MAX_SIZE) {
|
|
259
|
+
console.error(`Message too large (${messageSize} bytes), skipping message for entity ${message.entityId}`);
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
250
262
|
}
|
|
251
263
|
// Avoid echo messages
|
|
252
264
|
if (message.transportId === transportIndex)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { DeepReadonlyObject, Entity } from '../engine';
|
|
2
|
+
import { PBTriggerAreaResult } from '../components';
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export type TriggerAreaEventSystemCallback = (result: DeepReadonlyObject<PBTriggerAreaResult>) => void;
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export interface TriggerAreaEventsSystem {
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
* Execute callback when an entity enters the Trigger Area
|
|
14
|
+
* @param entity - The entity that already has the TriggerArea component
|
|
15
|
+
* @param cb - Function to execute the 'Enter' type of result is detected
|
|
16
|
+
*/
|
|
17
|
+
onTriggerEnter(entity: Entity, cb: TriggerAreaEventSystemCallback): void;
|
|
18
|
+
/**
|
|
19
|
+
* @public
|
|
20
|
+
* Remove the callback for Trigger Area 'Enter' type of result
|
|
21
|
+
* @param entity - Entity where the Trigger Area was attached
|
|
22
|
+
*/
|
|
23
|
+
removeOnTriggerEnter(entity: Entity): void;
|
|
24
|
+
/**
|
|
25
|
+
* @public
|
|
26
|
+
* Execute callback when an entity stays in the Trigger Area
|
|
27
|
+
* @param entity - The entity that already has the TriggerArea component
|
|
28
|
+
* @param cb - Function to execute the 'Stay' type of result is detected
|
|
29
|
+
*/
|
|
30
|
+
onTriggerStay(entity: Entity, cb: TriggerAreaEventSystemCallback): void;
|
|
31
|
+
/**
|
|
32
|
+
* @public
|
|
33
|
+
* Remove the callback for Trigger Area 'Stay' type of result
|
|
34
|
+
* @param entity - Entity where the Trigger Area was attached
|
|
35
|
+
*/
|
|
36
|
+
removeOnTriggerStay(entity: Entity): void;
|
|
37
|
+
/**
|
|
38
|
+
* @public
|
|
39
|
+
* Execute callback when an entity exits the Trigger Area
|
|
40
|
+
* @param entity - The entity that already has the TriggerArea component
|
|
41
|
+
* @param cb - Function to execute the 'Exit' type of result is detected
|
|
42
|
+
*/
|
|
43
|
+
onTriggerExit(entity: Entity, cb: TriggerAreaEventSystemCallback): void;
|
|
44
|
+
/**
|
|
45
|
+
* @public
|
|
46
|
+
* Remove the callback for Trigger Area 'Exit' type of result
|
|
47
|
+
* @param entity - Entity where the Trigger Area was attached
|
|
48
|
+
*/
|
|
49
|
+
removeOnTriggerExit(entity: Entity): void;
|
|
50
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createTriggerAreaEventsSystem = void 0;
|
|
27
|
+
const components = __importStar(require("../components"));
|
|
28
|
+
const entity_1 = require("../engine/entity");
|
|
29
|
+
/**
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
function createTriggerAreaEventsSystem(engine) {
|
|
33
|
+
const triggerAreaResultComponent = components.TriggerAreaResult(engine);
|
|
34
|
+
const entitiesMap = new Map();
|
|
35
|
+
function hasCallbacksMap(entity) {
|
|
36
|
+
return entitiesMap.has(entity) && entitiesMap.get(entity) !== undefined;
|
|
37
|
+
}
|
|
38
|
+
function addEntityCallback(entity, triggerType, callback) {
|
|
39
|
+
if (hasCallbacksMap(entity)) {
|
|
40
|
+
entitiesMap.get(entity).triggerCallbackMap.set(triggerType, callback);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
entitiesMap.set(entity, {
|
|
44
|
+
triggerCallbackMap: new Map([[triggerType, callback]]),
|
|
45
|
+
lastConsumedTimestamp: -1
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function removeEntityCallback(entity, triggerType) {
|
|
50
|
+
if (!entitiesMap.has(entity) || !entitiesMap.get(entity).triggerCallbackMap.has(triggerType))
|
|
51
|
+
return;
|
|
52
|
+
const triggerCallbackMap = entitiesMap.get(entity).triggerCallbackMap;
|
|
53
|
+
triggerCallbackMap.delete(triggerType);
|
|
54
|
+
// Remove entity if no more trigger callbacks are registered
|
|
55
|
+
if (triggerCallbackMap.size === 0)
|
|
56
|
+
entitiesMap.delete(entity);
|
|
57
|
+
}
|
|
58
|
+
function onTriggerEnter(entity, cb) {
|
|
59
|
+
addEntityCallback(entity, 0 /* TriggerAreaEventType.TAET_ENTER */, cb);
|
|
60
|
+
}
|
|
61
|
+
function removeOnTriggerEnter(entity) {
|
|
62
|
+
removeEntityCallback(entity, 0 /* TriggerAreaEventType.TAET_ENTER */);
|
|
63
|
+
}
|
|
64
|
+
function onTriggerStay(entity, cb) {
|
|
65
|
+
addEntityCallback(entity, 1 /* TriggerAreaEventType.TAET_STAY */, cb);
|
|
66
|
+
}
|
|
67
|
+
function removeOnTriggerStay(entity) {
|
|
68
|
+
removeEntityCallback(entity, 1 /* TriggerAreaEventType.TAET_STAY */);
|
|
69
|
+
}
|
|
70
|
+
function onTriggerExit(entity, cb) {
|
|
71
|
+
addEntityCallback(entity, 2 /* TriggerAreaEventType.TAET_EXIT */, cb);
|
|
72
|
+
}
|
|
73
|
+
function removeOnTriggerExit(entity) {
|
|
74
|
+
removeEntityCallback(entity, 2 /* TriggerAreaEventType.TAET_EXIT */);
|
|
75
|
+
}
|
|
76
|
+
engine.addSystem(function TriggerAreaResultSystem() {
|
|
77
|
+
const garbageEntries = [];
|
|
78
|
+
for (const [entity, data] of entitiesMap) {
|
|
79
|
+
if (engine.getEntityState(entity) === entity_1.EntityState.Removed) {
|
|
80
|
+
garbageEntries.push(entity);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const result = triggerAreaResultComponent.get(entity);
|
|
84
|
+
// The Explorer may be taking time before the result component is put
|
|
85
|
+
if (result.size === 0)
|
|
86
|
+
continue;
|
|
87
|
+
const values = Array.from(result.values());
|
|
88
|
+
// determine starting index for new values (more than one could be added between System updates)
|
|
89
|
+
// search backwards to find the anchor at lastConsumedTimestamp
|
|
90
|
+
let startIndex = 0;
|
|
91
|
+
if (data.lastConsumedTimestamp >= 0) {
|
|
92
|
+
const newestTimestamp = values[values.length - 1].timestamp;
|
|
93
|
+
// if nothing new, skip processing
|
|
94
|
+
if (newestTimestamp <= data.lastConsumedTimestamp) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
// Find index of value with the lastConsumedTimestamp
|
|
98
|
+
let i = values.length - 2;
|
|
99
|
+
while (i >= 0 && values[i].timestamp > data.lastConsumedTimestamp)
|
|
100
|
+
i--;
|
|
101
|
+
// Mark the following value index as the starting point to trigger all the new value callbacks
|
|
102
|
+
startIndex = i + 1;
|
|
103
|
+
}
|
|
104
|
+
if (startIndex >= values.length)
|
|
105
|
+
continue;
|
|
106
|
+
// Trigger callbacks for all the new values
|
|
107
|
+
for (let i = startIndex; i < values.length; i++) {
|
|
108
|
+
switch (values[i].eventType) {
|
|
109
|
+
case 0 /* TriggerAreaEventType.TAET_ENTER */:
|
|
110
|
+
if (!data.triggerCallbackMap.has(0 /* TriggerAreaEventType.TAET_ENTER */))
|
|
111
|
+
continue;
|
|
112
|
+
data.triggerCallbackMap.get(0 /* TriggerAreaEventType.TAET_ENTER */)(values[i]);
|
|
113
|
+
break;
|
|
114
|
+
case 1 /* TriggerAreaEventType.TAET_STAY */:
|
|
115
|
+
if (!data.triggerCallbackMap.has(1 /* TriggerAreaEventType.TAET_STAY */))
|
|
116
|
+
continue;
|
|
117
|
+
data.triggerCallbackMap.get(1 /* TriggerAreaEventType.TAET_STAY */)(values[i]);
|
|
118
|
+
break;
|
|
119
|
+
case 2 /* TriggerAreaEventType.TAET_EXIT */:
|
|
120
|
+
if (!data.triggerCallbackMap.has(2 /* TriggerAreaEventType.TAET_EXIT */))
|
|
121
|
+
continue;
|
|
122
|
+
data.triggerCallbackMap.get(2 /* TriggerAreaEventType.TAET_EXIT */)(values[i]);
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
data.lastConsumedTimestamp = values[values.length - 1].timestamp;
|
|
127
|
+
}
|
|
128
|
+
// Clean up garbage entries
|
|
129
|
+
garbageEntries.forEach((garbageEntity) => entitiesMap.delete(garbageEntity));
|
|
130
|
+
});
|
|
131
|
+
return {
|
|
132
|
+
onTriggerEnter,
|
|
133
|
+
removeOnTriggerEnter,
|
|
134
|
+
onTriggerStay,
|
|
135
|
+
removeOnTriggerStay,
|
|
136
|
+
onTriggerExit,
|
|
137
|
+
removeOnTriggerExit
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
exports.createTriggerAreaEventsSystem = createTriggerAreaEventsSystem;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcl/ecs",
|
|
3
3
|
"description": "Decentraland ECS",
|
|
4
|
-
"version": "7.12.3-
|
|
4
|
+
"version": "7.12.3-19269914897.commit-1299cf2",
|
|
5
5
|
"author": "DCL",
|
|
6
6
|
"bugs": "https://github.com/decentraland/ecs/issues",
|
|
7
7
|
"files": [
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
},
|
|
34
34
|
"types": "./dist/index.d.ts",
|
|
35
35
|
"typings": "./dist/index.d.ts",
|
|
36
|
-
"commit": "
|
|
36
|
+
"commit": "1299cf2b6c9f4d032f8bd92be29e6b49e7122f42"
|
|
37
37
|
}
|