@abextm/cache2
Version:
Utilities for reading OSRS "caches"
57 lines (56 loc) • 1.61 kB
JavaScript
import { PerFileLoadable } from "../Loadable.js";
import { Typed } from "../reflect.js";
export class EnumValueMap extends Map {
parent;
constructor(parent) {
super();
this.parent = parent;
}
}
export class Enum extends PerFileLoadable {
id;
constructor(id) {
super();
this.id = id;
}
static index = 2;
static archive = 8;
keyTypeChar;
valueTypeChar;
defaultValue = undefined;
map = new EnumValueMap(this);
get(k) {
return this.map.get(k) ?? this.defaultValue;
}
static decode(reader, id) {
const v = new Enum(id);
for (let opcode; (opcode = reader.u8()) != 0;) {
switch (opcode) {
case 1:
v.keyTypeChar = reader.u8();
break;
case 2:
v.valueTypeChar = reader.u8();
break;
case 3:
v.defaultValue = reader.string();
break;
case 4:
v.defaultValue = reader.i32();
break;
case 5:
case 6: {
let coder = opcode === 5 ? "string" : "i32";
let size = reader.u16();
for (let i = 0; i < size; i++) {
v.map.set(reader.i32(), reader[coder]());
}
break;
}
default:
throw new Error(`unknown enum opcode ${opcode}`);
}
}
return v;
}
}