This commit is contained in:
tobspr 2020-07-27 17:14:32 +02:00
commit baf5c83b34
11 changed files with 58 additions and 78 deletions

View File

@ -94,16 +94,6 @@ module.exports = ({ watch = false, standalone = false }) => {
}, },
], ],
}, },
{
test: /\.worker\.js$/,
use: {
loader: "worker-loader",
options: {
fallback: false,
inline: true,
},
},
},
{ {
test: /\.ya?ml$/, test: /\.ya?ml$/,
type: "json", // Required by Webpack v4 type: "json", // Required by Webpack v4

View File

@ -1,7 +1,6 @@
import { Signal } from "./signal"; import { Signal } from "./signal";
// @ts-ignore import BackgroundAnimationFrameEmitterWorker from "worker-loader?inline=true&fallback=false!../webworkers/background_animation_frame_emittter.worker";
import BackgroundAnimationFrameEmitterWorker from "../webworkers/background_animation_frame_emittter.worker";
import { createLogger } from "./logging"; import { createLogger } from "./logging";
const logger = createLogger("animation_frame"); const logger = createLogger("animation_frame");
@ -14,12 +13,11 @@ export class AnimationFrame {
this.frameEmitted = new Signal(); this.frameEmitted = new Signal();
this.bgFrameEmitted = new Signal(); this.bgFrameEmitted = new Signal();
this.lastTime = null; this.lastTime = performance.now();
this.bgLastTime = null; this.bgLastTime = performance.now();
this.boundMethod = this.handleAnimationFrame.bind(this); this.boundMethod = this.handleAnimationFrame.bind(this);
/** @type {Worker} */
this.backgroundWorker = new BackgroundAnimationFrameEmitterWorker(); this.backgroundWorker = new BackgroundAnimationFrameEmitterWorker();
this.backgroundWorker.addEventListener("error", err => { this.backgroundWorker.addEventListener("error", err => {
logger.error("Error in background fps worker:", err); logger.error("Error in background fps worker:", err);
@ -27,22 +25,16 @@ export class AnimationFrame {
this.backgroundWorker.addEventListener("message", this.handleBackgroundTick.bind(this)); this.backgroundWorker.addEventListener("message", this.handleBackgroundTick.bind(this));
} }
/** handleBackgroundTick() {
*
* @param {MessageEvent} event
*/
handleBackgroundTick(event) {
const time = performance.now(); const time = performance.now();
if (!this.bgLastTime) {
// First update, first delta is always 16ms let dt = time - this.bgLastTime;
this.bgFrameEmitted.dispatch(1000 / 60);
} else { if (dt > maxDtMs) {
let dt = time - this.bgLastTime; dt = resetDtMs;
if (dt > maxDtMs) {
dt = resetDtMs;
}
this.bgFrameEmitted.dispatch(dt);
} }
this.bgFrameEmitted.dispatch(dt);
this.bgLastTime = time; this.bgLastTime = time;
} }
@ -52,18 +44,15 @@ export class AnimationFrame {
} }
handleAnimationFrame(time) { handleAnimationFrame(time) {
if (!this.lastTime) { let dt = time - this.lastTime;
// First update, first delta is always 16ms
this.frameEmitted.dispatch(1000 / 60); if (dt > maxDtMs) {
} else { dt = resetDtMs;
let dt = time - this.lastTime;
if (dt > maxDtMs) {
// warn(this, "Clamping", dt, "to", resetDtMs);
dt = resetDtMs;
}
this.frameEmitted.dispatch(dt);
} }
this.frameEmitted.dispatch(dt);
this.lastTime = time; this.lastTime = time;
window.requestAnimationFrame(this.boundMethod); window.requestAnimationFrame(this.boundMethod);
} }
} }

View File

@ -1,7 +1,6 @@
// @ts-ignore import CompressionWorker from "worker-loader?inline=true&fallback=false!../webworkers/compression.worker";
import CompressionWorker from "../webworkers/compression.worker";
import { createLogger } from "./logging"; import { createLogger } from "./logging";
import { compressX64 } from "./lzstring";
const logger = createLogger("async_compression"); const logger = createLogger("async_compression");
export let compressionPrefix = String.fromCodePoint(1); export let compressionPrefix = String.fromCodePoint(1);
@ -35,7 +34,6 @@ if (!checkCryptPrefix(compressionPrefix)) {
class AsynCompression { class AsynCompression {
constructor() { constructor() {
/** @type {Worker} */
this.worker = new CompressionWorker(); this.worker = new CompressionWorker();
this.currentJobId = 1000; this.currentJobId = 1000;

View File

@ -8,7 +8,7 @@ import { FILE_NOT_FOUND } from "../platform/storage";
import { accessNestedPropertyReverse } from "./utils"; import { accessNestedPropertyReverse } from "./utils";
import { IS_DEBUG, globalConfig } from "./config"; import { IS_DEBUG, globalConfig } from "./config";
import { ExplainedResult } from "./explained_result"; import { ExplainedResult } from "./explained_result";
import { decompressX64, compressX64 } from ".//lzstring"; import { decompressX64, compressX64 } from "./lzstring";
import { asyncCompressor, compressionPrefix } from "./async_compression"; import { asyncCompressor, compressionPrefix } from "./async_compression";
import { compressObject, decompressObject } from "../savegame/savegame_compressor"; import { compressObject, decompressObject } from "../savegame/savegame_compressor";

View File

@ -1,19 +1,12 @@
import { globalConfig } from "./config"; import { createHash } from "rusha";
import { decompressX64, compressX64 } from "./lzstring";
const Rusha = require("rusha"); import { decompressX64 } from "./lzstring";
const encryptKey = globalConfig.info.sgSalt;
export function decodeHashedString(s) {
return decompressX64(s);
}
export function sha1(str) { export function sha1(str) {
return Rusha.createHash().update(str).digest("hex"); return createHash().update(str).digest("hex");
} }
// Window.location.host // Window.location.host
export function getNameOfProvider() { export function getNameOfProvider() {
return window[decodeHashedString("DYewxghgLgliB2Q")][decodeHashedString("BYewzgLgdghgtgUyA")]; return window[decompressX64("DYewxghgLgliB2Q")][decompressX64("BYewzgLgdghgtgUyA")];
} }

8
src/js/globals.d.ts vendored
View File

@ -190,3 +190,11 @@ declare interface TypedSignal<T extends Array<any>> {
removeAll(); removeAll();
} }
declare module "worker-loader?inline=true&fallback=false!*" {
class WebpackWorker extends Worker {
constructor();
}
export default WebpackWorker;
}

View File

@ -54,5 +54,6 @@
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
"resolveJsonModule": true "resolveJsonModule": true
} },
"exclude": ["webworkers"]
} }

View File

@ -1,15 +1,14 @@
// We clamp high deltas so 30 fps is fairly ok // We clamp high deltas so 30 fps is fairly ok
var bgFps = 30; const bgFps = 30;
var desiredMsDelay = 1000 / bgFps; const desiredMsDelay = 1000 / bgFps;
let lastTick = 0; let lastTick = performance.now();
function tick() { function tick() {
var now = performance.now(); const now = performance.now();
var delta = now - lastTick; const delta = now - lastTick;
lastTick = now; lastTick = now;
// @ts-ignore
postMessage({ delta }); postMessage({ delta });
} }

View File

@ -12,15 +12,9 @@ function accessNestedPropertyReverse(obj, keys) {
const salt = accessNestedPropertyReverse(globalConfig, ["file", "info"]); const salt = accessNestedPropertyReverse(globalConfig, ["file", "info"]);
onmessage = function (event) { onmessage = function ({ data: { jobId, job, data } }) {
const { jobId, job, data } = event.data;
const result = performJob(job, data); const result = performJob(job, data);
postMessage({ jobId, result });
// @ts-ignore
postMessage({
jobId,
result,
});
}; };
function performJob(job, data) { function performJob(job, data) {

View File

@ -0,0 +1,8 @@
{
"compilerOptions": {
"lib": ["ES2018","WebWorker"]
},
"exclude": [],
"extends": "../tsconfig",
"include": ["*.worker.js"]
}

View File

@ -20,10 +20,10 @@
# Ґлосарій: # Ґлосарій:
# map мапа # map мапа
# keybinds гарячі клавіши # keybinds гарячі клавіши
# upgrade поліпшення # upgrade поліпшення
# marker позначка # marker позначка
# area ділянка # area ділянка
# hub # hub
steamPage: steamPage:
# This is the short text appearing on the steam page # This is the short text appearing on the steam page
@ -53,7 +53,7 @@ steamPage:
[img]{STEAM_APP_IMAGE}/extras/header_standalone_advantages.png[/img] [img]{STEAM_APP_IMAGE}/extras/header_standalone_advantages.png[/img]
[list] [list]
[*] Темний режим [*] Темний режим
[*] Необмежені позначки [*] Необмежені позначки
[*] Необмежені збереження [*] Необмежені збереження
[*] Додаткові налаштування [*] Додаткові налаштування
@ -184,12 +184,12 @@ dialogs:
importSavegameSuccess: importSavegameSuccess:
title: Збереження імпортовано title: Збереження імпортовано
text: >- text: >-
Вашу збережену гру успішно імпортовано. Вашу збережену гру успішно імпортовано.
gameLoadFailure: gameLoadFailure:
title: Гра поламана title: Гра поламана
text: >- text: >-
Не вдалося завантажити вашу збережену гру. Не вдалося завантажити вашу збережену гру.
confirmSavegameDelete: confirmSavegameDelete:
title: Підтвердження title: Підтвердження
@ -199,7 +199,7 @@ dialogs:
savegameDeletionError: savegameDeletionError:
title: Виникла помилка при видаленні title: Виникла помилка при видаленні
text: >- text: >-
Не вдалося видалити збережену гру. Не вдалося видалити збережену гру.
restartRequired: restartRequired:
title: Потрібне перезавантаження title: Потрібне перезавантаження
@ -326,7 +326,7 @@ ingame:
Hotkey: <key> Hotkey: <key>
infoTexts: infoTexts:
speed: Швидкість speed: Швидкість
range: Range range: Range
storage: Сховище storage: Сховище
oneItemPerSecond: 1 предмет за сек. oneItemPerSecond: 1 предмет за сек.
@ -848,7 +848,7 @@ keybindings:
Planner: Switch side Planner: Switch side
massSelectStart: Hold and drag to start massSelectStart: Hold and drag to start
massSelectSelectMultiple: massSelectSelectMultiple:
massSelectCopy: Копіювати ділянку massSelectCopy: Копіювати ділянку
massSelectCut: Вирізати ділянку massSelectCut: Вирізати ділянку