54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import {PresentationStep} from "./presentationStep";
|
|
import log, {Logger} from "loglevel";
|
|
import {Scene} from "@babylonjs/core";
|
|
import {isDiagramEntity} from "./functions/isDiagramEntity";
|
|
|
|
export class PresentationManager {
|
|
_currentStep: PresentationStep = null;
|
|
private scene: Scene;
|
|
private logger: Logger = log.getLogger("PresentationManager");
|
|
|
|
constructor(scene: Scene) {
|
|
this.scene = scene;
|
|
}
|
|
|
|
_steps: PresentationStep[] = [];
|
|
|
|
public get steps(): PresentationStep[] {
|
|
return this._steps;
|
|
}
|
|
|
|
public addStep(): PresentationStep {
|
|
const step = new PresentationStep();
|
|
this._currentStep = step;
|
|
if (this._steps.length > 0) {
|
|
this._steps[this._steps.length - 1].next = step;
|
|
} else {
|
|
this.scene.getActiveMeshes().forEach((mesh) => {
|
|
if (isDiagramEntity(mesh)) {
|
|
step.entities.push({
|
|
entity: mesh,
|
|
endPosition: mesh.position.clone(),
|
|
endRotation: mesh.rotation.clone(),
|
|
endScaling: mesh.scaling.clone()
|
|
})
|
|
step.duration = 1;
|
|
}
|
|
});
|
|
}
|
|
this._steps.push(step);
|
|
return step;
|
|
}
|
|
|
|
public play() {
|
|
this._currentStep.play();
|
|
if (this._currentStep.next) {
|
|
this._currentStep = this._currentStep.next;
|
|
}
|
|
}
|
|
|
|
public reset() {
|
|
this._currentStep = this._steps[0];
|
|
this._steps[0].play();
|
|
}
|
|
} |