@dcl/ecs 7.22.1 → 7.22.2-23600507492.commit-5f7f8a0

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.
@@ -25,5 +25,14 @@ export declare const enum PointerEventType {
25
25
  PET_UP = 0,
26
26
  PET_DOWN = 1,
27
27
  PET_HOVER_ENTER = 2,
28
- PET_HOVER_LEAVE = 3
28
+ PET_HOVER_LEAVE = 3,
29
+ PET_PROXIMITY_ENTER = 4,
30
+ PET_PROXIMITY_LEAVE = 5
31
+ }
32
+ /**
33
+ * @public
34
+ */
35
+ export declare const enum InteractionType {
36
+ CURSOR = 0,
37
+ PROXIMITY = 1
29
38
  }
@@ -30,4 +30,14 @@ export var PointerEventType;
30
30
  PointerEventType[PointerEventType["PET_DOWN"] = 1] = "PET_DOWN";
31
31
  PointerEventType[PointerEventType["PET_HOVER_ENTER"] = 2] = "PET_HOVER_ENTER";
32
32
  PointerEventType[PointerEventType["PET_HOVER_LEAVE"] = 3] = "PET_HOVER_LEAVE";
33
+ PointerEventType[PointerEventType["PET_PROXIMITY_ENTER"] = 4] = "PET_PROXIMITY_ENTER";
34
+ PointerEventType[PointerEventType["PET_PROXIMITY_LEAVE"] = 5] = "PET_PROXIMITY_LEAVE";
33
35
  })(PointerEventType || (PointerEventType = {}));
36
+ /**
37
+ * @public
38
+ */
39
+ export var InteractionType;
40
+ (function (InteractionType) {
41
+ InteractionType[InteractionType["CURSOR"] = 0] = "CURSOR";
42
+ InteractionType[InteractionType["PROXIMITY"] = 1] = "PROXIMITY";
43
+ })(InteractionType || (InteractionType = {}));
@@ -1,5 +1,5 @@
1
1
  import _m0 from "protobufjs/minimal";
2
- import { InputAction, PointerEventType } from "./common/input_action.gen";
2
+ import { InputAction, InteractionType, PointerEventType } from "./common/input_action.gen";
3
3
  /**
4
4
  * PointerEvents adds configurable pointer-based interactions to the attached Entity.
5
5
  *
@@ -61,6 +61,8 @@ export interface PBPointerEvents_Info {
61
61
  showHighlight?: boolean | undefined;
62
62
  /** range of interaction from the avatar's position (default 0) */
63
63
  maxPlayerDistance?: number | undefined;
64
+ /** resolution order when multiple events overlap, higher wins (default 0) */
65
+ priority?: number | undefined;
64
66
  }
65
67
  /**
66
68
  * @public
@@ -70,6 +72,8 @@ export interface PBPointerEvents_Entry {
70
72
  eventType: PointerEventType;
71
73
  /** additional configuration for this detection */
72
74
  eventInfo: PBPointerEvents_Info | undefined;
75
+ /** the type of interaction source (default 0 == CURSOR) */
76
+ interactionType?: InteractionType | undefined;
73
77
  }
74
78
  /**
75
79
  * @public
@@ -47,6 +47,7 @@ function createBasePBPointerEvents_Info() {
47
47
  showFeedback: undefined,
48
48
  showHighlight: undefined,
49
49
  maxPlayerDistance: undefined,
50
+ priority: undefined,
50
51
  };
51
52
  }
52
53
  /**
@@ -73,6 +74,9 @@ export var PBPointerEvents_Info;
73
74
  if (message.maxPlayerDistance !== undefined) {
74
75
  writer.uint32(53).float(message.maxPlayerDistance);
75
76
  }
77
+ if (message.priority !== undefined) {
78
+ writer.uint32(56).uint32(message.priority);
79
+ }
76
80
  return writer;
77
81
  }
78
82
  PBPointerEvents_Info.encode = encode;
@@ -119,6 +123,12 @@ export var PBPointerEvents_Info;
119
123
  }
120
124
  message.maxPlayerDistance = reader.float();
121
125
  continue;
126
+ case 7:
127
+ if (tag !== 56) {
128
+ break;
129
+ }
130
+ message.priority = reader.uint32();
131
+ continue;
122
132
  }
123
133
  if ((tag & 7) === 4 || tag === 0) {
124
134
  break;
@@ -130,7 +140,7 @@ export var PBPointerEvents_Info;
130
140
  PBPointerEvents_Info.decode = decode;
131
141
  })(PBPointerEvents_Info || (PBPointerEvents_Info = {}));
132
142
  function createBasePBPointerEvents_Entry() {
133
- return { eventType: 0, eventInfo: undefined };
143
+ return { eventType: 0, eventInfo: undefined, interactionType: undefined };
134
144
  }
135
145
  /**
136
146
  * @public
@@ -144,6 +154,9 @@ export var PBPointerEvents_Entry;
144
154
  if (message.eventInfo !== undefined) {
145
155
  PBPointerEvents_Info.encode(message.eventInfo, writer.uint32(18).fork()).ldelim();
146
156
  }
157
+ if (message.interactionType !== undefined) {
158
+ writer.uint32(24).int32(message.interactionType);
159
+ }
147
160
  return writer;
148
161
  }
149
162
  PBPointerEvents_Entry.encode = encode;
@@ -166,6 +179,12 @@ export var PBPointerEvents_Entry;
166
179
  }
167
180
  message.eventInfo = PBPointerEvents_Info.decode(reader, reader.uint32());
168
181
  continue;
182
+ case 3:
183
+ if (tag !== 24) {
184
+ break;
185
+ }
186
+ message.interactionType = reader.int32();
187
+ continue;
169
188
  }
170
189
  if ((tag & 7) === 4 || tag === 0) {
171
190
  break;
@@ -17,6 +17,7 @@ export type EventSystemOptions = {
17
17
  showFeedback?: boolean;
18
18
  showHighlight?: boolean;
19
19
  maxPlayerDistance?: number;
20
+ priority?: number;
20
21
  };
21
22
  export declare const getDefaultOpts: (opts?: Partial<EventSystemOptions>) => EventSystemOptions;
22
23
  /**
@@ -47,6 +48,30 @@ export interface PointerEventsSystem {
47
48
  * @param entity - Entity where the callback was attached
48
49
  */
49
50
  removeOnPointerHoverLeave(entity: Entity): void;
51
+ /**
52
+ * @public
53
+ * Remove the callback for onProximityDown event
54
+ * @param entity - Entity where the callback was attached
55
+ */
56
+ removeOnProximityDown(entity: Entity): void;
57
+ /**
58
+ * @public
59
+ * Remove the callback for onProximityUp event
60
+ * @param entity - Entity where the callback was attached
61
+ */
62
+ removeOnProximityUp(entity: Entity): void;
63
+ /**
64
+ * @public
65
+ * Remove the callback for onProximityEnter event
66
+ * @param entity - Entity where the callback was attached
67
+ */
68
+ removeOnProximityEnter(entity: Entity): void;
69
+ /**
70
+ * @public
71
+ * Remove the callback for onProximityLeave event
72
+ * @param entity - Entity where the callback was attached
73
+ */
74
+ removeOnProximityLeave(entity: Entity): void;
50
75
  /**
51
76
  * @public
52
77
  * Execute callback when the user press the InputButton pointing at the entity
@@ -101,6 +126,46 @@ export interface PointerEventsSystem {
101
126
  entity: Entity;
102
127
  opts?: Partial<EventSystemOptions>;
103
128
  }, cb: EventSystemCallback): void;
129
+ /**
130
+ * @public
131
+ * Execute callback when the user presses the proximity button on the entity
132
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
133
+ * @param cb - Function to execute when click fires
134
+ */
135
+ onProximityDown(pointerData: {
136
+ entity: Entity;
137
+ opts?: Partial<EventSystemOptions>;
138
+ }, cb: EventSystemCallback): void;
139
+ /**
140
+ * @public
141
+ * Execute callback when the user releases the proximity button on the entity
142
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
143
+ * @param cb - Function to execute when event fires
144
+ */
145
+ onProximityUp(pointerData: {
146
+ entity: Entity;
147
+ opts?: Partial<EventSystemOptions>;
148
+ }, cb: EventSystemCallback): void;
149
+ /**
150
+ * @public
151
+ * Execute callback when the entity enters the proximity zone of the user
152
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
153
+ * @param cb - Function to execute when event fires
154
+ */
155
+ onProximityEnter(pointerData: {
156
+ entity: Entity;
157
+ opts?: Partial<EventSystemOptions>;
158
+ }, cb: EventSystemCallback): void;
159
+ /**
160
+ * @public
161
+ * Execute callback when the entity leaves the proximity zone of the user
162
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
163
+ * @param cb - Function to execute when event fires
164
+ */
165
+ onProximityLeave(pointerData: {
166
+ entity: Entity;
167
+ opts?: Partial<EventSystemOptions>;
168
+ }, cb: EventSystemCallback): void;
104
169
  }
105
170
  /**
106
171
  * @public
@@ -18,12 +18,14 @@ export function createPointerEventsSystem(engine, inputSystem) {
18
18
  EventType[EventType["Up"] = 2] = "Up";
19
19
  EventType[EventType["HoverEnter"] = 3] = "HoverEnter";
20
20
  EventType[EventType["HoverLeave"] = 4] = "HoverLeave";
21
+ EventType[EventType["ProximityEnter"] = 5] = "ProximityEnter";
22
+ EventType[EventType["ProximityLeave"] = 6] = "ProximityLeave";
21
23
  })(EventType || (EventType = {}));
22
24
  const eventsMap = new Map();
23
25
  function getEvent(entity) {
24
26
  return eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity);
25
27
  }
26
- function setPointerEvent(entity, type, opts) {
28
+ function setPointerEvent(entity, type, opts, interactionType = 0 /* InteractionType.CURSOR */) {
27
29
  const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity);
28
30
  pointerEvent.pointerEvents.push({
29
31
  eventType: type,
@@ -33,15 +35,19 @@ export function createPointerEventsSystem(engine, inputSystem) {
33
35
  showHighlight: opts.showHighlight,
34
36
  hoverText: opts.hoverText,
35
37
  maxDistance: opts.maxDistance,
36
- maxPlayerDistance: opts.maxPlayerDistance
37
- }
38
+ maxPlayerDistance: opts.maxPlayerDistance,
39
+ priority: opts.priority
40
+ },
41
+ interactionType: interactionType ?? 0 /* InteractionType.CURSOR */
38
42
  });
39
43
  }
40
- function removePointerEvent(entity, type, button) {
44
+ function removePointerEvent(entity, type, button, interactionType = 0 /* InteractionType.CURSOR */) {
41
45
  const pointerEvent = PointerEvents.getMutableOrNull(entity);
42
46
  if (!pointerEvent)
43
47
  return;
44
- pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button && pointer.eventType === type));
48
+ pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button &&
49
+ pointer.eventType === type &&
50
+ pointer.interactionType === interactionType));
45
51
  }
46
52
  function getPointerEvent(eventType) {
47
53
  if (eventType === EventType.Up) {
@@ -53,9 +59,15 @@ export function createPointerEventsSystem(engine, inputSystem) {
53
59
  else if (eventType === EventType.HoverEnter) {
54
60
  return 2 /* PointerEventType.PET_HOVER_ENTER */;
55
61
  }
62
+ else if (eventType === EventType.ProximityEnter) {
63
+ return 4 /* PointerEventType.PET_PROXIMITY_ENTER */;
64
+ }
65
+ else if (eventType === EventType.ProximityLeave) {
66
+ return 5 /* PointerEventType.PET_PROXIMITY_LEAVE */;
67
+ }
56
68
  return 1 /* PointerEventType.PET_DOWN */;
57
69
  }
58
- function removeEvent(entity, type) {
70
+ function removeEvent(entity, type, interactionType = 0 /* InteractionType.CURSOR */) {
59
71
  const event = getEvent(entity);
60
72
  const pointerEvent = event.get(type);
61
73
  if (pointerEvent?.opts.hoverText) {
@@ -78,7 +90,9 @@ export function createPointerEventsSystem(engine, inputSystem) {
78
90
  if (eventType === EventType.Down ||
79
91
  eventType === EventType.Up ||
80
92
  eventType === EventType.HoverEnter ||
81
- eventType === EventType.HoverLeave) {
93
+ eventType === EventType.HoverLeave ||
94
+ eventType === EventType.ProximityEnter ||
95
+ eventType === EventType.ProximityLeave) {
82
96
  const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
83
97
  if (command) {
84
98
  checkNotThenable(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
@@ -125,6 +139,38 @@ export function createPointerEventsSystem(engine, inputSystem) {
125
139
  getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
126
140
  setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
127
141
  };
142
+ const onProximityDown = (...args) => {
143
+ const [data, cb] = args;
144
+ const { entity, opts } = data;
145
+ const options = getDefaultOpts(opts);
146
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
147
+ getEvent(entity).set(EventType.Down, { cb, opts: options });
148
+ setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options, 1 /* InteractionType.PROXIMITY */);
149
+ };
150
+ const onProximityUp = (...args) => {
151
+ const [data, cb] = args;
152
+ const { entity, opts } = data;
153
+ const options = getDefaultOpts(opts);
154
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
155
+ getEvent(entity).set(EventType.Up, { cb, opts: options });
156
+ setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options, 1 /* InteractionType.PROXIMITY */);
157
+ };
158
+ const onProximityEnter = (...args) => {
159
+ const [data, cb] = args;
160
+ const { entity, opts } = data;
161
+ const options = getDefaultOpts(opts);
162
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
163
+ getEvent(entity).set(EventType.ProximityEnter, { cb, opts: options });
164
+ setPointerEvent(entity, 4 /* PointerEventType.PET_PROXIMITY_ENTER */, options, 1 /* InteractionType.PROXIMITY */);
165
+ };
166
+ const onProximityLeave = (...args) => {
167
+ const [data, cb] = args;
168
+ const { entity, opts } = data;
169
+ const options = getDefaultOpts(opts);
170
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
171
+ getEvent(entity).set(EventType.ProximityLeave, { cb, opts: options });
172
+ setPointerEvent(entity, 5 /* PointerEventType.PET_PROXIMITY_LEAVE */, options, 1 /* InteractionType.PROXIMITY */);
173
+ };
128
174
  return {
129
175
  removeOnClick(entity) {
130
176
  removeEvent(entity, EventType.Click);
@@ -141,6 +187,18 @@ export function createPointerEventsSystem(engine, inputSystem) {
141
187
  removeOnPointerHoverLeave(entity) {
142
188
  removeEvent(entity, EventType.HoverLeave);
143
189
  },
190
+ removeOnProximityDown(entity) {
191
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
192
+ },
193
+ removeOnProximityUp(entity) {
194
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
195
+ },
196
+ removeOnProximityEnter(entity) {
197
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
198
+ },
199
+ removeOnProximityLeave(entity) {
200
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
201
+ },
144
202
  onClick(value, cb) {
145
203
  const { entity } = value;
146
204
  const options = getDefaultOpts(value.opts);
@@ -153,6 +211,10 @@ export function createPointerEventsSystem(engine, inputSystem) {
153
211
  onPointerDown,
154
212
  onPointerUp,
155
213
  onPointerHoverEnter,
156
- onPointerHoverLeave
214
+ onPointerHoverLeave,
215
+ onProximityDown,
216
+ onProximityUp,
217
+ onProximityEnter,
218
+ onProximityLeave
157
219
  };
158
220
  }
@@ -25,5 +25,14 @@ export declare const enum PointerEventType {
25
25
  PET_UP = 0,
26
26
  PET_DOWN = 1,
27
27
  PET_HOVER_ENTER = 2,
28
- PET_HOVER_LEAVE = 3
28
+ PET_HOVER_LEAVE = 3,
29
+ PET_PROXIMITY_ENTER = 4,
30
+ PET_PROXIMITY_LEAVE = 5
31
+ }
32
+ /**
33
+ * @public
34
+ */
35
+ export declare const enum InteractionType {
36
+ CURSOR = 0,
37
+ PROXIMITY = 1
29
38
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /* eslint-disable */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.PointerEventType = exports.InputAction = void 0;
4
+ exports.InteractionType = exports.PointerEventType = exports.InputAction = void 0;
5
5
  const protobufPackageSarasa = "decentraland.sdk.components.common";
6
6
  /**
7
7
  * @public
@@ -33,4 +33,14 @@ var PointerEventType;
33
33
  PointerEventType[PointerEventType["PET_DOWN"] = 1] = "PET_DOWN";
34
34
  PointerEventType[PointerEventType["PET_HOVER_ENTER"] = 2] = "PET_HOVER_ENTER";
35
35
  PointerEventType[PointerEventType["PET_HOVER_LEAVE"] = 3] = "PET_HOVER_LEAVE";
36
+ PointerEventType[PointerEventType["PET_PROXIMITY_ENTER"] = 4] = "PET_PROXIMITY_ENTER";
37
+ PointerEventType[PointerEventType["PET_PROXIMITY_LEAVE"] = 5] = "PET_PROXIMITY_LEAVE";
36
38
  })(PointerEventType = exports.PointerEventType || (exports.PointerEventType = {}));
39
+ /**
40
+ * @public
41
+ */
42
+ var InteractionType;
43
+ (function (InteractionType) {
44
+ InteractionType[InteractionType["CURSOR"] = 0] = "CURSOR";
45
+ InteractionType[InteractionType["PROXIMITY"] = 1] = "PROXIMITY";
46
+ })(InteractionType = exports.InteractionType || (exports.InteractionType = {}));
@@ -1,5 +1,5 @@
1
1
  import _m0 from "protobufjs/minimal";
2
- import { InputAction, PointerEventType } from "./common/input_action.gen";
2
+ import { InputAction, InteractionType, PointerEventType } from "./common/input_action.gen";
3
3
  /**
4
4
  * PointerEvents adds configurable pointer-based interactions to the attached Entity.
5
5
  *
@@ -61,6 +61,8 @@ export interface PBPointerEvents_Info {
61
61
  showHighlight?: boolean | undefined;
62
62
  /** range of interaction from the avatar's position (default 0) */
63
63
  maxPlayerDistance?: number | undefined;
64
+ /** resolution order when multiple events overlap, higher wins (default 0) */
65
+ priority?: number | undefined;
64
66
  }
65
67
  /**
66
68
  * @public
@@ -70,6 +72,8 @@ export interface PBPointerEvents_Entry {
70
72
  eventType: PointerEventType;
71
73
  /** additional configuration for this detection */
72
74
  eventInfo: PBPointerEvents_Info | undefined;
75
+ /** the type of interaction source (default 0 == CURSOR) */
76
+ interactionType?: InteractionType | undefined;
73
77
  }
74
78
  /**
75
79
  * @public
@@ -53,6 +53,7 @@ function createBasePBPointerEvents_Info() {
53
53
  showFeedback: undefined,
54
54
  showHighlight: undefined,
55
55
  maxPlayerDistance: undefined,
56
+ priority: undefined,
56
57
  };
57
58
  }
58
59
  /**
@@ -79,6 +80,9 @@ var PBPointerEvents_Info;
79
80
  if (message.maxPlayerDistance !== undefined) {
80
81
  writer.uint32(53).float(message.maxPlayerDistance);
81
82
  }
83
+ if (message.priority !== undefined) {
84
+ writer.uint32(56).uint32(message.priority);
85
+ }
82
86
  return writer;
83
87
  }
84
88
  PBPointerEvents_Info.encode = encode;
@@ -125,6 +129,12 @@ var PBPointerEvents_Info;
125
129
  }
126
130
  message.maxPlayerDistance = reader.float();
127
131
  continue;
132
+ case 7:
133
+ if (tag !== 56) {
134
+ break;
135
+ }
136
+ message.priority = reader.uint32();
137
+ continue;
128
138
  }
129
139
  if ((tag & 7) === 4 || tag === 0) {
130
140
  break;
@@ -136,7 +146,7 @@ var PBPointerEvents_Info;
136
146
  PBPointerEvents_Info.decode = decode;
137
147
  })(PBPointerEvents_Info = exports.PBPointerEvents_Info || (exports.PBPointerEvents_Info = {}));
138
148
  function createBasePBPointerEvents_Entry() {
139
- return { eventType: 0, eventInfo: undefined };
149
+ return { eventType: 0, eventInfo: undefined, interactionType: undefined };
140
150
  }
141
151
  /**
142
152
  * @public
@@ -150,6 +160,9 @@ var PBPointerEvents_Entry;
150
160
  if (message.eventInfo !== undefined) {
151
161
  PBPointerEvents_Info.encode(message.eventInfo, writer.uint32(18).fork()).ldelim();
152
162
  }
163
+ if (message.interactionType !== undefined) {
164
+ writer.uint32(24).int32(message.interactionType);
165
+ }
153
166
  return writer;
154
167
  }
155
168
  PBPointerEvents_Entry.encode = encode;
@@ -172,6 +185,12 @@ var PBPointerEvents_Entry;
172
185
  }
173
186
  message.eventInfo = PBPointerEvents_Info.decode(reader, reader.uint32());
174
187
  continue;
188
+ case 3:
189
+ if (tag !== 24) {
190
+ break;
191
+ }
192
+ message.interactionType = reader.int32();
193
+ continue;
175
194
  }
176
195
  if ((tag & 7) === 4 || tag === 0) {
177
196
  break;
@@ -17,6 +17,7 @@ export type EventSystemOptions = {
17
17
  showFeedback?: boolean;
18
18
  showHighlight?: boolean;
19
19
  maxPlayerDistance?: number;
20
+ priority?: number;
20
21
  };
21
22
  export declare const getDefaultOpts: (opts?: Partial<EventSystemOptions>) => EventSystemOptions;
22
23
  /**
@@ -47,6 +48,30 @@ export interface PointerEventsSystem {
47
48
  * @param entity - Entity where the callback was attached
48
49
  */
49
50
  removeOnPointerHoverLeave(entity: Entity): void;
51
+ /**
52
+ * @public
53
+ * Remove the callback for onProximityDown event
54
+ * @param entity - Entity where the callback was attached
55
+ */
56
+ removeOnProximityDown(entity: Entity): void;
57
+ /**
58
+ * @public
59
+ * Remove the callback for onProximityUp event
60
+ * @param entity - Entity where the callback was attached
61
+ */
62
+ removeOnProximityUp(entity: Entity): void;
63
+ /**
64
+ * @public
65
+ * Remove the callback for onProximityEnter event
66
+ * @param entity - Entity where the callback was attached
67
+ */
68
+ removeOnProximityEnter(entity: Entity): void;
69
+ /**
70
+ * @public
71
+ * Remove the callback for onProximityLeave event
72
+ * @param entity - Entity where the callback was attached
73
+ */
74
+ removeOnProximityLeave(entity: Entity): void;
50
75
  /**
51
76
  * @public
52
77
  * Execute callback when the user press the InputButton pointing at the entity
@@ -101,6 +126,46 @@ export interface PointerEventsSystem {
101
126
  entity: Entity;
102
127
  opts?: Partial<EventSystemOptions>;
103
128
  }, cb: EventSystemCallback): void;
129
+ /**
130
+ * @public
131
+ * Execute callback when the user presses the proximity button on the entity
132
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
133
+ * @param cb - Function to execute when click fires
134
+ */
135
+ onProximityDown(pointerData: {
136
+ entity: Entity;
137
+ opts?: Partial<EventSystemOptions>;
138
+ }, cb: EventSystemCallback): void;
139
+ /**
140
+ * @public
141
+ * Execute callback when the user releases the proximity button on the entity
142
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
143
+ * @param cb - Function to execute when event fires
144
+ */
145
+ onProximityUp(pointerData: {
146
+ entity: Entity;
147
+ opts?: Partial<EventSystemOptions>;
148
+ }, cb: EventSystemCallback): void;
149
+ /**
150
+ * @public
151
+ * Execute callback when the entity enters the proximity zone of the user
152
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
153
+ * @param cb - Function to execute when event fires
154
+ */
155
+ onProximityEnter(pointerData: {
156
+ entity: Entity;
157
+ opts?: Partial<EventSystemOptions>;
158
+ }, cb: EventSystemCallback): void;
159
+ /**
160
+ * @public
161
+ * Execute callback when the entity leaves the proximity zone of the user
162
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
163
+ * @param cb - Function to execute when event fires
164
+ */
165
+ onProximityLeave(pointerData: {
166
+ entity: Entity;
167
+ opts?: Partial<EventSystemOptions>;
168
+ }, cb: EventSystemCallback): void;
104
169
  }
105
170
  /**
106
171
  * @public
@@ -45,12 +45,14 @@ function createPointerEventsSystem(engine, inputSystem) {
45
45
  EventType[EventType["Up"] = 2] = "Up";
46
46
  EventType[EventType["HoverEnter"] = 3] = "HoverEnter";
47
47
  EventType[EventType["HoverLeave"] = 4] = "HoverLeave";
48
+ EventType[EventType["ProximityEnter"] = 5] = "ProximityEnter";
49
+ EventType[EventType["ProximityLeave"] = 6] = "ProximityLeave";
48
50
  })(EventType || (EventType = {}));
49
51
  const eventsMap = new Map();
50
52
  function getEvent(entity) {
51
53
  return eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity);
52
54
  }
53
- function setPointerEvent(entity, type, opts) {
55
+ function setPointerEvent(entity, type, opts, interactionType = 0 /* InteractionType.CURSOR */) {
54
56
  const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity);
55
57
  pointerEvent.pointerEvents.push({
56
58
  eventType: type,
@@ -60,15 +62,19 @@ function createPointerEventsSystem(engine, inputSystem) {
60
62
  showHighlight: opts.showHighlight,
61
63
  hoverText: opts.hoverText,
62
64
  maxDistance: opts.maxDistance,
63
- maxPlayerDistance: opts.maxPlayerDistance
64
- }
65
+ maxPlayerDistance: opts.maxPlayerDistance,
66
+ priority: opts.priority
67
+ },
68
+ interactionType: interactionType ?? 0 /* InteractionType.CURSOR */
65
69
  });
66
70
  }
67
- function removePointerEvent(entity, type, button) {
71
+ function removePointerEvent(entity, type, button, interactionType = 0 /* InteractionType.CURSOR */) {
68
72
  const pointerEvent = PointerEvents.getMutableOrNull(entity);
69
73
  if (!pointerEvent)
70
74
  return;
71
- pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button && pointer.eventType === type));
75
+ pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button &&
76
+ pointer.eventType === type &&
77
+ pointer.interactionType === interactionType));
72
78
  }
73
79
  function getPointerEvent(eventType) {
74
80
  if (eventType === EventType.Up) {
@@ -80,9 +86,15 @@ function createPointerEventsSystem(engine, inputSystem) {
80
86
  else if (eventType === EventType.HoverEnter) {
81
87
  return 2 /* PointerEventType.PET_HOVER_ENTER */;
82
88
  }
89
+ else if (eventType === EventType.ProximityEnter) {
90
+ return 4 /* PointerEventType.PET_PROXIMITY_ENTER */;
91
+ }
92
+ else if (eventType === EventType.ProximityLeave) {
93
+ return 5 /* PointerEventType.PET_PROXIMITY_LEAVE */;
94
+ }
83
95
  return 1 /* PointerEventType.PET_DOWN */;
84
96
  }
85
- function removeEvent(entity, type) {
97
+ function removeEvent(entity, type, interactionType = 0 /* InteractionType.CURSOR */) {
86
98
  const event = getEvent(entity);
87
99
  const pointerEvent = event.get(type);
88
100
  if (pointerEvent?.opts.hoverText) {
@@ -105,7 +117,9 @@ function createPointerEventsSystem(engine, inputSystem) {
105
117
  if (eventType === EventType.Down ||
106
118
  eventType === EventType.Up ||
107
119
  eventType === EventType.HoverEnter ||
108
- eventType === EventType.HoverLeave) {
120
+ eventType === EventType.HoverLeave ||
121
+ eventType === EventType.ProximityEnter ||
122
+ eventType === EventType.ProximityLeave) {
109
123
  const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
110
124
  if (command) {
111
125
  (0, invariant_1.checkNotThenable)(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
@@ -152,6 +166,38 @@ function createPointerEventsSystem(engine, inputSystem) {
152
166
  getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
153
167
  setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
154
168
  };
169
+ const onProximityDown = (...args) => {
170
+ const [data, cb] = args;
171
+ const { entity, opts } = data;
172
+ const options = (0, exports.getDefaultOpts)(opts);
173
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
174
+ getEvent(entity).set(EventType.Down, { cb, opts: options });
175
+ setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options, 1 /* InteractionType.PROXIMITY */);
176
+ };
177
+ const onProximityUp = (...args) => {
178
+ const [data, cb] = args;
179
+ const { entity, opts } = data;
180
+ const options = (0, exports.getDefaultOpts)(opts);
181
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
182
+ getEvent(entity).set(EventType.Up, { cb, opts: options });
183
+ setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options, 1 /* InteractionType.PROXIMITY */);
184
+ };
185
+ const onProximityEnter = (...args) => {
186
+ const [data, cb] = args;
187
+ const { entity, opts } = data;
188
+ const options = (0, exports.getDefaultOpts)(opts);
189
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
190
+ getEvent(entity).set(EventType.ProximityEnter, { cb, opts: options });
191
+ setPointerEvent(entity, 4 /* PointerEventType.PET_PROXIMITY_ENTER */, options, 1 /* InteractionType.PROXIMITY */);
192
+ };
193
+ const onProximityLeave = (...args) => {
194
+ const [data, cb] = args;
195
+ const { entity, opts } = data;
196
+ const options = (0, exports.getDefaultOpts)(opts);
197
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
198
+ getEvent(entity).set(EventType.ProximityLeave, { cb, opts: options });
199
+ setPointerEvent(entity, 5 /* PointerEventType.PET_PROXIMITY_LEAVE */, options, 1 /* InteractionType.PROXIMITY */);
200
+ };
155
201
  return {
156
202
  removeOnClick(entity) {
157
203
  removeEvent(entity, EventType.Click);
@@ -168,6 +214,18 @@ function createPointerEventsSystem(engine, inputSystem) {
168
214
  removeOnPointerHoverLeave(entity) {
169
215
  removeEvent(entity, EventType.HoverLeave);
170
216
  },
217
+ removeOnProximityDown(entity) {
218
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
219
+ },
220
+ removeOnProximityUp(entity) {
221
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
222
+ },
223
+ removeOnProximityEnter(entity) {
224
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
225
+ },
226
+ removeOnProximityLeave(entity) {
227
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
228
+ },
171
229
  onClick(value, cb) {
172
230
  const { entity } = value;
173
231
  const options = (0, exports.getDefaultOpts)(value.opts);
@@ -180,7 +238,11 @@ function createPointerEventsSystem(engine, inputSystem) {
180
238
  onPointerDown,
181
239
  onPointerUp,
182
240
  onPointerHoverEnter,
183
- onPointerHoverLeave
241
+ onPointerHoverLeave,
242
+ onProximityDown,
243
+ onProximityUp,
244
+ onProximityEnter,
245
+ onProximityLeave
184
246
  };
185
247
  }
186
248
  exports.createPointerEventsSystem = createPointerEventsSystem;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dcl/ecs",
3
3
  "description": "Decentraland ECS",
4
- "version": "7.22.1",
4
+ "version": "7.22.2-23600507492.commit-5f7f8a0",
5
5
  "author": "DCL",
6
6
  "bugs": "https://github.com/decentraland/ecs/issues",
7
7
  "files": [
@@ -34,5 +34,5 @@
34
34
  "dependencies": {},
35
35
  "types": "./dist/index.d.ts",
36
36
  "typings": "./dist/index.d.ts",
37
- "commit": "02288870c7c740e4dcd970c6b4fc1dd4f81c5943"
37
+ "commit": "5f7f8a09410c9cb0e2e0e0d669dfc3733e76a8e8"
38
38
  }