From 1eaae0288c4cf4f99f27f0d9307d50d0fa0acdc8 Mon Sep 17 00:00:00 2001 From: DJ1TJOO Date: Thu, 3 Feb 2022 11:50:16 +0100 Subject: [PATCH] Added item register and resolver for savegames --- src/js/game/item_resolver.js | 6 ++++++ src/js/mods/mod_interface.js | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/js/game/item_resolver.js b/src/js/game/item_resolver.js index da15fa0c..ff91b0a3 100644 --- a/src/js/game/item_resolver.js +++ b/src/js/game/item_resolver.js @@ -4,6 +4,8 @@ import { BooleanItem, BOOL_TRUE_SINGLETON, BOOL_FALSE_SINGLETON } from "./items/ import { ShapeItem } from "./items/shape_item"; import { ColorItem, COLOR_ITEM_SINGLETONS } from "./items/color_item"; +export const MODS_ADDITIONAL_ITEMS = {}; + /** * Resolves items so we share instances * @param {import("../savegame/savegame_serializer").GameRoot} root @@ -13,6 +15,10 @@ export function itemResolverSingleton(root, data) { const itemType = data.$; const itemData = data.data; + if (MODS_ADDITIONAL_ITEMS[itemType]) { + return MODS_ADDITIONAL_ITEMS[itemType](itemData); + } + switch (itemType) { case BooleanItem.getId(): { return itemData ? BOOL_TRUE_SINGLETON : BOOL_FALSE_SINGLETON; diff --git a/src/js/mods/mod_interface.js b/src/js/mods/mod_interface.js index 13bdb9d2..295014ca 100644 --- a/src/js/mods/mod_interface.js +++ b/src/js/mods/mod_interface.js @@ -17,7 +17,7 @@ import { Loader } from "../core/loader"; import { LANGUAGES } from "../languages"; import { matchDataRecursive, T } from "../translations"; import { gBuildingVariants, registerBuildingVariant } from "../game/building_codes"; -import { gComponentRegistry, gMetaBuildingRegistry } from "../core/global_registries"; +import { gComponentRegistry, gItemRegistry, gMetaBuildingRegistry } from "../core/global_registries"; import { MODS_ADDITIONAL_SHAPE_MAP_WEIGHTS } from "../game/map_chunk"; import { MODS_ADDITIONAL_SYSTEMS } from "../game/game_system_manager"; import { MOD_CHUNK_DRAW_HOOKS } from "../game/map_chunk_view"; @@ -28,6 +28,8 @@ import { ModMetaBuilding } from "./mod_meta_building"; import { BaseHUDPart } from "../game/hud/base_hud_part"; import { Vector } from "../core/vector"; import { GameRoot } from "../game/root"; +import { BaseItem } from "../game/base_item"; +import { MODS_ADDITIONAL_ITEMS } from "../game/item_resolver"; /** * @typedef {{new(...args: any[]): any, prototype: any}} constructable @@ -190,6 +192,15 @@ export class ModInterface { } } + /** + * @param {typeof BaseItem} item + * @param {(itemData: any) => BaseItem} resolver + */ + registerItem(item, resolver) { + gItemRegistry.register(item); + MODS_ADDITIONAL_ITEMS[item.getId()] = resolver; + } + /** * * @param {typeof Component} component