the-world-engine
Version:
three.js based, unity like game engine for browser
94 lines (87 loc) • 2.8 kB
JavaScript
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;
}
}