Files
dusk/src/dusk/script/module/save/modulesaveslot.h
T
2026-05-17 23:40:42 -05:00

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);
}