UNPKG

node-insim

Version:

An InSim library for NodeJS with TypeScript support

129 lines (128 loc) 2.65 kB
import 'reflect-metadata'; const formatMetadataKey = Symbol('format'); /** * String of 1-byte characters * @internal */ export function string(count) { return Reflect.metadata(formatMetadataKey, count === 1 ? 'c' : `${count}s`); } /** * String of 1-byte characters ending with a NULL byte * @internal */ export function stringNull(count) { return Reflect.metadata(formatMetadataKey, `${count}S`); } /** * 1-byte signed integer * @internal */ export function char() { return Reflect.metadata(formatMetadataKey, 'b'); } /** * 1-byte unsigned integer * @internal */ export function byte() { return Reflect.metadata(formatMetadataKey, 'B'); } /** * Array of bytes * @internal */ export function byteArray(count) { return Reflect.metadata(formatMetadataKey, `${count}A`); } /** * 2-byte unsigned integer * @internal */ export function word() { return Reflect.metadata(formatMetadataKey, 'H'); } /** * 2-byte signed integer * @internal */ export function short() { return Reflect.metadata(formatMetadataKey, 'h'); } /** * 4-byte unsigned integer * @internal */ export function unsigned() { return Reflect.metadata(formatMetadataKey, 'L'); } /** * 4-byte signed integer * @internal */ export function int() { return Reflect.metadata(formatMetadataKey, 'l'); } /** * 4-byte float * @internal */ export function float() { return Reflect.metadata(formatMetadataKey, 'f'); } /** * 8-byte double * @internal */ export function double() { return Reflect.metadata(formatMetadataKey, 'd'); } /** * 12-byte vector of 3 floats * @internal */ export function Vector() { return Reflect.metadata(formatMetadataKey, 'fff'); } /** * 12-byte vector of 3 ints * @internal */ export function Vec() { return Reflect.metadata(formatMetadataKey, 'lll'); } /** * Array * @internal */ export function array(str, cnt) { const format = new str().getFormat(); const res = []; for (let i = 0; i < cnt; i++) { res.push(format); } return Reflect.metadata(formatMetadataKey, res.join('')); } /** * Struct * @internal */ export function struct(str) { return Reflect.metadata(formatMetadataKey, new str().getFormat()); } /** * LFS car name * * The value can be one of these: * - a 3-character abbreviation of an official LFS car (e.g. XRT) * - a hexadecimal string representation of a car mod's SkinID (e.g. 5882E6) * * @internal */ export function carName() { return Reflect.metadata(formatMetadataKey, 'C'); } /** @internal */ export function getFormat(target, propertyKey) { return Reflect.getMetadata(formatMetadataKey, target, propertyKey); }