Add: [Script] Saving/loading ScriptList

This commit is contained in:
glx22
2025-02-14 02:20:28 +01:00
committed by Loïc Guilloux
parent d6a261439b
commit a6f558ce2a
7 changed files with 67 additions and 3 deletions

View File

@@ -403,6 +403,56 @@ public:
bool ScriptList::SaveObject(HSQUIRRELVM vm)
{
sq_pushstring(vm, "List");
sq_newarray(vm, 0);
sq_pushinteger(vm, this->sorter_type);
sq_arrayappend(vm, -2);
sq_pushbool(vm, this->sort_ascending ? SQTrue : SQFalse);
sq_arrayappend(vm, -2);
sq_newtable(vm);
for (ScriptListMap::iterator iter = this->items.begin(); iter != this->items.end(); iter++) {
sq_pushinteger(vm, iter->first);
sq_pushinteger(vm, iter->second);
sq_rawset(vm, -3);
}
sq_arrayappend(vm, -2);
return true;
}
bool ScriptList::LoadObject(HSQUIRRELVM vm)
{
if (sq_gettype(vm, -1) != OT_ARRAY) return false;
sq_pushnull(vm);
if (SQ_FAILED(sq_next(vm, -2))) return false;
if (sq_gettype(vm, -1) != OT_INTEGER) return false;
SQInteger type;
sq_getinteger(vm, -1, &type);
sq_pop(vm, 2);
if (SQ_FAILED(sq_next(vm, -2))) return false;
if (sq_gettype(vm, -1) != OT_BOOL) return false;
SQBool order;
sq_getbool(vm, -1, &order);
sq_pop(vm, 2);
if (SQ_FAILED(sq_next(vm, -2))) return false;
if (sq_gettype(vm, -1) != OT_TABLE) return false;
sq_pushnull(vm);
while (SQ_SUCCEEDED(sq_next(vm, -2))) {
if (sq_gettype(vm, -2) != OT_INTEGER && sq_gettype(vm, -1) != OT_INTEGER) return false;
SQInteger key, value;
sq_getinteger(vm, -2, &key);
sq_getinteger(vm, -1, &value);
this->AddItem(key, value);
sq_pop(vm, 2);
}
sq_pop(vm, 3);
if (SQ_SUCCEEDED(sq_next(vm, -2))) return false;
sq_pop(vm, 1);
this->Sort(static_cast<SorterType>(type), order == SQTrue);
return true;
}
ScriptList::ScriptList()
{
/* Default sorter */