dylanebert's picture
dylanebert HF staff
initial commit
e6b949c
raw
history blame
2.67 kB
import * as SPLAT from "gsplat";
import { OrbitControls } from "./OrbitControls";
import { GridProgram } from "./programs/GridProgram";
import { AxisProgram } from "./programs/AxisProgram";
import { ModeManager } from "./ModeManager";
import { Controls } from "./Controls";
import { MouseManager } from "./MouseManager";
import { KeyboardManager } from "./KeyboardManager";
import { DefaultMode } from "./DefaultMode";
import { GrabMode } from "./GrabMode";
import { RotateMode } from "./RotateMode";
import { ScaleMode } from "./ScaleMode";
class Engine {
private _scene: SPLAT.Scene;
private _camera: SPLAT.Camera;
private _renderer: SPLAT.WebGLRenderer;
private _orbitControls: OrbitControls;
private _intersectionTester: SPLAT.IntersectionTester;
private _keyboardManager: KeyboardManager;
private _mouseManager: MouseManager;
constructor(canvas: HTMLCanvasElement) {
this._scene = new SPLAT.Scene();
this._camera = new SPLAT.Camera();
this._camera.data.setSize(canvas.clientWidth, canvas.clientHeight);
this._renderer = new SPLAT.WebGLRenderer(canvas);
this._renderer.addProgram(new AxisProgram(this._renderer, []));
this._renderer.addProgram(new GridProgram(this._renderer, []));
this._orbitControls = new OrbitControls(this._camera, canvas);
this._intersectionTester = new SPLAT.IntersectionTester(this._renderer.renderProgram);
this._keyboardManager = new KeyboardManager();
this._mouseManager = new MouseManager(canvas);
new Controls([this._keyboardManager, this._mouseManager], canvas);
ModeManager.registerMode("default", () => new DefaultMode(this));
ModeManager.registerMode("grab", () => new GrabMode(this));
ModeManager.registerMode("rotate", () => new RotateMode(this));
ModeManager.registerMode("scale", () => new ScaleMode(this));
ModeManager.enterMode("default");
}
update() {
this._orbitControls.update();
this._renderer.render(this._scene, this._camera);
}
get scene(): SPLAT.Scene {
return this._scene;
}
get camera(): SPLAT.Camera {
return this._camera;
}
get renderer(): SPLAT.WebGLRenderer {
return this._renderer;
}
get orbitControls(): OrbitControls {
return this._orbitControls;
}
get intersectionTester(): SPLAT.IntersectionTester {
return this._intersectionTester;
}
get keyboardManager(): KeyboardManager {
return this._keyboardManager;
}
get mouseManager(): MouseManager {
return this._mouseManager;
}
}
export { Engine };