var wall_rotation = {} wall_rotation[FRONT] = PI wall_rotation[BACK] = 0 wall_rotation[LEFT] = HALF_PI wall_rotation[RIGHT] = -HALF_PI var scenery = new function(){ var base = this; base.init = function(){ var url = "https://s3.amazonaws.com/luckyplop/f5b2c20e602cdfc86383910f294dcf23d91fa956.png" var img = new Image () img.onload = function(){ base.load(img) } img.src = url if (img.complete) base.load(img) } base.load = function(img){ img.width = 300 img.height = ~~(300 * img.naturalHeight/img.naturalWidth) clipper.rooms.forEach(function(room){ room.walls.forEach(function(wall){ new_image(wall, img) }) }) } function new_image (wall, img) { var x, z if (wall.side & FRONT_BACK && wall.rect.x.length() < img.width) { return } if (wall.side & LEFT_RIGHT && wall.rect.y.length() < img.width) { return } switch (wall.side) { case FRONT: x = wall.rect.x.a + wall.rect.x.length()/2 z = wall.rect.y.a + 10 break case BACK: x = wall.rect.x.a + wall.rect.x.length()/2 z = wall.rect.y.b - 10 break case LEFT: x = wall.rect.x.a + 10 z = wall.rect.y.a + wall.rect.y.length()/2 break case RIGHT: x = wall.rect.x.b - 10 z = wall.rect.y.a + wall.rect.y.length()/2 break } var mx_img = new MX.Image({ src: img.src, x: x, y: img.height/3, z: z, scale: 300/img.naturalWidth, rotationY: wall_rotation[ wall.side ], backface: false, }) scene.add(mx_img) // https://s3.amazonaws.com/luckyplop/f5b2c20e602cdfc86383910f294dcf23d91fa956.png var x = 0, y = 0, z = 0, bounds // should be proportional to distance from wall var cursor_amp = 1.5 my_mouse = new mouse ({ el: mx_img.el }) my_mouse.tube.on("down", function(e, cursor){ x = mx_img.x y = mx_img.y z = mx_img.z bounds = bounds_for(wall, img) }) my_mouse.tube.on("drag", function(e, cursor){ mx_img.y = bounds.y.clamp( y - cursor.y.magnitude()*cursor_amp ) switch (wall.side) { case FRONT: mx_img.x = bounds.x.clamp( x + cursor.x.magnitude()*cursor_amp ) break case BACK: mx_img.x = bounds.x.clamp( x - cursor.x.magnitude()*cursor_amp ) break case LEFT: mx_img.z = bounds.x.clamp( z - cursor.x.magnitude()*cursor_amp ) break case RIGHT: mx_img.z = bounds.x.clamp( z + cursor.x.magnitude()*cursor_amp ) break } }) my_mouse.tube.on("up", function(e, cursor){ }) } return base }