diff options
Diffstat (limited to 'assets/javascripts/rectangles/engine/mover.js')
| -rw-r--r-- | assets/javascripts/rectangles/engine/mover.js | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/assets/javascripts/rectangles/engine/mover.js b/assets/javascripts/rectangles/engine/mover.js index ebe4447..5a1f7d9 100644 --- a/assets/javascripts/rectangles/engine/mover.js +++ b/assets/javascripts/rectangles/engine/mover.js @@ -1,11 +1,11 @@ var mover = new function(){ var base = this - var last_room = null + base.room = null base.init = function(){ - last_room = clipper.rooms[0] base.bind() + base.update(scene.camera) } base.bind = function(){ @@ -13,19 +13,47 @@ var mover = new function(){ } base.update = function(pos){ - if (last_room && last_room.rect.contains(pos.x, pos.z)) return; + cam.y = pos.y - var intersects = [] - clipper.rooms.forEach(function(r){ - if (r.rect.contains(pos.x, pos.z)) { - intersects.push(r) + // if we were in a room + if (base.room) { + // check if we're still in the room + if (base.room.rect.contains(pos.x, pos.z)) { + cam.x = pos.x + cam.z = pos.z + return } + // check if we've crossed one of the walls.. clamp position if so + var collision = base.room.collides(pos.x, pos.z) + if (collision) { + if (! (collision & LEFT || collision & RIGHT)) { + cam.x = pos.x + } + if (! (collision & FRONT || collision & BACK)) { + cam.z = pos.z + } + return + } + } + + // otherwise we've either entered into a new room, or broken free + var intersects = clipper.rooms.filter(function(r){ + return r.rect.contains(pos.x, pos.z) }) + $(".face.active").removeClass("active") if (intersects.length) { - $(".face.active").removeClass("active") - last_room = intersects[0] - } + base.room = intersects[0] + base.room.$floor.addClass("active") + base.room.$ceiling.addClass("active") + base.room.$walls.addClass("active") + } + else { + base.room = null + } + + cam.x = pos.x + cam.z = pos.z } } |
