diff options
Diffstat (limited to 'public/assets/javascripts/rectangles/models/wall.js')
| -rw-r--r-- | public/assets/javascripts/rectangles/models/wall.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/public/assets/javascripts/rectangles/models/wall.js b/public/assets/javascripts/rectangles/models/wall.js new file mode 100644 index 0000000..4270551 --- /dev/null +++ b/public/assets/javascripts/rectangles/models/wall.js @@ -0,0 +1,120 @@ +window.Wall = (function(){ + + var Wall = function(opt){ + this.id = opt.id + this.uid = Uid() + this.room = opt.room + this.rect = opt.rect || new Rect (0,0,0,0) + this.rect.sides = opt.side + this.side = opt.side + this.mx = [] + this.els = [] + if (opt.el) { + this.mx.push(opt.el) + } + } + + Wall.prototype.toString = function(){ + return this.rect.toString() + } + + Wall.prototype.reset = function(){ + } + + Wall.prototype.destroy = function(){ + this.mx.forEach(function(mx){ + mx.destroy && mx.destroy() + }) + this.room = this.rect = this.mx = this.els = null + } + + Wall.prototype.bind = function(){ + var base = this + base.$walls = $( this.mx.map(function(mx){ return mx.el }) ) + base.$walls.bind({ + mouseover: function(){ + }, + mouseenter: function(e){ + Scenery.mouse.mouseenter(e, base) + }, + mousemove: function(e){ + }, + mousedown: function(){ + base.randomize_colors() + console.log(sidesToString(base.side)) + } + }) + } + + Wall.prototype.bounds_for = function(img) { + var coord = this.side & FRONT_BACK ? this.rect.x : this.rect.y + return new Rect( new vec2( coord.a + img.width/2, coord.b - img.width/2 ), + new vec2( img.height/2, Rooms.list[this.room].height - img.height/2 ) ) + } + Wall.prototype.fits = function(img){ + if (this.side & FRONT_BACK && this.rect.x.length() < img.width) { + return false + } + if (this.side & LEFT_RIGHT && this.rect.y.length() < img.width) { + return false + } + return true + } + + Wall.prototype.center = function(offset){ + + offset = offset || 0 + + var major_axis, minor_axis + if (this.side & FRONT_BACK) { + major_axis = this.rect.x + minor_axis = this.rect.y + } + else { + major_axis = this.rect.y + minor_axis = this.rect.x + } + + switch (this.side) { + case FRONT: + x = major_axis.midpoint() + z = minor_axis.a + painting_distance_from_wall + offset + break + case BACK: + x = major_axis.midpoint() + z = minor_axis.b - painting_distance_from_wall + offset + break + case LEFT: + x = minor_axis.a + painting_distance_from_wall + offset + z = major_axis.midpoint() + break + case RIGHT: + x = minor_axis.b - painting_distance_from_wall + offset + z = major_axis.midpoint() + break + } + + return new vec2 (x, z) + } + + Wall.prototype.color = function(color){ + this.$walls && this.$walls.css("background-color", color) + } + + Wall.prototype.siblings = function(){ + var base = this + var match = base.side | base.half_side + var walls = Rooms.list[this.room].walls.filter(function(w){ + return (w.side | w.half_side) & match + }) + return walls; + } + + Wall.prototype.randomize_colors = function(){ + var color = choice(window.colors) + this.siblings().forEach(function(w){ w.color(color) }) + } + + return Wall + +})() |
