Skip to content

Commit 4b7dff6

Browse files
committed
Fix #1157 virtual-tour: add enter-arrow/leave-arrow events
1 parent f7c62a0 commit 4b7dff6

File tree

5 files changed

+79
-3
lines changed

5 files changed

+79
-3
lines changed

docs/plugins/virtual-tour.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -605,9 +605,13 @@ Changes the nodes and display the first one (or the one designated by `startNode
605605

606606
Changes the current node. `options` allows to override the default `transitionOptions`.
607607

608+
#### `getCurrentNode()`
609+
610+
Returns the current node.
611+
608612
## Events
609613

610-
#### `node-changed(nodeId, data)`
614+
#### `node-changed(node, data)`
611615

612616
Triggered when the current node is changed.
613617

@@ -620,3 +624,9 @@ virtualTourPlugin.addEventListener('node-changed', ({ node, data }) => {
620624
}
621625
});
622626
```
627+
628+
#### `enter-arrow(link, node)` | `leave-arrow(link, node)` (3d mode only)
629+
630+
Triggered when the user puts the cursor hover or away an arrow.
631+
632+
_In markers mode, listen to `enter-markers`/`leave-marker` on the markers plugin (link markers have an additional `tourLink` data)._

examples/plugin-virtual-tour.html

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,27 @@
229229
});
230230

231231
const virtualTour = viewer.getPlugin(VirtualTourPlugin);
232+
const markers = viewer.getPlugin(MarkersPlugin);
233+
234+
virtualTour.addEventListener('enter-arrow', ({ link }) => {
235+
console.log(`enter link ${link.nodeId}`);
236+
});
237+
238+
virtualTour.addEventListener('leave-arrow', ({ link }) => {
239+
console.log(`leave link ${link.nodeId}`);
240+
});
241+
242+
markers.addEventListener('enter-marker', ({ marker }) => {
243+
if (marker.data?.tourLink) {
244+
console.log(`enter link ${marker.data.tourLink.nodeId}`);
245+
}
246+
});
247+
248+
markers.addEventListener('leave-marker', ({ marker }) => {
249+
if (marker.data?.tourLink) {
250+
console.log(`leave link ${marker.data.tourLink.nodeId}`);
251+
}
252+
});
232253

233254
window.viewer = viewer;
234255
</script>

packages/shared/typings.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ declare module '*.glsl' {
1818
export default content;
1919
}
2020

21+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
2122
const PKG_VERSION: string;

packages/virtual-tour-plugin/src/VirtualTourPlugin.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { DEFAULT_ARROW, DEFAULT_MARKER, LINK_DATA, LINK_ID } from './constants';
1010
import { AbstractDatasource } from './datasources/AbstractDataSource';
1111
import { ClientSideDatasource } from './datasources/ClientSideDatasource';
1212
import { ServerSideDatasource } from './datasources/ServerSideDatasource';
13-
import { NodeChangedEvent, VirtualTourEvents } from './events';
13+
import { EnterArrowEvent, LeaveArrowEvent, NodeChangedEvent, VirtualTourEvents } from './events';
1414
import {
1515
GpsPosition,
1616
VirtualTourLink,
@@ -306,6 +306,13 @@ export class VirtualTourPlugin extends AbstractConfigurablePlugin<
306306
}
307307
}
308308

309+
/**
310+
* Returns the current node
311+
*/
312+
getCurrentNode(): VirtualTourNode {
313+
return this.state.currentNode;
314+
}
315+
309316
/**
310317
* Sets the nodes (client mode only)
311318
* @throws {@link PSVError} if not in client mode
@@ -648,6 +655,8 @@ export class VirtualTourPlugin extends AbstractConfigurablePlugin<
648655

649656
this.viewer.needsUpdate();
650657
this.viewer.setCursor('pointer');
658+
659+
this.dispatchEvent(new EnterArrowEvent(link, this.state.currentNode))
651660
}
652661

653662
private __onHoverObject(viewerPoint: Point) {
@@ -673,6 +682,8 @@ export class VirtualTourPlugin extends AbstractConfigurablePlugin<
673682

674683
this.viewer.needsUpdate();
675684
this.viewer.setCursor(null);
685+
686+
this.dispatchEvent(new LeaveArrowEvent(link, this.state.currentNode))
676687
}
677688

678689
/**

packages/virtual-tour-plugin/src/events.ts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,37 @@ export class NodeChangedEvent extends TypedEvent<VirtualTourPlugin> {
2121
}
2222
}
2323

24-
export type VirtualTourEvents = NodeChangedEvent;
24+
/**
25+
* @event Triggered when the user puts the cursor hover a marker
26+
*/
27+
export class EnterArrowEvent extends TypedEvent<VirtualTourPlugin> {
28+
static override readonly type = 'enter-arrow';
29+
override type: 'enter-arrow';
30+
31+
constructor(
32+
public readonly link: VirtualTourLink,
33+
public readonly node: VirtualTourNode
34+
) {
35+
super(EnterArrowEvent.type);
36+
}
37+
}
38+
39+
/**
40+
* @event Triggered when the user puts the cursor away from an arrow
41+
*/
42+
export class LeaveArrowEvent extends TypedEvent<VirtualTourPlugin> {
43+
static override readonly type = 'leave-arrow';
44+
override type: 'leave-arrow';
45+
46+
constructor(
47+
public readonly link: VirtualTourLink,
48+
public readonly node: VirtualTourNode
49+
) {
50+
super(LeaveArrowEvent.type);
51+
}
52+
}
53+
54+
export type VirtualTourEvents =
55+
| NodeChangedEvent
56+
| EnterArrowEvent
57+
| LeaveArrowEvent;

0 commit comments

Comments
 (0)