@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
112 lines (93 loc) • 2.49 kB
JavaScript
import { assert } from "../../../core/assert.js";
import { Transform } from "../transform/Transform.js";
export const TransformAttachmentFlags = {
/**
* Update will be performed when component is attached.
* It's used to turn this flag off when you know that the child's transform is already correct to save some computations
*/
Immediate: 1
};
const DEFAULT_FLAGS = TransformAttachmentFlags.Immediate;
export class TransformAttachment {
/**
* transform relative to the attachment target
* Think of it as "local transform"
* @type {Transform}
*/
transform = new Transform();
/**
* Which entity to attach to
* @type {number}
*/
parent = -1;
/**
*
* @type {number}
*/
flags = DEFAULT_FLAGS;
toString() {
return JSON.stringify(this.toJSON());
}
toJSON() {
return {
transform: this.transform.toJSON(),
parent: this.parent,
flags: this.flags
};
}
fromJSON({ transform, parent = -1, flags = DEFAULT_FLAGS }) {
assert.defined(transform, 'transform');
assert.isInteger(parent, 'parent');
assert.isNonNegativeInteger(flags, 'flags');
this.transform.fromJSON(transform);
this.parent = parent;
this.flags = flags;
}
get immediate() {
return this.getFlag(TransformAttachmentFlags.Immediate);
}
/**
*
* @param {boolean} v
*/
set immediate(v) {
this.writeFlag(TransformAttachmentFlags.Immediate, v);
}
/**
*
* @param {number|TransformAttachmentFlags} flag
* @returns {void}
*/
setFlag(flag) {
this.flags |= flag;
}
/**
*
* @param {number|TransformAttachmentFlags} flag
* @returns {void}
*/
clearFlag(flag) {
this.flags &= ~flag;
}
/**
*
* @param {number|TransformAttachmentFlags} flag
* @param {boolean} value
*/
writeFlag(flag, value) {
if (value) {
this.setFlag(flag);
} else {
this.clearFlag(flag);
}
}
/**
*
* @param {number|TransformAttachmentFlags} flag
* @returns {boolean}
*/
getFlag(flag) {
return (this.flags & flag) === flag;
}
}
TransformAttachment.typeName = "TransformAttachment"