Skip to content

Commit 2910e3d

Browse files
robtfmkuruk-mm
andauthored
Feat/pointer position and drag (#1052)
* update protocol * unch * missing * add ui drag handlers * lints are not a commit hook * build * missed the trigger --------- Co-authored-by: Mateo "Kuruk" Miccino <mateomiccino@gmail.com>
1 parent ea9e109 commit 2910e3d

File tree

19 files changed

+280
-57
lines changed

19 files changed

+280
-57
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@
1919
"packages/@dcl/inspector/hot-reload.js": false
2020
},
2121
"[typescript]": {
22-
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
22+
"editor.defaultFormatter": "vscode.typescript-language-features"
2323
}
2424
}

package-lock.json

Lines changed: 31 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"bugs": "https://github.com/decentraland/js-sdk-toolchain/issues",
77
"dependencies": {
88
"@actions/core": "^1.10.0",
9-
"@dcl/protocol": "1.0.0-12415236132.commit-53e881e",
9+
"@dcl/protocol": "https://sdk-team-cdn.decentraland.org/@dcl/protocol/branch//dcl-protocol-1.0.0-12791995584.commit-4338852.tgz",
1010
"@dcl/quickjs-emscripten": "^0.21.0-3680274614.commit-1808aa1",
1111
"@dcl/ts-proto": "1.153.0",
1212
"@types/fs-extra": "^9.0.12",

packages/@dcl/ecs/src/systems/events.ts

Lines changed: 106 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,27 @@ export interface PointerEventsSystem {
6666
*/
6767
removeOnPointerHoverLeave(entity: Entity): void
6868

69+
/**
70+
* @public
71+
* Remove the callback for onPointerDrag event
72+
* @param entity - Entity where the callback was attached
73+
*/
74+
removeOnPointerDrag(entity: Entity): void
75+
76+
/**
77+
* @public
78+
* Remove the callback for onPointerDragLocked event
79+
* @param entity - Entity where the callback was attached
80+
*/
81+
removeOnPointerDragLocked(entity: Entity): void
82+
83+
/**
84+
* @public
85+
* Remove the callback for onPointerDragEnd event
86+
* @param entity - Entity where the callback was attached
87+
*/
88+
removeOnPointerDragEnd(entity: Entity): void
89+
6990
/**
7091
* @internal
7192
* Execute callback when the user clicks the entity.
@@ -124,6 +145,34 @@ export interface PointerEventsSystem {
124145
pointerData: { entity: Entity; opts?: Partial<EventSystemOptions> },
125146
cb: EventSystemCallback
126147
): void
148+
149+
/**
150+
* @public
151+
* Execute callback when the user clicks and drags the pointer from inside the entity
152+
* @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
153+
* @param cb - Function to execute when click fires
154+
*/
155+
onPointerDrag(pointerData: { entity: Entity; opts?: Partial<EventSystemOptions> }, cb: EventSystemCallback): void
156+
157+
/**
158+
* @public
159+
* Execute callback when the user clicks and drags the pointer from inside the entity,
160+
* locking the cursor in place
161+
* @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
162+
* @param cb - Function to execute when click fires
163+
*/
164+
onPointerDragLocked(
165+
pointerData: { entity: Entity; opts?: Partial<EventSystemOptions> },
166+
cb: EventSystemCallback
167+
): void
168+
169+
/**
170+
* @public
171+
* Execute callback when the user releases the button after a drag
172+
* @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
173+
* @param cb - Function to execute when click fires
174+
*/
175+
onPointerDragEnd(pointerData: { entity: Entity; opts?: Partial<EventSystemOptions> }, cb: EventSystemCallback): void
127176
}
128177

129178
/**
@@ -138,7 +187,10 @@ export function createPointerEventsSystem(engine: IEngine, inputSystem: IInputSy
138187
Down,
139188
Up,
140189
HoverEnter,
141-
HoverLeave
190+
HoverLeave,
191+
Drag,
192+
DragLocked,
193+
DragEnd
142194
}
143195
type EventMapType = Map<EventType, { cb: EventSystemCallback; opts: EventSystemOptions }>
144196

@@ -177,6 +229,12 @@ export function createPointerEventsSystem(engine: IEngine, inputSystem: IInputSy
177229
return PointerEventType.PET_HOVER_LEAVE
178230
} else if (eventType === EventType.HoverEnter) {
179231
return PointerEventType.PET_HOVER_ENTER
232+
} else if (eventType === EventType.Drag) {
233+
return PointerEventType.PET_DRAG
234+
} else if (eventType === EventType.DragLocked) {
235+
return PointerEventType.PET_DRAG_LOCKED
236+
} else if (eventType === EventType.DragEnd) {
237+
return PointerEventType.PET_DRAG_END
180238
}
181239
return PointerEventType.PET_DOWN
182240
}
@@ -210,7 +268,10 @@ export function createPointerEventsSystem(engine: IEngine, inputSystem: IInputSy
210268
eventType === EventType.Down ||
211269
eventType === EventType.Up ||
212270
eventType === EventType.HoverEnter ||
213-
eventType === EventType.HoverLeave
271+
eventType === EventType.HoverLeave ||
272+
eventType === EventType.Drag ||
273+
eventType === EventType.DragLocked ||
274+
eventType === EventType.DragEnd
214275
) {
215276
const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity)
216277
if (command) {
@@ -263,6 +324,33 @@ export function createPointerEventsSystem(engine: IEngine, inputSystem: IInputSy
263324
setPointerEvent(entity, PointerEventType.PET_HOVER_LEAVE, options)
264325
}
265326

327+
const onPointerDrag: PointerEventsSystem['onPointerDrag'] = (...args) => {
328+
const [data, cb] = args
329+
const { entity, opts } = data
330+
const options = getDefaultOpts(opts)
331+
removeEvent(entity, EventType.Drag)
332+
getEvent(entity).set(EventType.Drag, { cb, opts: options })
333+
setPointerEvent(entity, PointerEventType.PET_DRAG, options)
334+
}
335+
336+
const onPointerDragLocked: PointerEventsSystem['onPointerDragLocked'] = (...args) => {
337+
const [data, cb] = args
338+
const { entity, opts } = data
339+
const options = getDefaultOpts(opts)
340+
removeEvent(entity, EventType.DragLocked)
341+
getEvent(entity).set(EventType.DragLocked, { cb, opts: options })
342+
setPointerEvent(entity, PointerEventType.PET_DRAG_LOCKED, options)
343+
}
344+
345+
const onPointerDragEnd: PointerEventsSystem['onPointerDragEnd'] = (...args) => {
346+
const [data, cb] = args
347+
const { entity, opts } = data
348+
const options = getDefaultOpts(opts)
349+
removeEvent(entity, EventType.DragEnd)
350+
getEvent(entity).set(EventType.DragEnd, { cb, opts: options })
351+
setPointerEvent(entity, PointerEventType.PET_DRAG_END, options)
352+
}
353+
266354
return {
267355
removeOnClick(entity: Entity) {
268356
removeEvent(entity, EventType.Click)
@@ -284,6 +372,18 @@ export function createPointerEventsSystem(engine: IEngine, inputSystem: IInputSy
284372
removeEvent(entity, EventType.HoverLeave)
285373
},
286374

375+
removeOnPointerDrag(entity: Entity) {
376+
removeEvent(entity, EventType.Drag)
377+
},
378+
379+
removeOnPointerDragLocked(entity: Entity) {
380+
removeEvent(entity, EventType.DragLocked)
381+
},
382+
383+
removeOnPointerDragEnd(entity: Entity) {
384+
removeEvent(entity, EventType.DragEnd)
385+
},
386+
287387
onClick(value, cb) {
288388
const { entity } = value
289389
const options = getDefaultOpts(value.opts)
@@ -298,6 +398,9 @@ export function createPointerEventsSystem(engine: IEngine, inputSystem: IInputSy
298398
onPointerDown,
299399
onPointerUp,
300400
onPointerHoverEnter,
301-
onPointerHoverLeave
401+
onPointerHoverLeave,
402+
onPointerDrag,
403+
onPointerDragLocked,
404+
onPointerDragEnd
302405
}
303406
}

packages/@dcl/inspector/build.js

100755100644
File mode changed.

packages/@dcl/inspector/src/components/Toolbar/Gizmos/icons/position.svg

100755100644
File mode changed.

packages/@dcl/inspector/src/components/Toolbar/Gizmos/icons/rotation.svg

100755100644
File mode changed.

packages/@dcl/playground-assets/etc/playground-assets.api.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,9 @@ export type EntityComponents = {
11441144
onMouseUp: Callback;
11451145
onMouseEnter: Callback;
11461146
onMouseLeave: Callback;
1147+
onMouseDrag: Callback;
1148+
onMouseDragLocked: Callback;
1149+
onMouseDragEnd: Callback;
11471150
};
11481151

11491152
// @public (undocumented)
@@ -1644,6 +1647,9 @@ export type Listeners = {
16441647
onMouseUp?: Callback;
16451648
onMouseEnter?: Callback;
16461649
onMouseLeave?: Callback;
1650+
onMouseDrag?: Callback;
1651+
onMouseDragLocked?: Callback;
1652+
onMouseDragEnd?: Callback;
16471653
};
16481654

16491655
// @public (undocumented)
@@ -3596,6 +3602,18 @@ export interface PointerEventsSystem {
35963602
}, cb: EventSystemCallback): void;
35973603
// @deprecated (undocumented)
35983604
onPointerDown(entity: Entity, cb: EventSystemCallback, opts?: Partial<EventSystemOptions>): void;
3605+
onPointerDrag(pointerData: {
3606+
entity: Entity;
3607+
opts?: Partial<EventSystemOptions>;
3608+
}, cb: EventSystemCallback): void;
3609+
onPointerDragEnd(pointerData: {
3610+
entity: Entity;
3611+
opts?: Partial<EventSystemOptions>;
3612+
}, cb: EventSystemCallback): void;
3613+
onPointerDragLocked(pointerData: {
3614+
entity: Entity;
3615+
opts?: Partial<EventSystemOptions>;
3616+
}, cb: EventSystemCallback): void;
35993617
onPointerHoverEnter(pointerData: {
36003618
entity: Entity;
36013619
opts?: Partial<EventSystemOptions>;
@@ -3611,6 +3629,9 @@ export interface PointerEventsSystem {
36113629
// @deprecated (undocumented)
36123630
onPointerUp(entity: Entity, cb: EventSystemCallback, opts?: Partial<EventSystemOptions>): void;
36133631
removeOnPointerDown(entity: Entity): void;
3632+
removeOnPointerDrag(entity: Entity): void;
3633+
removeOnPointerDragEnd(entity: Entity): void;
3634+
removeOnPointerDragLocked(entity: Entity): void;
36143635
removeOnPointerHoverEnter(entity: Entity): void;
36153636
removeOnPointerHoverLeave(entity: Entity): void;
36163637
removeOnPointerUp(entity: Entity): void;

packages/@dcl/react-ecs/src/components/Button/index.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,18 @@ function getButtonProps(props: UiButtonProps) {
3535
*/
3636
/* @__PURE__ */
3737
export function Button(props: UiButtonProps) {
38-
const { uiTransform, uiBackground, onMouseDown, onMouseUp, onMouseEnter, onMouseLeave, ...otherProps } = props
38+
const {
39+
uiTransform,
40+
uiBackground,
41+
onMouseDown,
42+
onMouseUp,
43+
onMouseEnter,
44+
onMouseLeave,
45+
onMouseDrag,
46+
onMouseDragLocked,
47+
onMouseDragEnd,
48+
...otherProps
49+
} = props
3950
const buttonProps = getButtonProps(props)
4051
const uiBackgroundProps = parseUiBackground({
4152
...buttonProps.uiBackground,
@@ -66,6 +77,9 @@ export function Button(props: UiButtonProps) {
6677
onMouseUp={!!props.disabled ? undefined : onMouseUp}
6778
onMouseEnter={onMouseEnter}
6879
onMouseLeave={onMouseLeave}
80+
onMouseDrag={onMouseDrag}
81+
onMouseDragLocked={onMouseDragLocked}
82+
onMouseDragEnd={onMouseDragEnd}
6983
uiTransform={uiTransformProps}
7084
uiText={textProps}
7185
uiBackground={uiBackgroundProps}

0 commit comments

Comments
 (0)