From a7b957642f1b8dcf13c15137c0e62239404c9e72 Mon Sep 17 00:00:00 2001 From: tobspr Date: Fri, 14 Jan 2022 19:07:37 +0100 Subject: [PATCH] Add some mod signals --- src/js/core/state_manager.js | 3 +++ src/js/game/core.js | 2 ++ src/js/mods/demo_mod.nobuild/index.js | 22 ++++++++++++++++++++++ src/js/mods/mod_signals.js | 7 +++++++ src/js/states/ingame.js | 1 + 5 files changed, 35 insertions(+) diff --git a/src/js/core/state_manager.js b/src/js/core/state_manager.js index 2e55f5d4..e8a8ba94 100644 --- a/src/js/core/state_manager.js +++ b/src/js/core/state_manager.js @@ -6,6 +6,7 @@ import { GameState } from "./game_state"; import { createLogger } from "./logging"; import { APPLICATION_ERROR_OCCURED } from "./error_handler"; import { waitNextFrame, removeAllChildren } from "./utils"; +import { MOD_SIGNALS } from "../mods/mod_signals"; const logger = createLogger("state_manager"); @@ -109,6 +110,8 @@ export class StateManager { key ); + MOD_SIGNALS.stateEntered.dispatch(this.currentState); + waitNextFrame().then(() => { document.body.classList.add("arrived"); }); diff --git a/src/js/game/core.js b/src/js/game/core.js index a0ee3713..aa411c3d 100644 --- a/src/js/game/core.js +++ b/src/js/game/core.js @@ -38,6 +38,7 @@ import { ShapeDefinitionManager } from "./shape_definition_manager"; import { AchievementProxy } from "./achievement_proxy"; import { SoundProxy } from "./sound_proxy"; import { GameTime } from "./time/game_time"; +import { MOD_SIGNALS } from "../mods/mod_signals"; const logger = createLogger("ingame/core"); @@ -161,6 +162,7 @@ export class GameCore { } logger.log("root initialized"); + MOD_SIGNALS.gameInitialized.dispatch(root); } /** diff --git a/src/js/mods/demo_mod.nobuild/index.js b/src/js/mods/demo_mod.nobuild/index.js index 35cd8532..1ff42074 100644 --- a/src/js/mods/demo_mod.nobuild/index.js +++ b/src/js/mods/demo_mod.nobuild/index.js @@ -208,6 +208,28 @@ registerMod(shapez => { return shapez.STOP_PROPAGATION; }, }); + + // Add fancy sign to main menu + this.signals.stateEntered.add(state => { + if (state.key === "MainMenuState") { + const element = document.createElement("div"); + element.innerText = "Hello World from mod!"; + element.id = "demo_mod_hello_world_element"; + document.body.appendChild(element); + } + }); + + this.modInterface.registerCss(` + #demo_mod_hello_world_element { + position: fixed; + top: 10px; + left: 10px; + color: red; + z-index: 999; + font-size: 50px; + } + + `); } }; }); diff --git a/src/js/mods/mod_signals.js b/src/js/mods/mod_signals.js index 9b893e66..16e08f8a 100644 --- a/src/js/mods/mod_signals.js +++ b/src/js/mods/mod_signals.js @@ -1,6 +1,8 @@ /* typehints:start */ import { BaseHUDPart } from "../game/hud/base_hud_part"; import { GameRoot } from "../game/root"; +import { GameState } from "../core/game_state"; +import { InGameState } from "../states/ingame"; /* typehints:end */ import { Signal } from "../core/signal"; @@ -18,5 +20,10 @@ export const MOD_SIGNALS = { hudElementInitialized: /** @type {TypedSignal<[BaseHUDPart]>} */ (new Signal()), hudElementFinalized: /** @type {TypedSignal<[BaseHUDPart]>} */ (new Signal()), + gameInitialized: /** @type {TypedSignal<[GameRoot]>} */ (new Signal()), + gameLoadingStageEntered: /** @type {TypedSignal<[InGameState, string]>} */ (new Signal()), + gameStarted: /** @type {TypedSignal<[GameRoot]>} */ (new Signal()), + + stateEntered: /** @type {TypedSignal<[GameState]>} */ (new Signal()), }; diff --git a/src/js/states/ingame.js b/src/js/states/ingame.js index 1d16c4f4..3c2bf84d 100644 --- a/src/js/states/ingame.js +++ b/src/js/states/ingame.js @@ -96,6 +96,7 @@ export class InGameState extends GameState { if (stage !== this.stage) { this.stage = stage; logger.log(this.stage); + MOD_SIGNALS.gameLoadingStageEntered.dispatch(this, stage); return true; } else { // log(this, "Re entering", stage);