@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
83 lines (69 loc) • 1.59 kB
JavaScript
/**
*
* @enum {number}
*/
export const SerializationFlags = {
/**
* When set, entity is considered non-permanent and should not be serialized
*/
Transient: 1
};
/**
* Stores settings for entity serialization
*/
export class SerializationMetadata {
/**
* 32 bit bitfield.
* Use {@link setFlag}/{@link getFlag} etc. to read individual flag values
* @type {number}
*/
flags = 0;
/**
*
* @param {number|SerializationFlags} flag
* @returns {void}
*/
setFlag(flag) {
this.flags |= flag;
}
/**
*
* @param {number|SerializationFlags} flag
* @returns {void}
*/
clearFlag(flag) {
this.flags &= ~flag;
}
/**
*
* @param {number|SerializationFlags} flag
* @param {boolean} value
*/
writeFlag(flag, value) {
if (value) {
this.setFlag(flag);
} else {
this.clearFlag(flag);
}
}
/**
*
* @param {number|SerializationFlags} flag
* @returns {boolean}
*/
getFlag(flag) {
return (this.flags & flag) === flag;
}
toJSON() {
return {
flags: this.flags
}
}
fromJSON({ flags = 0 }) {
this.flags = flags;
}
}
const transient = new SerializationMetadata();
transient.setFlag(SerializationFlags.Transient);
SerializationMetadata.Transient = Object.freeze(transient);
SerializationMetadata.typeName = "SerializationMetadata";