the-world-engine
Version:
three.js based, unity like game engine for browser
94 lines (91 loc) • 3.03 kB
JavaScript
import { MutIteratableCollection } from "../collection/MutIteratableCollection";
import { ComponentEvent } from "./ComponentEvent";
function isOnWorldMatrixUpdatedableComponent(t) {
return t.onWorldMatrixUpdated !== undefined;
}
export class GameObjectEventContainer {
le=new Set;
ae=new MutIteratableCollection(ComponentEvent.comparator);
pe=new MutIteratableCollection(ComponentEvent.comparator);
Ce=new MutIteratableCollection(ComponentEvent.comparator);
ve=new MutIteratableCollection(ComponentEvent.comparator);
he=new MutIteratableCollection(ComponentEvent.comparator);
fe=new MutIteratableCollection(ComponentEvent.comparator);
registerComponent(t) {
if (isOnWorldMatrixUpdatedableComponent(t)) {
this.le.add(t);
}
const e = t._engine_internal_componentEventContainer;
if (e.onCollisionEnter2D) {
this.ae.insert(e.onCollisionEnter2D);
}
if (e.onCollisionStay2D) {
this.pe.insert(e.onCollisionStay2D);
}
if (e.onCollisionExit2D) {
this.Ce.insert(e.onCollisionExit2D);
}
if (e.onTriggerEnter2D) {
this.ve.insert(e.onTriggerEnter2D);
}
if (e.onTriggerStay2D) {
this.he.insert(e.onTriggerStay2D);
}
if (e.onTriggerExit2D) {
this.fe.insert(e.onTriggerExit2D);
}
}
unregisterComponent(t) {
if (isOnWorldMatrixUpdatedableComponent(t)) {
this.le.delete(t);
}
const e = t._engine_internal_componentEventContainer;
if (e.onCollisionEnter2D) {
this.ae.delete(e.onCollisionEnter2D);
}
if (e.onCollisionStay2D) {
this.pe.delete(e.onCollisionStay2D);
}
if (e.onCollisionExit2D) {
this.Ce.delete(e.onCollisionExit2D);
}
if (e.onTriggerEnter2D) {
this.ve.delete(e.onTriggerEnter2D);
}
if (e.onTriggerStay2D) {
this.he.delete(e.onTriggerStay2D);
}
if (e.onTriggerExit2D) {
this.fe.delete(e.onTriggerExit2D);
}
}
invokeOnWorldMatrixUpdated() {
for (const t of this.le) {
t.onWorldMatrixUpdated();
}
}
invokeOnCollisionEnter2D(t) {
if (this.ae.size === 0) return;
this.ae.forEach((e => e.invoke(t)));
}
invokeOnCollisionStay2D(t) {
if (this.pe.size === 0) return;
this.pe.forEach((e => e.invoke(t)));
}
invokeOnCollisionExit2D(t) {
if (this.Ce.size === 0) return;
this.Ce.forEach((e => e.invoke(t)));
}
invokeOnTriggerEnter2D(t) {
if (this.ve.size === 0) return;
this.ve.forEach((e => e.invoke(t)));
}
invokeOnTriggerStay2D(t) {
if (this.he.size === 0) return;
this.he.forEach((e => e.invoke(t)));
}
invokeOnTriggerExit2D(t) {
if (this.fe.size === 0) return;
this.fe.forEach((e => e.invoke(t)));
}
}