UNPKG

the-world-engine

Version:

three.js based, unity like game engine for browser

94 lines (87 loc) 2.8 kB
class TriggerEvent { type=0; colliderA=null; colliderB=null; invoke() { switch (this.type) { case 0: this.colliderA.gameObject.gameObjectEventContainer.invokeOnTriggerEnter2D(this.colliderB); this.colliderB.gameObject.gameObjectEventContainer.invokeOnTriggerEnter2D(this.colliderA); break; case 1: this.colliderA.gameObject.gameObjectEventContainer.invokeOnTriggerStay2D(this.colliderB); this.colliderB.gameObject.gameObjectEventContainer.invokeOnTriggerStay2D(this.colliderA); break; case 2: this.colliderA.gameObject.gameObjectEventContainer.invokeOnTriggerExit2D(this.colliderB); this.colliderB.gameObject.gameObjectEventContainer.invokeOnTriggerExit2D(this.colliderA); break; } } } export class TriggerEventPool { ki=[]; Ei=0; insert(i, s, t) { if (this.ki.length <= this.Ei) { this.ki.push(new TriggerEvent); } const e = this.ki[this.Ei]; e.type = i; e.colliderA = s; e.colliderB = t; this.Ei += 1; } invoke() { for (let i = 0; i < this.Ei; i += 1) { this.ki[i].invoke(); } this.Ei = 0; } } class CollisionEvent { type=0; colliderA=null; colliderB=null; collision2D=null; collisionPool=null; invoke() { switch (this.type) { case 0: this.colliderA.gameObject.gameObjectEventContainer.invokeOnCollisionEnter2D(this.collision2D); this.colliderB.gameObject.gameObjectEventContainer.invokeOnCollisionEnter2D(this.collision2D); break; case 1: this.colliderA.gameObject.gameObjectEventContainer.invokeOnCollisionStay2D(this.collision2D); this.colliderB.gameObject.gameObjectEventContainer.invokeOnCollisionStay2D(this.collision2D); break; case 2: this.colliderA.gameObject.gameObjectEventContainer.invokeOnCollisionExit2D(this.collision2D); this.colliderB.gameObject.gameObjectEventContainer.invokeOnCollisionExit2D(this.collision2D); break; } this.collisionPool?.release(this.collision2D); } } export class CollisionEventPool { wi=[]; Ei=0; insert(i, s, t, e, h) { if (this.wi.length <= this.Ei) { this.wi.push(new CollisionEvent); } const l = this.wi[this.Ei]; l.type = i; l.colliderA = s; l.colliderB = t; l.collision2D = e; l.collisionPool = h ?? null; this.Ei += 1; } invoke() { for (let i = 0; i < this.Ei; i += 1) { this.wi[i].invoke(); } this.Ei = 0; } }