@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
83 lines (63 loc) • 2.51 kB
JavaScript
import { BinaryClassSerializationAdapter } from "../../storage/binary/BinaryClassSerializationAdapter.js";
import { FogOfWar } from "../FogOfWar.js";
import { serializeRowFirstTable } from "../../../../core/collection/table/serializeRowFirstTable.js";
import { deserializeRowFirstTable } from "../../../../core/collection/table/deserializeRowFirstTable.js";
import {
Sampler2DSerializationAdapter
} from "../../../graphics/texture/sampler/serialization/Sampler2DSerializationAdapter.js";
export class FogOfWarSerializationAdapter extends BinaryClassSerializationAdapter {
klass = FogOfWar;
version = 1;
__sampler_serializer = new Sampler2DSerializationAdapter();
/**
*
* @param {BinaryBuffer} buffer
* @param {FogOfWar} value
*/
serialize(buffer, value) {
buffer.writeFloat64(value.scale.getValue());
buffer.writeUintVar(value.size.x);
buffer.writeUintVar(value.size.y);
const color_r = (value.color.x * 255) | 0;
const color_g = (value.color.y * 255) | 0;
const color_b = (value.color.z * 255) | 0;
const color_a = (value.color.w * 255) | 0;
const color = (color_r << 24)
| (color_g << 16)
| (color_b << 8)
| (color_a << 0)
;
buffer.writeUint32(color);
this.__sampler_serializer.serialize(buffer, value.sampler);
//serialize reveal state
serializeRowFirstTable(buffer, value.fadeMask);
}
/**
*
* @param {BinaryBuffer} buffer
* @param {FogOfWar} value
*/
deserialize(buffer, value) {
value.scale.set(buffer.readFloat64());
const size_x = buffer.readUintVar();
const size_y = buffer.readUintVar();
value.size.set(size_x, size_y);
const color = buffer.readUint32();
const color_r = (color >> 24) & 0xFF;
const color_g = (color >> 16) & 0xFF;
const color_b = (color >> 8) & 0xFF;
const color_a = (color >> 0) & 0xFF;
value.color.set(
color_r / 255,
color_g / 255,
color_b / 255,
color_a / 255
);
this.__sampler_serializer.deserialize(buffer, value.sampler);
//deserialize reveal state
deserializeRowFirstTable(buffer, value.fadeMask);
//
value.textureNeedsUpdate = true;
value.rebuildDistanceSampler();
}
}