Skip to content

Commit a53af9d

Browse files
authored
feat: pointer event toggle highlight (#1024)
* Implements support for new PointerEvents showHighlight property * Fixed bug existent bug for the case of using pointerEventsSystem.onPointerDown() without any of the pointer event optional properties (those entities weren't clickable before this PR)
1 parent 48941ef commit a53af9d

File tree

12 files changed

+78
-52
lines changed

12 files changed

+78
-52
lines changed

package-lock.json

Lines changed: 7 additions & 7 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-11406954347.commit-ba19c4f",
9+
"@dcl/protocol": "1.0.0-11599848164.commit-ef74edc",
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: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@ export type EventSystemOptions = {
2020
hoverText?: string
2121
maxDistance?: number
2222
showFeedback?: boolean
23+
showHighlight?: boolean
2324
}
2425

26+
export const getDefaultOpts = (opts: Partial<EventSystemOptions> = {}): EventSystemOptions => ({
27+
button: InputAction.IA_ANY,
28+
...opts
29+
})
30+
2531
/**
2632
* @public
2733
*/
@@ -98,31 +104,24 @@ export function createPointerEventsSystem(engine: IEngine, inputSystem: IInputSy
98104
}
99105
type EventMapType = Map<EventType, { cb: EventSystemCallback; opts: EventSystemOptions }>
100106

101-
const getDefaultOpts = (opts: Partial<EventSystemOptions> = {}): EventSystemOptions => ({
102-
button: InputAction.IA_ANY,
103-
...opts
104-
})
105-
106107
const eventsMap = new Map<Entity, EventMapType>()
107108

108109
function getEvent(entity: Entity) {
109110
return eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity)!
110111
}
111112

112113
function setPointerEvent(entity: Entity, type: PointerEventType, opts: EventSystemOptions) {
113-
if (opts.hoverText || opts.showFeedback) {
114-
const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity)
115-
116-
pointerEvent.pointerEvents.push({
117-
eventType: type,
118-
eventInfo: {
119-
button: opts.button,
120-
showFeedback: opts.showFeedback,
121-
hoverText: opts.hoverText,
122-
maxDistance: opts.maxDistance
123-
}
124-
})
125-
}
114+
const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity)
115+
pointerEvent.pointerEvents.push({
116+
eventType: type,
117+
eventInfo: {
118+
button: opts.button,
119+
showFeedback: opts.showFeedback,
120+
showHighlight: opts.showHighlight,
121+
hoverText: opts.hoverText,
122+
maxDistance: opts.maxDistance
123+
}
124+
})
126125
}
127126

128127
function removePointerEvent(entity: Entity, type: PointerEventType, button: InputAction) {

packages/@dcl/inspector/src/components/EntityInspector/PointerEventsInspector/PointerEventsInspector.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ export default withSdk<Props>(({ sdk, entity: entityId }) => {
115115
onChange={(e) => handleEventInfoChange({ showFeedback: !!e.target.checked }, idx)}
116116
/>
117117
</Block>
118+
<Block label="Show highlight">
119+
<CheckboxField
120+
checked={!!$.eventInfo?.showHighlight ?? DEFAULTS.eventInfo.showHighlight}
121+
onChange={(e) => handleEventInfoChange({ showHighlight: !!e.target.checked }, idx)}
122+
/>
123+
</Block>
118124
<AddButton onClick={() => handleRemove(idx)}>Remove Pointer Event</AddButton>
119125
</React.Fragment>
120126
))}

packages/@dcl/inspector/src/components/EntityInspector/PointerEventsInspector/utils.spec.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ describe('InputUtils', () => {
2323
button: InputAction.IA_ANY,
2424
hoverText: 'Interact',
2525
maxDistance: 10,
26-
showFeedback: true
26+
showFeedback: true,
27+
showHighlight: true
2728
}
2829
}
2930
expect(result).toEqual(expected)
@@ -36,7 +37,8 @@ describe('InputUtils', () => {
3637
button: InputAction.IA_PRIMARY,
3738
hoverText: 'Custom Interaction',
3839
maxDistance: 15,
39-
showFeedback: false
40+
showFeedback: false,
41+
showHighlight: false
4042
}
4143
})
4244
const expected = {
@@ -45,7 +47,8 @@ describe('InputUtils', () => {
4547
button: InputAction.IA_PRIMARY,
4648
hoverText: 'Custom Interaction',
4749
maxDistance: 15,
48-
showFeedback: false
50+
showFeedback: false,
51+
showHighlight: false
4952
}
5053
}
5154
expect(result).toEqual(expected)
@@ -68,7 +71,8 @@ describe('InputUtils', () => {
6871
button: InputAction.IA_ANY,
6972
hoverText: 'Interact',
7073
maxDistance: 10,
71-
showFeedback: true
74+
showFeedback: true,
75+
showHighlight: true
7276
}
7377
}
7478
expect(DEFAULTS).toEqual(expected)

packages/@dcl/inspector/src/components/EntityInspector/PointerEventsInspector/utils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function getDefaultPointerEvent(
1818
hoverText: 'Interact',
1919
maxDistance: 10,
2020
showFeedback: true,
21+
showHighlight: true,
2122
...def?.eventInfo
2223
}
2324
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,7 @@ export type EventSystemOptions = {
11301130
hoverText?: string;
11311131
maxDistance?: number;
11321132
showFeedback?: boolean;
1133+
showHighlight?: boolean;
11331134
};
11341135

11351136
// @public
@@ -1167,6 +1168,11 @@ export function getComponentEntityTree<T>(engine: Pick<IEngine, 'getEntitiesWith
11671168
// @public @deprecated (undocumented)
11681169
export function getCompositeRootComponent(engine: IEngine): LastWriteWinElementSetComponentDefinition<CompositeRootType>;
11691170

1171+
// Warning: (ae-missing-release-tag) "getDefaultOpts" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
1172+
//
1173+
// @public (undocumented)
1174+
export const getDefaultOpts: (opts?: Partial<EventSystemOptions>) => EventSystemOptions;
1175+
11701176
// Warning: (ae-missing-release-tag) "GlobalDirectionRaycastOptions" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal)
11711177
//
11721178
// @public (undocumented)
@@ -2677,6 +2683,7 @@ export interface PBPointerEvents_Info {
26772683
hoverText?: string | undefined;
26782684
maxDistance?: number | undefined;
26792685
showFeedback?: boolean | undefined;
2686+
showHighlight?: boolean | undefined;
26802687
}
26812688

26822689
// @public (undocumented)

packages/@dcl/sdk-commands/package-lock.json

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

packages/@dcl/sdk-commands/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"@dcl/inspector": "file:../inspector",
1414
"@dcl/linker-dapp": "^0.14.2",
1515
"@dcl/mini-comms": "1.0.1-20230216163137.commit-a4c75be",
16-
"@dcl/protocol": "1.0.0-11406954347.commit-ba19c4f",
16+
"@dcl/protocol": "1.0.0-11599848164.commit-ef74edc",
1717
"@dcl/quests-client": "^1.0.3",
1818
"@dcl/quests-manager": "^0.1.4",
1919
"@dcl/rpc": "^1.1.1",

test/ecs/components/PointerEvents.spec.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ describe('Generated OnPointerDown ProtoBuf', () => {
1414
button: 1,
1515
hoverText: 'Tap to run',
1616
maxDistance: 10,
17-
showFeedback: true
17+
showFeedback: true,
18+
showHighlight: true
1819
}
1920
}
2021
]
@@ -28,7 +29,8 @@ describe('Generated OnPointerDown ProtoBuf', () => {
2829
button: InputAction.IA_ACTION_4,
2930
hoverText: 'Run to tap',
3031
maxDistance: 5,
31-
showFeedback: false
32+
showFeedback: false,
33+
showHighlight: false
3234
}
3335
}
3436
]
@@ -51,7 +53,8 @@ describe('Generated OnPointerDown ProtoBuf', () => {
5153
button: InputAction.IA_ACTION_4,
5254
hoverText: 'Run to tap',
5355
maxDistance: 5,
54-
showFeedback: false
56+
showFeedback: false,
57+
showHighlight: false
5558
}
5659
}
5760
]

0 commit comments

Comments
 (0)