89 lines
2.5 KiB
C
89 lines
2.5 KiB
C
/**
|
|
* Copyright (c) 2026 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include "script/module/modulebase.h"
|
|
#include "script/scriptproto.h"
|
|
#include "save/save.h"
|
|
|
|
typedef struct {
|
|
uint8_t slot;
|
|
} saveslotscript_t;
|
|
|
|
static scriptproto_t MODULE_SAVE_SLOT_PROTO;
|
|
|
|
static inline saveslotscript_t * moduleSaveSlotGet(
|
|
const jerry_call_info_t *callInfo
|
|
) {
|
|
return (saveslotscript_t *)scriptProtoGetValue(
|
|
&MODULE_SAVE_SLOT_PROTO, callInfo->this_value
|
|
);
|
|
}
|
|
|
|
// Properties
|
|
|
|
moduleBaseFunction(moduleSaveSlotGetSlot) {
|
|
moduleBaseGetOrReturn(saveslotscript_t, s, moduleSaveSlotGet);
|
|
return jerry_number((double)s->slot);
|
|
}
|
|
|
|
moduleBaseFunction(moduleSaveSlotGetExists) {
|
|
moduleBaseGetOrReturn(saveslotscript_t, s, moduleSaveSlotGet);
|
|
return jerry_boolean(saveExists(s->slot));
|
|
}
|
|
|
|
moduleBaseFunction(moduleSaveSlotGetVersion) {
|
|
moduleBaseGetOrReturn(saveslotscript_t, s, moduleSaveSlotGet);
|
|
return jerry_number((double)saveGet(s->slot)->version);
|
|
}
|
|
|
|
// Methods
|
|
|
|
moduleBaseFunction(moduleSaveSlotLoad) {
|
|
moduleBaseGetOrReturn(saveslotscript_t, s, moduleSaveSlotGet);
|
|
errorret_t err = saveLoad(s->slot);
|
|
if(err.code != ERROR_OK) return moduleBaseThrowError(err);
|
|
return jerry_undefined();
|
|
}
|
|
|
|
moduleBaseFunction(moduleSaveSlotWrite) {
|
|
moduleBaseGetOrReturn(saveslotscript_t, s, moduleSaveSlotGet);
|
|
errorret_t err = saveWrite(s->slot);
|
|
if(err.code != ERROR_OK) return moduleBaseThrowError(err);
|
|
return jerry_undefined();
|
|
}
|
|
|
|
moduleBaseFunction(moduleSaveSlotDelete) {
|
|
moduleBaseGetOrReturn(saveslotscript_t, s, moduleSaveSlotGet);
|
|
errorret_t err = saveDelete(s->slot);
|
|
if(err.code != ERROR_OK) return moduleBaseThrowError(err);
|
|
return jerry_undefined();
|
|
}
|
|
|
|
jerry_value_t moduleSaveSlotCreate(const uint8_t slot) {
|
|
saveslotscript_t s = { .slot = slot };
|
|
return scriptProtoCreateValue(&MODULE_SAVE_SLOT_PROTO, &s);
|
|
}
|
|
|
|
static void moduleSaveSlot(void) {
|
|
scriptProtoInit(&MODULE_SAVE_SLOT_PROTO, "SaveSlot", sizeof(saveslotscript_t), NULL);
|
|
|
|
scriptProtoDefineProp(&MODULE_SAVE_SLOT_PROTO, "slot",
|
|
moduleSaveSlotGetSlot, NULL
|
|
);
|
|
scriptProtoDefineProp(&MODULE_SAVE_SLOT_PROTO, "exists",
|
|
moduleSaveSlotGetExists, NULL
|
|
);
|
|
scriptProtoDefineProp(&MODULE_SAVE_SLOT_PROTO, "version",
|
|
moduleSaveSlotGetVersion, NULL
|
|
);
|
|
|
|
scriptProtoDefineFunc(&MODULE_SAVE_SLOT_PROTO, "load", moduleSaveSlotLoad);
|
|
scriptProtoDefineFunc(&MODULE_SAVE_SLOT_PROTO, "write", moduleSaveSlotWrite);
|
|
scriptProtoDefineFunc(&MODULE_SAVE_SLOT_PROTO, "delete", moduleSaveSlotDelete);
|
|
}
|