summaryrefslogtreecommitdiff
path: root/assets/javascripts/rectangles/engine/mover.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/javascripts/rectangles/engine/mover.js')
-rw-r--r--assets/javascripts/rectangles/engine/mover.js48
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
}
}