UNPKG

@ash.ts/io

Version:

Serialization and deserialization for Ash.ts - an entity component system framework for game development

77 lines (69 loc) 3.11 kB
import { ClassType, Engine } from '@ash.ts/core'; import { Signal1 } from '@ash.ts/signals'; interface EncodedObject { type: string; value: any; } interface EncodedComponent extends EncodedObject { id: number; } interface EncodedEntity { name: string; components: number[]; } interface EncodedData { entities: EncodedEntity[]; components: EncodedComponent[]; } declare class CodecManager { stringToClassMap: Map<string, ClassType<any>>; classToStringMap: Map<ClassType<any>, string>; private codecs; private reflectionCodec; constructor(classMap: Map<string, ClassType<any>>); getCodecForObject(object: any): ObjectCodec<any> | null; getCodecForType(type: ClassType<any>): ObjectCodec<any> | null; getCodecForComponent(component: any): ObjectCodec<any>; getCodecForComponentType(type: ClassType<any>): ObjectCodec<any>; addCustomCodec(codec: ObjectCodec<any>, type: ClassType<any>): void; encodeComponent(object: any): EncodedObject | null; encodeObject(object: any): EncodedObject | null; decodeComponent(object: EncodedObject): any | null; decodeObject(object: EncodedObject): any | null; decodeIntoComponent(target: any, encoded: EncodedObject): void; decodeIntoProperty(parent: any, property: string, encoded: EncodedObject): void; } interface ObjectCodec<T> { encode(object: T, codecManager: CodecManager): EncodedObject | null; decode(object: EncodedObject, codecManager: CodecManager): T | null; decodeIntoObject(target: T, object: EncodedObject, codecManager: CodecManager): void; decodeIntoProperty(parent: any, property: string, object: EncodedObject, codecManager: CodecManager): void; } interface EngineCodec<T> { addCustomCodec(codec: ObjectCodec<any>, ...types: any[]): void; encodeEngine(engine: Engine): T; decodeEngine(encodedData: T, engine: Engine): void; decodeOverEngine(encodedData: T, engine: Engine): void; encodeComplete: Signal1<EncodedData>; decodeComplete: Signal1<Engine>; } declare class ObjectEngineCodec implements EngineCodec<EncodedData> { private encoder; private decoder; private codecManager; private encodeCompleteSignal; private decodeCompleteSignal; constructor(classMap: Map<string, ClassType<any>>); addCustomCodec(codec: ObjectCodec<any>, ...types: any[]): void; encodeEngine(engine: Engine): EncodedData; decodeEngine(encodedData: EncodedData, engine: Engine): void; decodeOverEngine(encodedData: EncodedData, engine: Engine): void; get encodeComplete(): Signal1<EncodedData>; get decodeComplete(): Signal1<Engine>; } declare class JsonEngineCodec extends ObjectEngineCodec implements EngineCodec<string> { encodeEngine(engine: Engine): any; decodeEngine(encodedData: any, engine: Engine): void; decodeOverEngine(encodedData: any, engine: Engine): void; } export { CodecManager, EncodedComponent, EncodedData, EncodedEntity, EncodedObject, EngineCodec, JsonEngineCodec, ObjectCodec, ObjectEngineCodec };