UNPKG

the-world-engine

Version:

three.js based, unity like game engine for browser

94 lines (91 loc) 3.03 kB
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))); } }