UNPKG

replay-viewer

Version:

Rocket League replay viewer React component and tooling

90 lines 3.73 kB
import { WebGLRenderer } from "three"; import defaultGameBuilder from "../builders/GameBuilder"; import EventBus from "../eventbus/EventBus"; import { addCameraChangeListener, removeCameraChangeListener, } from "../eventbus/events/cameraChange"; import { addCanvasResizeListener, removeCanvasResizeListener, } from "../eventbus/events/canvasResize"; import { addFrameListener, removeFrameListener, } from "../eventbus/events/frame"; import { addPlayPauseListener, removePlayPauseListener, } from "../eventbus/events/playPause"; import AnimationManager from "./AnimationManager"; import CameraManager from "./CameraManager"; import KeyManager from "./KeyManager"; import SceneManager from "./SceneManager"; var GameManager = /** @class */ (function () { function GameManager(_a) { var clock = _a.clock; var _this = this; this.onPlayPause = function (_a) { var paused = _a.paused; paused ? _this.clock.pause() : _this.clock.play(); }; this.render = function () { var scene = SceneManager.getInstance().scene; var activeCamera = CameraManager.getInstance().activeCamera; _this.renderer.render(scene, activeCamera); }; this.updateSize = function (_a) { var _b = _a.width, width = _b === void 0 ? 640 : _b, _c = _a.height, height = _c === void 0 ? 480 : _c; _this.renderer.setSize(width, height); _this.render(); }; this.renderer = new WebGLRenderer({ antialias: true }); this.renderer.shadowMap.enabled = true; this.animate = this.animate.bind(this); this.render = this.render.bind(this); this.clock = clock; // Spawns the animation clips AnimationManager.getInstance().playAnimationClips(); // Forces every animation to "take position" AnimationManager.getInstance().updateAnimationClips(0); addPlayPauseListener(this.onPlayPause); addFrameListener(this.animate); addCanvasResizeListener(this.updateSize); addCameraChangeListener(this.render); } GameManager.prototype.animate = function (_a) { var delta = _a.delta; if (delta) { AnimationManager.getInstance().updateAnimationClips(delta); this.render(); } }; GameManager.prototype.getDOMNode = function () { return this.renderer.domElement; }; GameManager.getInstance = function () { if (!GameManager.instance) { throw new Error("GameManager not initialized with call to `init`"); } return GameManager.instance; }; GameManager.init = function (options) { GameManager.instance = new GameManager(options); return GameManager.instance; }; GameManager.destruct = function () { // Destruct other managers SceneManager.destruct(); CameraManager.destruct(); KeyManager.destruct(); // Handle destruction of the existing game var instance = GameManager.instance; if (instance) { removePlayPauseListener(instance.onPlayPause); removeFrameListener(instance.animate); removeCanvasResizeListener(instance.updateSize); removeCameraChangeListener(instance.render); instance.clock.reset(); EventBus.reset(); GameManager.instance = undefined; } }; /** * ======================================== * Managers are singletons * ======================================== */ GameManager.builder = defaultGameBuilder; return GameManager; }()); export { GameManager }; //# sourceMappingURL=GameManager.js.map