migrate from perforce
This commit is contained in:
103
dist/Vis/VisMain.js
vendored
Normal file
103
dist/Vis/VisMain.js
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
import { VisLevel } from "./index.js";
|
||||
export class VisMain {
|
||||
_canvas;
|
||||
_context;
|
||||
_startTimestamp = 0;
|
||||
_active = true;
|
||||
_ready = false;
|
||||
_gap = 0;
|
||||
_wallPattern;
|
||||
_visLevel;
|
||||
_simMain;
|
||||
constructor(simMain, canvas) {
|
||||
this._simMain = simMain;
|
||||
this._canvas = canvas;
|
||||
this._context = this._canvas.getContext("2d");
|
||||
this._context.globalCompositeOperation = "source-over";
|
||||
this._wallPattern = this.createPattern(this._simMain.gdRoot.image("wall.png"), 48);
|
||||
this._visLevel = new VisLevel(this, this._simMain, this._simMain.gdRoot);
|
||||
const host = this;
|
||||
requestAnimationFrame(function step(timestamp) {
|
||||
host.step(timestamp);
|
||||
});
|
||||
}
|
||||
get simMain() {
|
||||
return this._simMain;
|
||||
}
|
||||
get visLevel() {
|
||||
return this._visLevel;
|
||||
}
|
||||
get canvas() {
|
||||
return this._canvas;
|
||||
}
|
||||
get context() {
|
||||
return this._context;
|
||||
}
|
||||
get wallPattern() {
|
||||
return this._wallPattern;
|
||||
}
|
||||
createPattern(image, size) {
|
||||
const tempCanvas = document.createElement("canvas");
|
||||
const tempContext = tempCanvas.getContext("2d");
|
||||
tempCanvas.width = size;
|
||||
tempCanvas.height = size;
|
||||
tempContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, size, size);
|
||||
return this._context.createPattern(tempCanvas, 'repeat');
|
||||
}
|
||||
step(timestamp) {
|
||||
if (!this._active) {
|
||||
return;
|
||||
}
|
||||
const host = this;
|
||||
requestAnimationFrame((timestamp) => {
|
||||
host.step(timestamp);
|
||||
});
|
||||
if (!this._startTimestamp) {
|
||||
this._startTimestamp = timestamp;
|
||||
}
|
||||
const simLevel = this._simMain.currentLevel;
|
||||
let targetStep = (timestamp - this._startTimestamp) * this._simMain.gdRoot.simulation.stepsPerSecond / 1000 - this._gap;
|
||||
if (simLevel.paused) {
|
||||
this._gap += targetStep - simLevel.currentStep;
|
||||
targetStep = simLevel.currentStep;
|
||||
}
|
||||
this._simMain.executeUntilStep(targetStep);
|
||||
this._visLevel.updateEveryFrame(targetStep);
|
||||
this.onRender();
|
||||
}
|
||||
;
|
||||
onResized() {
|
||||
const gameHost = document.getElementById("game-host");
|
||||
const width = gameHost.clientWidth;
|
||||
const height = gameHost.clientHeight;
|
||||
const ratio = window.devicePixelRatio;
|
||||
this._canvas.width = width * ratio;
|
||||
this._canvas.height = height * ratio;
|
||||
this._canvas.style.width = width + "px";
|
||||
this._canvas.style.height = height + "px";
|
||||
this._context.scale(ratio, ratio);
|
||||
this._visLevel.updateSize();
|
||||
}
|
||||
;
|
||||
onRender() {
|
||||
this.clear();
|
||||
const ctx = this._context;
|
||||
ctx.font = "12px Tahoma";
|
||||
const simLevel = this._simMain.currentLevel;
|
||||
if (!!simLevel) {
|
||||
if (!this._ready) {
|
||||
this.onResized();
|
||||
this._ready = true;
|
||||
}
|
||||
this._visLevel.draw();
|
||||
}
|
||||
}
|
||||
;
|
||||
clear() {
|
||||
this._context.clearRect(0, 0, this._canvas.width, this._canvas.height);
|
||||
}
|
||||
stop() {
|
||||
this._active = false;
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=VisMain.js.map
|
||||
Reference in New Issue
Block a user