mirror of
https://github.com/tobspr/shapez.io.git
synced 2024-10-27 20:34:29 +00:00
79 lines
2.8 KiB
JavaScript
79 lines
2.8 KiB
JavaScript
|
// @ts-nocheck
|
||
|
const METADATA = {
|
||
|
website: "https://tobspr.io",
|
||
|
author: "tobspr",
|
||
|
name: "Mod Example: Storing Data in Savegame",
|
||
|
version: "1",
|
||
|
id: "storing-savegame-data",
|
||
|
description: "Shows how to add custom data to a savegame",
|
||
|
minimumGameVersion: ">=1.5.0",
|
||
|
};
|
||
|
|
||
|
class Mod extends shapez.Mod {
|
||
|
init() {
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Option 1: For simple data
|
||
|
this.signals.gameSerialized.add((root, data) => {
|
||
|
data.modExtraData["storing-savegame-data"] = Math.random();
|
||
|
});
|
||
|
|
||
|
this.signals.gameDeserialized.add((root, data) => {
|
||
|
alert("The value stored in the savegame was: " + data.modExtraData["storing-savegame-data"]);
|
||
|
});
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// Option 2: If you need a structured way of storing data
|
||
|
|
||
|
class SomeSerializableObject extends shapez.BasicSerializableObject {
|
||
|
static getId() {
|
||
|
return "SomeSerializableObject";
|
||
|
}
|
||
|
|
||
|
static getSchema() {
|
||
|
return {
|
||
|
someInt: shapez.types.int,
|
||
|
someString: shapez.types.string,
|
||
|
someVector: shapez.types.vector,
|
||
|
|
||
|
// this value is allowed to be null
|
||
|
nullableInt: shapez.types.nullable(shapez.types.int),
|
||
|
|
||
|
// There is a lot more .. be sure to checkout src/js/savegame/serialization.js
|
||
|
// You can have maps, classes, arrays etc..
|
||
|
// And if you need something specific you can always ask in the modding discord.
|
||
|
};
|
||
|
}
|
||
|
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.someInt = 42;
|
||
|
this.someString = "Hello World";
|
||
|
this.someVector = new shapez.Vector(1, 2);
|
||
|
|
||
|
this.nullableInt = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Store our object in the global game root
|
||
|
this.signals.gameInitialized.add(root => {
|
||
|
root.myObject = new SomeSerializableObject();
|
||
|
});
|
||
|
|
||
|
// Save it within the savegame
|
||
|
this.signals.gameSerialized.add((root, data) => {
|
||
|
data.modExtraData["storing-savegame-data-2"] = root.myObject.serialize();
|
||
|
});
|
||
|
|
||
|
// Restore it when the savegame is loaded
|
||
|
this.signals.gameDeserialized.add((root, data) => {
|
||
|
const errorText = root.myObject.deserialize(data.modExtraData["storing-savegame-data-2"]);
|
||
|
if (errorText) {
|
||
|
alert("Mod failed to deserialize from savegame: " + errorText);
|
||
|
}
|
||
|
alert("The other value stored in the savegame (option 2) was " + root.myObject.someInt);
|
||
|
});
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
}
|
||
|
}
|