| @@ -22,14 +22,21 @@ export default class Rect { | |||
| } | |||
| intersectSide(other) { | |||
| if (this.midY < other.top) | |||
| return "top"; | |||
| else if (this.midY > other.bottom) | |||
| return "bottom"; | |||
| else if (this.midX < other.left) | |||
| let mx = this.midX; | |||
| let my = this.midY; | |||
| let diffleft = mx - other.pos.x; | |||
| let diffright = mx - (other.pos.x + other.size.x); | |||
| let difftop = my - (other.pos.y + other.size.y); | |||
| if (diffleft <= 0) | |||
| return "left"; | |||
| else | |||
| else if (diffright >= 0) | |||
| return "right"; | |||
| else if (difftop >= 0) | |||
| return "bottom"; | |||
| else | |||
| return "top"; | |||
| } | |||
| contains(other) { | |||
| @@ -16,8 +16,13 @@ export default class Shaker { | |||
| update(dt) { | |||
| if (this.shakeX > 0.1) | |||
| this.vec.x = (Math.random() - 0.5) * this.shakeX * dt; | |||
| else | |||
| this.vec.x = 0; | |||
| if (this.shakeY > 0.1) | |||
| this.vec.y = (Math.random() - 0.5) * this.shakeY * dt; | |||
| else | |||
| this.vec.y = 0; | |||
| var xRatio = 1 / (1 + (dt * this.decay)); | |||
| this.shakeX *= xRatio; | |||
| @@ -8,13 +8,15 @@ export default class TKeyboardController extends Trait { | |||
| this.speedAir = 20; | |||
| this.jump = 8; | |||
| this.jumpTimeMax = 0.4; | |||
| this.updrift = 87; | |||
| this.jumpTimeMax = 0.45; | |||
| this.updrift = 100; | |||
| this.jumpLeeway = 0.1; | |||
| this.map = { | |||
| KeyA: 'left', | |||
| KeyD: 'right', | |||
| KeyW: 'up', | |||
| KeyS: 'down', | |||
| Space: "jump", | |||
| }; | |||
| @@ -47,6 +49,10 @@ export default class TKeyboardController extends Trait { | |||
| phys.velocity.x -= speed * dt; | |||
| if (this.pressed.right) | |||
| phys.velocity.x += speed * dt; | |||
| if (this.pressed.down) | |||
| phys.velocity.y += speed * dt; | |||
| if (this.pressed.up) | |||
| phys.velocity.y -= speed * dt; | |||
| let canJump = | |||
| !this.jumped && | |||
| @@ -34,6 +34,9 @@ export default class TPhysics extends Trait { | |||
| } else if (side === "right" && this.velocity.x < velocity.x) { | |||
| this.velocity.x = velocity.x; | |||
| this.entity.bounds.left = bounds.right; | |||
| } else if (side === "bottom" && this.velocity.y < velocity.y) { | |||
| this.velocity.y = velocity.y; | |||
| this.entity.bounds.top = bounds.bottom; | |||
| } | |||
| } | |||