chuck.js/app/Game/Core/Collision/Detector.js

67 lines
No EOL
2 KiB
JavaScript
Executable file

define([
"Lib/Vendor/Planck"
],
function (Planck) {
"use strict";
function Detector () {
// In Planck.js, contact listeners are handled via world events
// We'll store the world reference when getListener is called
this.world = null;
}
Detector.prototype.getListener = function () {
// Instead of returning a listener object, we return a function
// that will set up the event listeners on the world
return this.setupWorldEvents.bind(this);
}
Detector.prototype.setupWorldEvents = function (world) {
this.world = world;
// Set up Planck.js event listeners
world.on('begin-contact', this.beginContact.bind(this));
world.on('end-contact', this.endContact.bind(this));
return this;
}
Detector.prototype.onCollisionChange = function (contact, isColliding) {
var userDataA = contact.getFixtureA().getUserData();
var userDataB = contact.getFixtureB().getUserData();
// Check if this is a foot sensor collision
var isFootSensorCollision = false;
var footSensorUserData = null;
if (userDataA && userDataA.isFootSensor) {
isFootSensorCollision = true;
footSensorUserData = userDataA;
}
if (userDataB && userDataB.isFootSensor) {
isFootSensorCollision = true;
footSensorUserData = userDataB;
}
if (userDataA && userDataA.onCollisionChange) {
userDataA.onCollisionChange(isColliding, contact.getFixtureB());
}
if (userDataB && userDataB.onCollisionChange) {
userDataB.onCollisionChange(isColliding, contact.getFixtureA());
}
}
Detector.prototype.beginContact = function (contact) {
this.onCollisionChange(contact, true);
}
Detector.prototype.endContact = function (contact) {
this.onCollisionChange(contact, false);
}
return Detector;
});