@dcl/ecs 7.10.2 → 7.10.3-18106625709.commit-1bcaa4a
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/generated/TriggerArea.gen.d.ts +1 -0
- package/dist/components/generated/TriggerArea.gen.js +25 -0
- package/dist/components/generated/TriggerAreaResult.gen.d.ts +1 -0
- package/dist/components/generated/TriggerAreaResult.gen.js +25 -0
- package/dist/components/generated/component-names.gen.js +2 -0
- package/dist/components/generated/global.gen.d.ts +4 -0
- package/dist/components/generated/global.gen.js +2 -0
- package/dist/components/generated/index.gen.d.ts +8 -0
- package/dist/components/generated/index.gen.js +12 -0
- package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +2 -1
- package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +2 -1
- package/dist/components/generated/pb/decentraland/sdk/components/trigger_area.gen.d.ts +32 -0
- package/dist/components/generated/pb/decentraland/sdk/components/trigger_area.gen.js +58 -0
- package/dist/components/generated/pb/decentraland/sdk/components/trigger_area_result.gen.d.ts +60 -0
- package/dist/components/generated/pb/decentraland/sdk/components/trigger_area_result.gen.js +177 -0
- 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 +2 -0
- package/dist/engine/index.js +10 -0
- package/dist/engine/types.d.ts +7 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +3 -0
- package/dist/runtime/initialization/index.d.ts +7 -0
- package/dist/runtime/initialization/index.js +6 -0
- 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/generated/TriggerArea.gen.d.ts +1 -0
- package/dist-cjs/components/generated/TriggerArea.gen.js +28 -0
- package/dist-cjs/components/generated/TriggerAreaResult.gen.d.ts +1 -0
- package/dist-cjs/components/generated/TriggerAreaResult.gen.js +28 -0
- package/dist-cjs/components/generated/component-names.gen.js +2 -0
- package/dist-cjs/components/generated/global.gen.d.ts +4 -0
- package/dist-cjs/components/generated/global.gen.js +3 -1
- package/dist-cjs/components/generated/index.gen.d.ts +8 -0
- package/dist-cjs/components/generated/index.gen.js +16 -1
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +2 -1
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +2 -1
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/trigger_area.gen.d.ts +32 -0
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/trigger_area.gen.js +64 -0
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/trigger_area_result.gen.d.ts +60 -0
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/trigger_area_result.gen.js +183 -0
- 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 +2 -0
- package/dist-cjs/engine/index.js +10 -0
- package/dist-cjs/engine/types.d.ts +7 -0
- package/dist-cjs/index.d.ts +5 -1
- package/dist-cjs/index.js +4 -1
- package/dist-cjs/runtime/initialization/index.d.ts +7 -0
- package/dist-cjs/runtime/initialization/index.js +7 -1
- package/dist-cjs/systems/triggerArea.d.ts +50 -0
- package/dist-cjs/systems/triggerArea.js +140 -0
- package/package.json +2 -2
|
@@ -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,37 @@
|
|
|
1
|
+
import { Schemas } from '../../schemas';
|
|
2
|
+
/**
|
|
3
|
+
* @public
|
|
4
|
+
*
|
|
5
|
+
* Define the Tags component
|
|
6
|
+
* @param engine - the engine to define the component on
|
|
7
|
+
* @returns the Tags component definition
|
|
8
|
+
*/
|
|
9
|
+
function defineTagsComponent(engine) {
|
|
10
|
+
const Tags = engine.defineComponent('core-schema::Tags', {
|
|
11
|
+
tags: Schemas.Array(Schemas.String)
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
...Tags,
|
|
15
|
+
add(entity, tagName) {
|
|
16
|
+
const tagsComponent = Tags.getMutableOrNull(entity);
|
|
17
|
+
if (tagsComponent) {
|
|
18
|
+
tagsComponent.tags.push(tagName);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
Tags.createOrReplace(entity, { tags: [tagName] });
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
},
|
|
25
|
+
remove(entity, tagName) {
|
|
26
|
+
const tagsComponent = Tags.getMutableOrNull(entity);
|
|
27
|
+
if (!tagsComponent || !tagsComponent.tags)
|
|
28
|
+
return false;
|
|
29
|
+
const newTags = tagsComponent.tags.filter((tag) => tag !== tagName);
|
|
30
|
+
if (newTags.length === tagsComponent.tags.length)
|
|
31
|
+
return false;
|
|
32
|
+
tagsComponent.tags = newTags;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export default defineTagsComponent;
|
|
@@ -8,8 +8,10 @@ export type { TweenHelper, TweenComponentDefinitionExtended } from './extended/T
|
|
|
8
8
|
export type { CameraTransitionHelper, VirtualCameraComponentDefinitionExtended } from './extended/VirtualCamera';
|
|
9
9
|
export type { TransformComponentExtended, TransformTypeWithOptionals } from './manual/Transform';
|
|
10
10
|
export type { NameComponent, NameType } from './manual/Name';
|
|
11
|
+
export type { TagsComponentDefinitionExtended, TagsType } from './manual/Tags';
|
|
11
12
|
export type { ISyncComponents, ISyncComponentsType } from './manual/SyncComponents';
|
|
12
13
|
export type { INetowrkEntity, INetowrkEntityType } from './manual/NetworkEntity';
|
|
13
14
|
export type { INetowrkParent, INetowrkParentType } from './manual/NetworkParent';
|
|
14
15
|
export type { InputModifierHelper, InputModifierComponentDefinitionExtended } from './extended/InputModifier';
|
|
15
16
|
export type { LightSourceHelper, LightSourceComponentDefinitionExtended } from './extended/LightSource';
|
|
17
|
+
export type { TriggerAreaComponentDefinitionExtended } from './extended/TriggerArea';
|
package/dist/engine/index.js
CHANGED
|
@@ -143,6 +143,14 @@ function preEngine(options) {
|
|
|
143
143
|
const entity = getEntityOrNullByName(value);
|
|
144
144
|
return entity;
|
|
145
145
|
}
|
|
146
|
+
function* getEntitiesByTag(tagName) {
|
|
147
|
+
const TagComponent = components.Tags({ defineComponent });
|
|
148
|
+
for (const [entity, component] of getEntitiesWith(TagComponent)) {
|
|
149
|
+
if (entity !== 0 && component.tags?.some((tag) => tag === tagName)) {
|
|
150
|
+
yield entity;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
146
154
|
function* getComponentDefGroup(...args) {
|
|
147
155
|
const [firstComponentDef, ...componentDefinitions] = args;
|
|
148
156
|
for (const [entity] of firstComponentDef.iterator()) {
|
|
@@ -191,6 +199,7 @@ function preEngine(options) {
|
|
|
191
199
|
getComponentOrNull: getComponentOrNull,
|
|
192
200
|
getEntityOrNullByName,
|
|
193
201
|
getEntityByName,
|
|
202
|
+
getEntitiesByTag,
|
|
194
203
|
removeComponentDefinition,
|
|
195
204
|
registerComponentDefinition,
|
|
196
205
|
entityContainer,
|
|
@@ -246,6 +255,7 @@ export function Engine(options) {
|
|
|
246
255
|
seal: partialEngine.seal,
|
|
247
256
|
getEntityOrNullByName: partialEngine.getEntityOrNullByName,
|
|
248
257
|
getEntityByName: partialEngine.getEntityByName,
|
|
258
|
+
getEntitiesByTag: partialEngine.getEntitiesByTag,
|
|
249
259
|
update,
|
|
250
260
|
RootEntity: 0,
|
|
251
261
|
PlayerEntity: 1,
|
package/dist/engine/types.d.ts
CHANGED
|
@@ -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/index.d.ts
CHANGED
|
@@ -9,10 +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, LightSourceComponentDefinitionExtended } 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';
|
|
17
|
+
import { TagsComponentDefinitionExtended } from './components/manual/Tags';
|
|
16
18
|
export declare const Transform: TransformComponentExtended;
|
|
17
19
|
export declare const Animator: AnimatorComponentDefinitionExtended;
|
|
18
20
|
export declare const AudioSource: AudioSourceComponentDefinitionExtended;
|
|
@@ -21,10 +23,12 @@ export declare const Material: MaterialComponentDefinitionExtended;
|
|
|
21
23
|
export declare const MeshRenderer: MeshRendererComponentDefinitionExtended;
|
|
22
24
|
export declare const MeshCollider: MeshColliderComponentDefinitionExtended;
|
|
23
25
|
export declare const Name: NameComponent;
|
|
26
|
+
export declare const Tags: TagsComponentDefinitionExtended;
|
|
24
27
|
export declare const Tween: TweenComponentDefinitionExtended;
|
|
25
28
|
export declare const VirtualCamera: VirtualCameraComponentDefinitionExtended;
|
|
26
29
|
export declare const InputModifier: InputModifierComponentDefinitionExtended;
|
|
27
30
|
export declare const LightSource: LightSourceComponentDefinitionExtended;
|
|
31
|
+
export declare const TriggerArea: TriggerAreaComponentDefinitionExtended;
|
|
28
32
|
/**
|
|
29
33
|
* @alpha
|
|
30
34
|
* This is going to be used for sync components through a server.
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export * from './systems/raycast';
|
|
|
10
10
|
export * from './systems/videoEvents';
|
|
11
11
|
export * from './systems/async-task';
|
|
12
12
|
export * from './systems/tween';
|
|
13
|
+
export * from './systems/triggerArea';
|
|
13
14
|
export * from './engine/entity';
|
|
14
15
|
export * from './components/types';
|
|
15
16
|
// @internal
|
|
@@ -26,10 +27,12 @@ export const Material = /* @__PURE__*/ components.Material(engine);
|
|
|
26
27
|
export const MeshRenderer = /* @__PURE__*/ components.MeshRenderer(engine);
|
|
27
28
|
export const MeshCollider = /* @__PURE__*/ components.MeshCollider(engine);
|
|
28
29
|
export const Name = components.Name(engine);
|
|
30
|
+
export const Tags = components.Tags(engine);
|
|
29
31
|
export const Tween = /* @__PURE__*/ components.Tween(engine);
|
|
30
32
|
export const VirtualCamera = /* @__PURE__*/ components.VirtualCamera(engine);
|
|
31
33
|
export const InputModifier = /* @__PURE__*/ components.InputModifier(engine);
|
|
32
34
|
export const LightSource = /* @__PURE__*/ components.LightSource(engine);
|
|
35
|
+
export const TriggerArea = /* @__PURE__*/ components.TriggerArea(engine);
|
|
33
36
|
/**
|
|
34
37
|
* @alpha
|
|
35
38
|
* 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
|
|
@@ -10,6 +10,7 @@ import { createRaycastSystem } from '../../systems/raycast';
|
|
|
10
10
|
import { createVideoEventsSystem } from '../../systems/videoEvents';
|
|
11
11
|
import { createTweenSystem } from '../../systems/tween';
|
|
12
12
|
import { pointerEventColliderChecker } from '../../systems/pointer-event-collider-checker';
|
|
13
|
+
import { createTriggerAreaEventsSystem } from '../../systems/triggerArea';
|
|
13
14
|
/**
|
|
14
15
|
* @public
|
|
15
16
|
* The engine is the part of the scene that sits in the middle and manages all of the other parts.
|
|
@@ -52,6 +53,11 @@ export const videoEventsSystem = /* @__PURE__ */ createVideoEventsSystem(engine)
|
|
|
52
53
|
* Register callback functions to a particular entity on video events.
|
|
53
54
|
*/
|
|
54
55
|
export const tweenSystem = createTweenSystem(engine);
|
|
56
|
+
/**
|
|
57
|
+
* @public
|
|
58
|
+
* Register callback functions for trigger area results.
|
|
59
|
+
*/
|
|
60
|
+
export const triggerAreaEventsSystem = /* @__PURE__ */ createTriggerAreaEventsSystem(engine);
|
|
55
61
|
/**
|
|
56
62
|
* Adds pointer event collider system only in DEV env
|
|
57
63
|
*/
|
|
@@ -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,113 @@
|
|
|
1
|
+
import * as components from '../components';
|
|
2
|
+
import { EntityState } from '../engine/entity';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export function createTriggerAreaEventsSystem(engine) {
|
|
7
|
+
const triggerAreaResultComponent = components.TriggerAreaResult(engine);
|
|
8
|
+
const entitiesMap = new Map();
|
|
9
|
+
function hasCallbacksMap(entity) {
|
|
10
|
+
return entitiesMap.has(entity) && entitiesMap.get(entity) !== undefined;
|
|
11
|
+
}
|
|
12
|
+
function addEntityCallback(entity, triggerType, callback) {
|
|
13
|
+
if (hasCallbacksMap(entity)) {
|
|
14
|
+
entitiesMap.get(entity).triggerCallbackMap.set(triggerType, callback);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
entitiesMap.set(entity, {
|
|
18
|
+
triggerCallbackMap: new Map([[triggerType, callback]]),
|
|
19
|
+
lastConsumedTimestamp: -1
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function removeEntityCallback(entity, triggerType) {
|
|
24
|
+
if (!entitiesMap.has(entity) || !entitiesMap.get(entity).triggerCallbackMap.has(triggerType))
|
|
25
|
+
return;
|
|
26
|
+
const triggerCallbackMap = entitiesMap.get(entity).triggerCallbackMap;
|
|
27
|
+
triggerCallbackMap.delete(triggerType);
|
|
28
|
+
// Remove entity if no more trigger callbacks are registered
|
|
29
|
+
if (triggerCallbackMap.size === 0)
|
|
30
|
+
entitiesMap.delete(entity);
|
|
31
|
+
}
|
|
32
|
+
function onTriggerEnter(entity, cb) {
|
|
33
|
+
addEntityCallback(entity, 0 /* TriggerAreaEventType.TAET_ENTER */, cb);
|
|
34
|
+
}
|
|
35
|
+
function removeOnTriggerEnter(entity) {
|
|
36
|
+
removeEntityCallback(entity, 0 /* TriggerAreaEventType.TAET_ENTER */);
|
|
37
|
+
}
|
|
38
|
+
function onTriggerStay(entity, cb) {
|
|
39
|
+
addEntityCallback(entity, 1 /* TriggerAreaEventType.TAET_STAY */, cb);
|
|
40
|
+
}
|
|
41
|
+
function removeOnTriggerStay(entity) {
|
|
42
|
+
removeEntityCallback(entity, 1 /* TriggerAreaEventType.TAET_STAY */);
|
|
43
|
+
}
|
|
44
|
+
function onTriggerExit(entity, cb) {
|
|
45
|
+
addEntityCallback(entity, 2 /* TriggerAreaEventType.TAET_EXIT */, cb);
|
|
46
|
+
}
|
|
47
|
+
function removeOnTriggerExit(entity) {
|
|
48
|
+
removeEntityCallback(entity, 2 /* TriggerAreaEventType.TAET_EXIT */);
|
|
49
|
+
}
|
|
50
|
+
engine.addSystem(function TriggerAreaResultSystem() {
|
|
51
|
+
const garbageEntries = [];
|
|
52
|
+
for (const [entity, data] of entitiesMap) {
|
|
53
|
+
if (engine.getEntityState(entity) === EntityState.Removed) {
|
|
54
|
+
garbageEntries.push(entity);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const result = triggerAreaResultComponent.get(entity);
|
|
58
|
+
// The Explorer may be taking time before the result component is put
|
|
59
|
+
if (result.size === 0)
|
|
60
|
+
continue;
|
|
61
|
+
const values = Array.from(result.values());
|
|
62
|
+
// determine starting index for new values (more than one could be added between System updates)
|
|
63
|
+
// search backwards to find the anchor at lastConsumedTimestamp
|
|
64
|
+
let startIndex = 0;
|
|
65
|
+
if (data.lastConsumedTimestamp >= 0) {
|
|
66
|
+
const newestTimestamp = values[values.length - 1].timestamp;
|
|
67
|
+
// if nothing new, skip processing
|
|
68
|
+
if (newestTimestamp <= data.lastConsumedTimestamp) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
// Find index of value with the lastConsumedTimestamp
|
|
72
|
+
let i = values.length - 2;
|
|
73
|
+
while (i >= 0 && values[i].timestamp > data.lastConsumedTimestamp)
|
|
74
|
+
i--;
|
|
75
|
+
// Mark the following value index as the starting point to trigger all the new value callbacks
|
|
76
|
+
startIndex = i + 1;
|
|
77
|
+
}
|
|
78
|
+
if (startIndex >= values.length)
|
|
79
|
+
continue;
|
|
80
|
+
// Trigger callbacks for all the new values
|
|
81
|
+
for (let i = startIndex; i < values.length; i++) {
|
|
82
|
+
switch (values[i].eventType) {
|
|
83
|
+
case 0 /* TriggerAreaEventType.TAET_ENTER */:
|
|
84
|
+
if (!data.triggerCallbackMap.has(0 /* TriggerAreaEventType.TAET_ENTER */))
|
|
85
|
+
continue;
|
|
86
|
+
data.triggerCallbackMap.get(0 /* TriggerAreaEventType.TAET_ENTER */)(values[i]);
|
|
87
|
+
break;
|
|
88
|
+
case 1 /* TriggerAreaEventType.TAET_STAY */:
|
|
89
|
+
if (!data.triggerCallbackMap.has(1 /* TriggerAreaEventType.TAET_STAY */))
|
|
90
|
+
continue;
|
|
91
|
+
data.triggerCallbackMap.get(1 /* TriggerAreaEventType.TAET_STAY */)(values[i]);
|
|
92
|
+
break;
|
|
93
|
+
case 2 /* TriggerAreaEventType.TAET_EXIT */:
|
|
94
|
+
if (!data.triggerCallbackMap.has(2 /* TriggerAreaEventType.TAET_EXIT */))
|
|
95
|
+
continue;
|
|
96
|
+
data.triggerCallbackMap.get(2 /* TriggerAreaEventType.TAET_EXIT */)(values[i]);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
data.lastConsumedTimestamp = values[values.length - 1].timestamp;
|
|
101
|
+
}
|
|
102
|
+
// Clean up garbage entries
|
|
103
|
+
garbageEntries.forEach((garbageEntity) => entitiesMap.delete(garbageEntity));
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
onTriggerEnter,
|
|
107
|
+
removeOnTriggerEnter,
|
|
108
|
+
onTriggerStay,
|
|
109
|
+
removeOnTriggerStay,
|
|
110
|
+
onTriggerExit,
|
|
111
|
+
removeOnTriggerExit
|
|
112
|
+
};
|
|
113
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Entity, IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine';
|
|
2
|
+
import { ColliderLayer, PBTriggerArea } from '../generated/index.gen';
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export interface TriggerAreaComponentDefinitionExtended extends LastWriteWinElementSetComponentDefinition<PBTriggerArea> {
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
* Set a box in the MeshCollider component
|
|
10
|
+
* @param entity - entity to create or replace the TriggerArea component
|
|
11
|
+
* @param collisionMask - the collision layers mask for the trigger to react, default: Player
|
|
12
|
+
*/
|
|
13
|
+
setBox(entity: Entity, collisionMask?: ColliderLayer | ColliderLayer[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
* Set a sphere in the MeshCollider component
|
|
17
|
+
* @param entity - entity to create or replace the TriggerArea component
|
|
18
|
+
* @param collisionMask - the collision layers mask for the trigger to react, default: Player
|
|
19
|
+
*/
|
|
20
|
+
setSphere(entity: Entity, collisionMask?: ColliderLayer | ColliderLayer[]): void;
|
|
21
|
+
}
|
|
22
|
+
export declare function defineTriggerAreaComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): TriggerAreaComponentDefinitionExtended;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineTriggerAreaComponent = void 0;
|
|
4
|
+
const index_gen_1 = require("../generated/index.gen");
|
|
5
|
+
function defineTriggerAreaComponent(engine) {
|
|
6
|
+
const theComponent = (0, index_gen_1.TriggerArea)(engine);
|
|
7
|
+
function getCollisionMask(layers) {
|
|
8
|
+
if (Array.isArray(layers)) {
|
|
9
|
+
return layers.map((item) => item).reduce((prev, item) => prev | item, 0);
|
|
10
|
+
}
|
|
11
|
+
else if (layers) {
|
|
12
|
+
return layers;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
...theComponent,
|
|
17
|
+
setBox(entity, collisionMask) {
|
|
18
|
+
theComponent.createOrReplace(entity, {
|
|
19
|
+
mesh: 0 /* TriggerAreaMeshType.TAMT_BOX */,
|
|
20
|
+
collisionMask: getCollisionMask(collisionMask)
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
setSphere(entity, collisionMask) {
|
|
24
|
+
theComponent.createOrReplace(entity, {
|
|
25
|
+
mesh: 1 /* TriggerAreaMeshType.TAMT_SPHERE */,
|
|
26
|
+
collisionMask: getCollisionMask(collisionMask)
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
exports.defineTriggerAreaComponent = defineTriggerAreaComponent;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TriggerAreaSchema = void 0;
|
|
4
|
+
const trigger_area_gen_1 = require("./pb/decentraland/sdk/components/trigger_area.gen");
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
exports.TriggerAreaSchema = {
|
|
9
|
+
COMPONENT_ID: 1060,
|
|
10
|
+
serialize(value, builder) {
|
|
11
|
+
const writer = trigger_area_gen_1.PBTriggerArea.encode(value);
|
|
12
|
+
const buffer = new Uint8Array(writer.finish(), 0, writer.len);
|
|
13
|
+
builder.writeBuffer(buffer, false);
|
|
14
|
+
},
|
|
15
|
+
deserialize(reader) {
|
|
16
|
+
return trigger_area_gen_1.PBTriggerArea.decode(reader.buffer(), reader.remainingBytes());
|
|
17
|
+
},
|
|
18
|
+
create() {
|
|
19
|
+
// TODO: this is a hack.
|
|
20
|
+
return trigger_area_gen_1.PBTriggerArea.decode(new Uint8Array());
|
|
21
|
+
},
|
|
22
|
+
jsonSchema: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {},
|
|
25
|
+
serializationType: "protocol-buffer",
|
|
26
|
+
protocolBuffer: "PBTriggerArea"
|
|
27
|
+
}
|
|
28
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TriggerAreaResultSchema = void 0;
|
|
4
|
+
const trigger_area_result_gen_1 = require("./pb/decentraland/sdk/components/trigger_area_result.gen");
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
exports.TriggerAreaResultSchema = {
|
|
9
|
+
COMPONENT_ID: 1061,
|
|
10
|
+
serialize(value, builder) {
|
|
11
|
+
const writer = trigger_area_result_gen_1.PBTriggerAreaResult.encode(value);
|
|
12
|
+
const buffer = new Uint8Array(writer.finish(), 0, writer.len);
|
|
13
|
+
builder.writeBuffer(buffer, false);
|
|
14
|
+
},
|
|
15
|
+
deserialize(reader) {
|
|
16
|
+
return trigger_area_result_gen_1.PBTriggerAreaResult.decode(reader.buffer(), reader.remainingBytes());
|
|
17
|
+
},
|
|
18
|
+
create() {
|
|
19
|
+
// TODO: this is a hack.
|
|
20
|
+
return trigger_area_result_gen_1.PBTriggerAreaResult.decode(new Uint8Array());
|
|
21
|
+
},
|
|
22
|
+
jsonSchema: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {},
|
|
25
|
+
serializationType: "protocol-buffer",
|
|
26
|
+
protocolBuffer: "PBTriggerAreaResult"
|
|
27
|
+
}
|
|
28
|
+
};
|
|
@@ -41,6 +41,8 @@ exports.coreComponentMappings = {
|
|
|
41
41
|
"core::RealmInfo": 1106,
|
|
42
42
|
"core::SkyboxTime": 1210,
|
|
43
43
|
"core::TextShape": 1030,
|
|
44
|
+
"core::TriggerArea": 1060,
|
|
45
|
+
"core::TriggerAreaResult": 1061,
|
|
44
46
|
"core::Tween": 1102,
|
|
45
47
|
"core::TweenSequence": 1104,
|
|
46
48
|
"core::TweenState": 1103,
|
|
@@ -30,6 +30,8 @@ import { PBRaycastResult } from './pb/decentraland/sdk/components/raycast_result
|
|
|
30
30
|
import { PBRealmInfo } from './pb/decentraland/sdk/components/realm_info.gen';
|
|
31
31
|
import { PBSkyboxTime } from './pb/decentraland/sdk/components/skybox_time.gen';
|
|
32
32
|
import { PBTextShape } from './pb/decentraland/sdk/components/text_shape.gen';
|
|
33
|
+
import { PBTriggerArea } from './pb/decentraland/sdk/components/trigger_area.gen';
|
|
34
|
+
import { PBTriggerAreaResult } from './pb/decentraland/sdk/components/trigger_area_result.gen';
|
|
33
35
|
import { PBTweenSequence } from './pb/decentraland/sdk/components/tween_sequence.gen';
|
|
34
36
|
import { PBTweenState } from './pb/decentraland/sdk/components/tween_state.gen';
|
|
35
37
|
import { PBUiBackground } from './pb/decentraland/sdk/components/ui_background.gen';
|
|
@@ -74,6 +76,8 @@ import { PBVisibilityComponent } from './pb/decentraland/sdk/components/visibili
|
|
|
74
76
|
/** @public */ export declare const RealmInfo: LastWriteWinElementSetComponentDefinition<PBRealmInfo>;
|
|
75
77
|
/** @public */ export declare const SkyboxTime: LastWriteWinElementSetComponentDefinition<PBSkyboxTime>;
|
|
76
78
|
/** @public */ export declare const TextShape: LastWriteWinElementSetComponentDefinition<PBTextShape>;
|
|
79
|
+
/** @public */ export declare const TriggerArea: LastWriteWinElementSetComponentDefinition<PBTriggerArea>;
|
|
80
|
+
/** @public */ export declare const TriggerAreaResult: GrowOnlyValueSetComponentDefinition<PBTriggerAreaResult>;
|
|
77
81
|
/** @public */ export declare const TweenSequence: LastWriteWinElementSetComponentDefinition<PBTweenSequence>;
|
|
78
82
|
/** @public */ export declare const TweenState: LastWriteWinElementSetComponentDefinition<PBTweenState>;
|
|
79
83
|
/** @public */ export declare const UiBackground: LastWriteWinElementSetComponentDefinition<PBUiBackground>;
|
|
@@ -26,7 +26,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
26
26
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.VisibilityComponent = exports.VirtualCamera = exports.VideoPlayer = exports.VideoEvent = exports.UiTransform = exports.UiText = exports.UiInputResult = exports.UiInput = exports.UiDropdownResult = exports.UiDropdown = exports.UiCanvasInformation = exports.UiBackground = exports.TweenState = exports.TweenSequence = exports.TextShape = exports.SkyboxTime = exports.RealmInfo = exports.RaycastResult = exports.Raycast = exports.PrimaryPointerInfo = exports.PointerLock = exports.PointerEventsResult = exports.PointerEvents = exports.PlayerIdentityData = exports.NftShape = exports.MainCamera = exports.LightSource = exports.InputModifier = exports.GltfNodeModifiers = exports.GltfContainerLoadingState = exports.GltfContainer = exports.EngineInfo = exports.CameraModeArea = exports.CameraMode = exports.Billboard = exports.AvatarShape = exports.AvatarModifierArea = exports.AvatarEquippedData = exports.AvatarEmoteCommand = exports.AvatarBase = exports.AvatarAttach = exports.AudioStream = exports.AudioSource = exports.AudioEvent = void 0;
|
|
29
|
+
exports.VisibilityComponent = exports.VirtualCamera = exports.VideoPlayer = exports.VideoEvent = exports.UiTransform = exports.UiText = exports.UiInputResult = exports.UiInput = exports.UiDropdownResult = exports.UiDropdown = exports.UiCanvasInformation = exports.UiBackground = exports.TweenState = exports.TweenSequence = exports.TriggerAreaResult = exports.TriggerArea = exports.TextShape = exports.SkyboxTime = exports.RealmInfo = exports.RaycastResult = exports.Raycast = exports.PrimaryPointerInfo = exports.PointerLock = exports.PointerEventsResult = exports.PointerEvents = exports.PlayerIdentityData = exports.NftShape = exports.MainCamera = exports.LightSource = exports.InputModifier = exports.GltfNodeModifiers = exports.GltfContainerLoadingState = exports.GltfContainer = exports.EngineInfo = exports.CameraModeArea = exports.CameraMode = exports.Billboard = exports.AvatarShape = exports.AvatarModifierArea = exports.AvatarEquippedData = exports.AvatarEmoteCommand = exports.AvatarBase = exports.AvatarAttach = exports.AudioStream = exports.AudioSource = exports.AudioEvent = void 0;
|
|
30
30
|
const initialization_1 = require("../../runtime/initialization");
|
|
31
31
|
const components = __importStar(require("./index.gen"));
|
|
32
32
|
__exportStar(require("./index.gen"), exports);
|
|
@@ -60,6 +60,8 @@ __exportStar(require("./index.gen"), exports);
|
|
|
60
60
|
/** @public */ exports.RealmInfo = components.RealmInfo(initialization_1.engine);
|
|
61
61
|
/** @public */ exports.SkyboxTime = components.SkyboxTime(initialization_1.engine);
|
|
62
62
|
/** @public */ exports.TextShape = components.TextShape(initialization_1.engine);
|
|
63
|
+
/** @public */ exports.TriggerArea = components.TriggerArea(initialization_1.engine);
|
|
64
|
+
/** @public */ exports.TriggerAreaResult = components.TriggerAreaResult(initialization_1.engine);
|
|
63
65
|
/** @public */ exports.TweenSequence = components.TweenSequence(initialization_1.engine);
|
|
64
66
|
/** @public */ exports.TweenState = components.TweenState(initialization_1.engine);
|
|
65
67
|
/** @public */ exports.UiBackground = components.UiBackground(initialization_1.engine);
|
|
@@ -34,6 +34,8 @@ import { PBRaycastResult } from './pb/decentraland/sdk/components/raycast_result
|
|
|
34
34
|
import { PBRealmInfo } from './pb/decentraland/sdk/components/realm_info.gen';
|
|
35
35
|
import { PBSkyboxTime } from './pb/decentraland/sdk/components/skybox_time.gen';
|
|
36
36
|
import { PBTextShape } from './pb/decentraland/sdk/components/text_shape.gen';
|
|
37
|
+
import { PBTriggerArea } from './pb/decentraland/sdk/components/trigger_area.gen';
|
|
38
|
+
import { PBTriggerAreaResult } from './pb/decentraland/sdk/components/trigger_area_result.gen';
|
|
37
39
|
import { PBTween } from './pb/decentraland/sdk/components/tween.gen';
|
|
38
40
|
import { PBTweenSequence } from './pb/decentraland/sdk/components/tween_sequence.gen';
|
|
39
41
|
import { PBTweenState } from './pb/decentraland/sdk/components/tween_state.gen';
|
|
@@ -83,6 +85,8 @@ export * from './pb/decentraland/sdk/components/raycast_result.gen';
|
|
|
83
85
|
export * from './pb/decentraland/sdk/components/realm_info.gen';
|
|
84
86
|
export * from './pb/decentraland/sdk/components/skybox_time.gen';
|
|
85
87
|
export * from './pb/decentraland/sdk/components/text_shape.gen';
|
|
88
|
+
export * from './pb/decentraland/sdk/components/trigger_area.gen';
|
|
89
|
+
export * from './pb/decentraland/sdk/components/trigger_area_result.gen';
|
|
86
90
|
export * from './pb/decentraland/sdk/components/tween.gen';
|
|
87
91
|
export * from './pb/decentraland/sdk/components/tween_sequence.gen';
|
|
88
92
|
export * from './pb/decentraland/sdk/components/tween_state.gen';
|
|
@@ -134,6 +138,8 @@ export type GSetComponentGetter<T extends GrowOnlyValueSetComponentDefinition<an
|
|
|
134
138
|
/** @public */ export declare const RealmInfo: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBRealmInfo>>;
|
|
135
139
|
/** @public */ export declare const SkyboxTime: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBSkyboxTime>>;
|
|
136
140
|
/** @public */ export declare const TextShape: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTextShape>>;
|
|
141
|
+
/** @public */ export declare const TriggerArea: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTriggerArea>>;
|
|
142
|
+
/** @public */ export declare const TriggerAreaResult: GSetComponentGetter<GrowOnlyValueSetComponentDefinition<PBTriggerAreaResult>>;
|
|
137
143
|
/** @public */ export declare const Tween: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTween>>;
|
|
138
144
|
/** @public */ export declare const TweenSequence: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTweenSequence>>;
|
|
139
145
|
/** @public */ export declare const TweenState: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTweenState>>;
|
|
@@ -185,6 +191,8 @@ export declare const componentDefinitionByName: {
|
|
|
185
191
|
"core::RealmInfo": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBRealmInfo>>;
|
|
186
192
|
"core::SkyboxTime": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBSkyboxTime>>;
|
|
187
193
|
"core::TextShape": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTextShape>>;
|
|
194
|
+
"core::TriggerArea": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTriggerArea>>;
|
|
195
|
+
"core::TriggerAreaResult": GSetComponentGetter<GrowOnlyValueSetComponentDefinition<PBTriggerAreaResult>>;
|
|
188
196
|
"core::Tween": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTween>>;
|
|
189
197
|
"core::TweenSequence": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTweenSequence>>;
|
|
190
198
|
"core::TweenState": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBTweenState>>;
|