UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

81 lines (66 loc) 2.23 kB
import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js"; import { SequenceBehavior } from "../composite/SequenceBehavior.js"; import { SucceedingBehavior } from "../primitive/SucceedingBehavior.js"; import { BehaviorComponent } from "./BehaviorComponent.js"; export class BehaviorComponentSerializationAdapter extends BinaryClassSerializationAdapter { klass = BehaviorComponent; version = 0; /** * * @type {BinaryObjectSerializationAdapter} */ objectAdapter = null; /** * * @param {BehaviorSystem} system * @param {BinaryObjectSerializationAdapter} objectAdapter */ initialize(system, objectAdapter) { this.objectAdapter = objectAdapter; } /** * * @param {BinaryBuffer} buffer * @param {BehaviorComponent} value */ serialize(buffer, value) { buffer.writeUint8(value.clock); buffer.writeUint8(value.flags); if (value.behavior !== null) { buffer.writeUintVar(1); //write single behavior this.objectAdapter.serialize(buffer, value.behavior); } else { buffer.writeUintVar(0); } } /** * * @param {BinaryBuffer} buffer * @param {BehaviorComponent} value */ deserialize(buffer, value) { const clock = buffer.readUint8(); const flags = buffer.readUint8(); const n = buffer.readUintVar(); const behaviors = []; for (let i = 0; i < n; i++) { /** * Read a single behavior * @type {Behavior} */ const behavior = this.objectAdapter.deserialize(buffer); behaviors.push(behavior); } //write object fields value.clock = clock; value.flags = flags; if (behaviors.length > 1) { value.behavior = SequenceBehavior.from(behaviors); } else if (behaviors.length === 1) { value.behavior = behaviors[0]; } else { value.behavior = SucceedingBehavior.INSTANCE; } } }