UNPKG

the-world-engine

Version:

three.js based, unity like game engine for browser

182 lines (168 loc) 5.87 kB
import { ComponentEvent } from "./ComponentEvent"; import { ComponentEventState } from "./ComponentEventState"; function isAwakeableComponent(t) { return t.awake !== undefined; } function isOnEnableableComponent(t) { return t.onEnable !== undefined; } function isOnDisableableComponent(t) { return t.onDisable !== undefined; } function isOnDestroyableComponent(t) { return t.onDestroy !== undefined; } function isOnCollisionEnter2DableComponent(t) { return t.onCollisionEnter2D !== undefined; } function isOnCollisionStay2DableComponent(t) { return t.onCollisionStay2D !== undefined; } function isOnCollisionExit2DableComponent(t) { return t.onCollisionExit2D !== undefined; } function isOnTriggerEnter2DableComponent(t) { return t.onTriggerEnter2D !== undefined; } function isOnTriggerStay2DableComponent(t) { return t.onTriggerStay2D !== undefined; } function isOnTriggerExit2DableComponent(t) { return t.onTriggerExit2D !== undefined; } function isStartableComponent(t) { return t.start !== undefined; } function isUpdatableComponent(t) { return t.update !== undefined; } export class ComponentEventContainer { ot; v; h; Ut; Rt=null; At=null; qt=null; zt=null; Bt=null; Gt=null; Ht=null; Jt=null; Kt=null; Lt=null; constructor(t) { this.ot = t; this.v = t.engine.sceneProcessor; this.h = t.engine.instantiater; this.Ut = new ComponentEventState; if (isAwakeableComponent(t)) { this.Rt = ComponentEvent.createAwakeEvent(this.h, t.awake.bind(t)); } if (isOnDestroyableComponent(t)) { this.At = ComponentEvent.createOnDestroyEvent(this.h, t.onDestroy.bind(t), t.executionOrder); } { if (isOnCollisionEnter2DableComponent(t)) { this.qt = ComponentEvent.createOnCollisionEnter2DEvent(this.h, (n => t.onCollisionEnter2D(n)), t.executionOrder); } if (isOnCollisionStay2DableComponent(t)) { this.zt = ComponentEvent.createOnCollisionStay2DEvent(this.h, (n => t.onCollisionStay2D(n)), t.executionOrder); } if (isOnCollisionExit2DableComponent(t)) { this.Bt = ComponentEvent.createOnCollisionExit2DEvent(this.h, (n => t.onCollisionExit2D(n)), t.executionOrder); } if (isOnTriggerEnter2DableComponent(t)) { this.Gt = ComponentEvent.createOnTriggerEnter2DEvent(this.h, (n => t.onTriggerEnter2D(n)), t.executionOrder); } if (isOnTriggerStay2DableComponent(t)) { this.Ht = ComponentEvent.createOnTriggerStay2DEvent(this.h, (n => t.onTriggerStay2D(n)), t.executionOrder); } if (isOnTriggerExit2DableComponent(t)) { this.Jt = ComponentEvent.createOnTriggerExit2DEvent(this.h, (n => t.onTriggerExit2D(n)), t.executionOrder); } } if (isStartableComponent(t)) { this.Kt = ComponentEvent.createStartEvent(this.h, (() => { this.Ut.startCalled = true; t.start(); if (this.Ut.startRegistered) { this.v.removeEventFromNonSyncedCollection(this.Kt); } }), t.executionOrder); } if (isUpdatableComponent(t)) { this.Lt = ComponentEvent.createUpdateEvent(this.h, t.update.bind(t), t.executionOrder); } } tryCallAwake() { if (this.Ut.awakeCalled) return; this.Ut.awakeCalled = true; this.Rt?.invoke(); } tryRegisterOnEnable() { if (this.ot._engine_internal_destroyed) return; if (this.Ut.enabled) return; this.Ut.enabled = true; if (!isOnEnableableComponent(this.ot)) return; const t = ComponentEvent.createOnEnableEvent(this.h, this.ot.onEnable.bind(this.ot), this.ot.executionOrder); this.v.addEventToSyncedCollection(t); } tryRegisterOnDisable() { if (this.ot._engine_internal_destroyed) return; if (!this.Ut.enabled) return; this.Ut.enabled = false; if (!isOnDisableableComponent(this.ot)) return; const t = ComponentEvent.createOnDisableEvent(this.h, this.ot.onDisable.bind(this.ot), this.ot.executionOrder); this.v.addEventToSyncedCollection(t); } tryRegisterOnDestroy() { if (!this.At) return; this.v.addEventToSyncedCollection(this.At); } tryRegisterStart() { if (!this.Kt) return; if (this.ot._engine_internal_destroyed) return; if (this.Ut.startCalled) return; if (this.Ut.startRegistered) return; this.Ut.startRegistered = true; this.v.addEventToNonSyncedCollection(this.Kt); } tryUnregisterStart() { if (!this.Kt) return; if (!this.Ut.startRegistered || this.Ut.startCalled) return; this.Ut.startRegistered = false; this.v.removeEventFromNonSyncedCollection(this.Kt); } tryRegisterUpdate() { if (!this.Lt) return; if (this.ot._engine_internal_destroyed) return; if (this.Ut.updateRegistered) return; this.Ut.updateRegistered = true; this.v.addEventToNonSyncedCollection(this.Lt); } tryUnregisterUpdate() { if (!this.Lt) return; if (!this.Ut.updateRegistered) return; this.Ut.updateRegistered = false; this.v.removeEventFromNonSyncedCollection(this.Lt); } get onCollisionEnter2D() { return this.qt; } get onCollisionStay2D() { return this.zt; } get onCollisionExit2D() { return this.Bt; } get onTriggerEnter2D() { return this.Gt; } get onTriggerStay2D() { return this.Ht; } get onTriggerExit2D() { return this.Jt; } }