From 944b3c011cca81e8b66fdc674c105c17526cf2a2 Mon Sep 17 00:00:00 2001 From: Daan Breur Date: Mon, 7 Dec 2020 12:48:30 +0100 Subject: [PATCH] Added layersupport to waypoints!! (#703) * Added layersupport to waypoints!! It will now save what layer its made on! * Added Migrator for 1006 to 1007 * Corrected Version Number * Updated Comment * Changed HUB Layer to be hardcoded --- src/js/game/hud/parts/waypoints.js | 9 ++++- src/js/savegame/savegame.js | 8 ++++- .../savegame/savegame_interface_registry.js | 2 ++ src/js/savegame/schemas/1007.js | 34 +++++++++++++++++++ src/js/savegame/schemas/1007.json | 5 +++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/js/savegame/schemas/1007.js create mode 100644 src/js/savegame/schemas/1007.json diff --git a/src/js/game/hud/parts/waypoints.js b/src/js/game/hud/parts/waypoints.js index a6f37b93..c0f94271 100644 --- a/src/js/game/hud/parts/waypoints.js +++ b/src/js/game/hud/parts/waypoints.js @@ -1,6 +1,7 @@ import { makeOffscreenBuffer } from "../../../core/buffer_utils"; import { globalConfig, THIRDPARTY_URLS } from "../../../core/config"; import { DrawParameters } from "../../../core/draw_parameters"; +import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { Loader } from "../../../core/loader"; import { DialogWithForm } from "../../../core/modal_dialog_elements"; import { FormElementInput } from "../../../core/modal_dialog_forms"; @@ -16,8 +17,10 @@ import { import { Vector } from "../../../core/vector"; import { T } from "../../../translations"; import { BaseItem } from "../../base_item"; +import { MetaHubBuilding } from "../../buildings/hub"; import { enumMouseButton } from "../../camera"; import { KEYMAPPINGS } from "../../key_action_mapper"; +import { layers } from "../../root"; import { ShapeDefinition } from "../../shape_definition"; import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; @@ -26,7 +29,8 @@ import { enumNotificationType } from "./notifications"; /** @typedef {{ * label: string | null, * center: { x: number, y: number }, - * zoomLevel: number + * zoomLevel: number, + * layer: Layer, * }} Waypoint */ /** @@ -98,6 +102,7 @@ export class HUDWaypoints extends BaseHUDPart { label: null, center: { x: 0, y: 0 }, zoomLevel: 3, + layer: gMetaBuildingRegistry.findByClass(MetaHubBuilding).getLayer(), }, ]; @@ -228,6 +233,7 @@ export class HUDWaypoints extends BaseHUDPart { * @param {Waypoint} waypoint */ moveToWaypoint(waypoint) { + this.root.currentLayer = waypoint.layer; this.root.camera.setDesiredCenter(new Vector(waypoint.center.x, waypoint.center.y)); this.root.camera.setDesiredZoom(waypoint.zoomLevel); } @@ -326,6 +332,7 @@ export class HUDWaypoints extends BaseHUDPart { label, center: { x: position.x, y: position.y }, zoomLevel: this.root.camera.zoomLevel, + layer: this.root.currentLayer, }); this.sortWaypoints(); diff --git a/src/js/savegame/savegame.js b/src/js/savegame/savegame.js index 0ad630f6..3fea2d5e 100644 --- a/src/js/savegame/savegame.js +++ b/src/js/savegame/savegame.js @@ -11,6 +11,7 @@ import { SavegameInterface_V1003 } from "./schemas/1003"; import { SavegameInterface_V1004 } from "./schemas/1004"; import { SavegameInterface_V1005 } from "./schemas/1005"; import { SavegameInterface_V1006 } from "./schemas/1006"; +import { SavegameInterface_V1007 } from "./schemas/1007"; const logger = createLogger("savegame"); @@ -51,7 +52,7 @@ export class Savegame extends ReadWriteProxy { * @returns {number} */ static getCurrentVersion() { - return 1006; + return 1007; } /** @@ -120,6 +121,11 @@ export class Savegame extends ReadWriteProxy { data.version = 1006; } + if (data.version === 1006) { + SavegameInterface_V1007.migrate1006to1007(data); + data.version = 1007; + } + return ExplainedResult.good(); } diff --git a/src/js/savegame/savegame_interface_registry.js b/src/js/savegame/savegame_interface_registry.js index 07b5353c..96389c50 100644 --- a/src/js/savegame/savegame_interface_registry.js +++ b/src/js/savegame/savegame_interface_registry.js @@ -7,6 +7,7 @@ import { SavegameInterface_V1003 } from "./schemas/1003"; import { SavegameInterface_V1004 } from "./schemas/1004"; import { SavegameInterface_V1005 } from "./schemas/1005"; import { SavegameInterface_V1006 } from "./schemas/1006"; +import { SavegameInterface_V1007 } from "./schemas/1007"; /** @type {Object.} */ export const savegameInterfaces = { @@ -17,6 +18,7 @@ export const savegameInterfaces = { 1004: SavegameInterface_V1004, 1005: SavegameInterface_V1005, 1006: SavegameInterface_V1006, + 1007: SavegameInterface_V1007, }; const logger = createLogger("savegame_interface_registry"); diff --git a/src/js/savegame/schemas/1007.js b/src/js/savegame/schemas/1007.js new file mode 100644 index 00000000..f6b1d194 --- /dev/null +++ b/src/js/savegame/schemas/1007.js @@ -0,0 +1,34 @@ +import { createLogger } from "../../core/logging.js"; +import { SavegameInterface_V1006 } from "./1006.js"; + +const schema = require("./1007.json"); +const logger = createLogger("savegame_interface/1007"); + +export class SavegameInterface_V1007 extends SavegameInterface_V1006 { + getVersion() { + return 1007; + } + + getSchemaUncached() { + return schema; + } + + /** + * @param {import("../savegame_typedefs.js").SavegameData} data + */ + static migrate1006to1007(data) { + logger.log("Migrating 1006 to 1007"); + const dump = data.dump; + if (!dump) { + return true; + } + + const waypoints = dump.waypoints.waypoints; + + // set waypoint layer to "regular" + for (let i = 0; i < waypoints.length; ++i) { + const waypoint = waypoints[i]; + waypoint.layer = "regular"; + } + } +} diff --git a/src/js/savegame/schemas/1007.json b/src/js/savegame/schemas/1007.json new file mode 100644 index 00000000..6682f615 --- /dev/null +++ b/src/js/savegame/schemas/1007.json @@ -0,0 +1,5 @@ +{ + "type": "object", + "required": [], + "additionalProperties": true +}