import './CustomInstruction.js';
import './HandsInstructions.js';
import './NavigationInstructions.js';
import './UserInstructions.js';
import {css, html, LitElement, type TemplateResult} from 'lit';
import {customElement} from 'lit/decorators/custom-element.js';
import {property} from 'lit/decorators/property.js';
import {
SimulatorMode,
type SimulatorCustomInstruction,
} from '../../../SimulatorOptions.js';
import {
SimulatorInstructionsCloseEvent,
SimulatorInstructionsNextEvent,
} from './SimulatorInstructionsEvents.js';
@customElement('xrblocks-simulator-instructions')
export class SimulatorInstructions extends LitElement {
static styles = css`
:host {
background: #000000aa;
position: absolute;
top: 0;
left: 0;
display: flex;
height: 100%;
width: 100%;
justify-content: center;
align-items: center;
}
`;
@property() simulatorMode?: SimulatorMode;
@property() customInstructions: SimulatorCustomInstruction[] = [];
@property() step = 0;
getSteps(): TemplateResult[] {
const isSinglePage = this.customInstructions.length === 0;
const buttonText = isSinglePage ? 'Close' : 'Continue';
if (this.simulatorMode) {
switch (this.simulatorMode) {
case SimulatorMode.USER:
case SimulatorMode.EDITOR:
case SimulatorMode.POINTER_LOCK:
return [
html``,
];
case SimulatorMode.POSE:
return [
html``,
];
case SimulatorMode.CONTROLLER:
return [
html``,
];
}
}
return [
html``,
html``,
html``,
];
}
constructor() {
super();
this.addEventListener(
SimulatorInstructionsNextEvent.type,
this.continueButtonClicked.bind(this)
);
this.addEventListener(
SimulatorInstructionsCloseEvent.type,
this.closeInstructions.bind(this)
);
}
closeInstructions() {
this.remove();
}
continueButtonClicked() {
const steps = this.getSteps();
if (this.step + 1 >= steps.length + this.customInstructions.length) {
this.closeInstructions();
return;
}
this.step++;
}
render() {
const steps = this.getSteps();
return this.step < steps.length
? steps[this.step]
: html``;
}
}