7 years ago by ansimuz
I have some bouncing entities that I want to ignore the "one way slopes upward" and do a jump when they touch a solid collision tile. as show in this image
handleMovementTrace: function (res) {
// passthrough one way solpes
if (res.collision.slope && // slope collision?
res.collision.slope.nx == 0 && // slope is one-way upwards?
res.collision.slope.ny == -1 ) {
// Pass through the walls
//
this.pos.x += this.vel.x * ig.system.tick;
this.pos.y += this.vel.y * ig.system.tick;
return;
}
if (res.collision.y && this.vel.y > 0) {
this.vel.y = -this.speed; // bounce upward when it touches a solid tile
}
// I included the parent code instead of using call to the parent
this.standing = false;
// pasted the parent class code so the
// bouncing forever works
if (res.collision.x) {
if (this.bounciness > 0 && Math.abs(this.vel.x) > this.minBounceVelocity) {
this.vel.x *= -this.bounciness;
}
else {
this.vel.x = 0;
}
}
if (res.collision.slope) {
var s = res.collision.slope;
if (this.bounciness > 0) {
var proj = this.vel.x * s.nx + this.vel.y * s.ny;
this.vel.x = (this.vel.x - s.nx * proj * 2) * this.bounciness;
this.vel.y = (this.vel.y - s.ny * proj * 2) * this.bounciness;
}
else {
var lengthSquared = s.x * s.x + s.y * s.y;
var dot = (this.vel.x * s.x + this.vel.y * s.y) / lengthSquared;
this.vel.x = s.x * dot;
this.vel.y = s.y * dot;
var angle = Math.atan2(s.x, s.y);
if (angle > this.slopeStanding.min && angle < this.slopeStanding.max) {
this.standing = true;
}
}
}
this.pos = res.pos;
},
