replay-viewer
Version:
Rocket League replay viewer React component and tooling
90 lines • 3.73 kB
JavaScript
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