summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/models/wall.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/models/wall.js')
-rw-r--r--public/assets/javascripts/rectangles/models/wall.js186
1 files changed, 65 insertions, 121 deletions
diff --git a/public/assets/javascripts/rectangles/models/wall.js b/public/assets/javascripts/rectangles/models/wall.js
index 8723c3c..6043181 100644
--- a/public/assets/javascripts/rectangles/models/wall.js
+++ b/public/assets/javascripts/rectangles/models/wall.js
@@ -13,12 +13,13 @@
}
var Wall = function(opt){
- this.id = opt.id
+ this.id = [ opt.side, opt.edge, opt.vec.a ].join("_")
this.vec = opt.vec
this.edge = opt.edge
this.side = opt.side
this.surface = opt.surface
this.mx = opt.mx
+ this.background = ""
}
Wall.prototype.toString = function(){
@@ -63,26 +64,49 @@
e.stopPropagation()
return
}
-
+
UndoStack.push({
type: 'create-scenery',
undo: { id: scenery.id },
redo: scenery.serialize(),
})
-
- // TODO: watch individual scenery object here
- Minotaur.watch( app.router.editorView.settings )
}
else if (Scenery.nextWallpaper) {
- base.wallpaper()
- }
+ var oldState = base.serialize()
+ base.wallpaper(Scenery.nextWallpaper)
+ Scenery.nextWallpaper = null
+
+ UndoStack.push({
+ type: 'update-wallpaper',
+ undo: oldState,
+ redo: base.serialize(),
+ })
+ }
else {
app.controller.hideExtras()
}
}
})
})
- this.outline()
+
+ // flip the mx order
+ var shouldFlip = this.side & (LEFT | BACK)
+ if (! shouldFlip) {
+ this.mx.reverse()
+ }
+
+ // this.outline(wallColor, outlineColor)
+ }
+
+ Wall.prototype.serialize = function(){
+ return {
+ id: this.id,
+ background: this.background,
+ }
+ }
+
+ Wall.prototype.deserialize = function(data){
+ this.wallpaper( data.background )
}
@@ -140,143 +164,63 @@
position.a -= dimension.a / 2
position.b -= dimension.b / 2
}
-// if (mx.width) { position.a -= mx.width / 2 }
-// if (mx.height) { position.b -= mx.height / 2 }
return position
}
- Wall.prototype.bounds_for = function(img, scale) {
- scale = scale || 1
- var coord = this.side & FRONT_BACK ? this.rect.x : this.rect.y
- var halfWidth = img.width/2 * scale
- var halfHeight = img.height/2 * scale
-
- return new Rect( new vec2( coord.a + halfWidth, coord.b - halfWidth ),
- new vec2( halfHeight, Rooms.list[this.room].height - halfHeight ) )
- }
-
- Wall.prototype.fits = function(img, scale){
- if (this.side & FRONT_BACK && this.rect.x.length() < img.width * scale) {
- return false
- }
- if (this.side & LEFT_RIGHT && this.rect.y.length() < img.width * scale) {
- return false
- }
- return true
- }
-
- Wall.prototype.center = function(offset){
-
- switch (this.side) {
- case FRONT:
- x = this.vec.midpoint()
- z = this.edge + painting_distance_from_wall
- break
- case BACK:
- x = this.vec.midpoint()
- z = this.edge - painting_distance_from_wall
- break
- case LEFT:
- x = this.edge + painting_distance_from_wall
- z = this.vec.midpoint()
- break
- case RIGHT:
- x = this.edge - painting_distance_from_wall
- z = this.vec.midpoint()
- break
- }
-
- return new vec2 (x, z)
- }
-
Wall.prototype.color = function(color){
- this.$walls && this.$walls.css("background-color", color)
+ this.$walls.css("background-color", color)
}
- Wall.prototype.wallpaper = function(){
+ Wall.prototype.wallpaper = function(background){
var useX = this.side & FRONT_BACK
var shouldFlip = this.side & (LEFT | BACK)
+
+ this.background = background || "none"
+
this.mx.forEach(function(mx){
var partitionOffset = useX ? mx.x : mx.z
if (shouldFlip) partitionOffset *= -1
partitionOffset += mx.width/2
var floorOffset = mx.y + mx.height/2
- mx.el.style.backgroundImage = Scenery.nextWallpaper
+ mx.el.style.backgroundImage = background
mx.el.style.backgroundPosition = (~~partitionOffset) + "px " + (~~floorOffset) + "px"
})
}
- Wall.prototype.outline = function(){
+ Wall.prototype.outline = function(wallColor, outlineColor){
var useX = this.side & FRONT_BACK
- var shouldFlip = this.side & (LEFT | BACK)
var mx = this.mx
- if (! shouldFlip) {
- mx = mx.reverse()
- }
-
var len = this.mx.length
-
- var backgroundColor = "rgba(255,255,255,0.95)"
- var borderColor = "rgba(0,0,0,1.0)"
-
- zz = window.zz || 0
+ var outlineString = app.defaults.outlineWidth + "px solid " + outlineColor
+ zz = 0
mx.forEach(function(mx, i){
- if (mx.outlined) return
- mx.outlined = true
- mx.el.style.backgroundColor = backgroundColor
-
- // all walls get bottom lines
- mx.el.style.borderBottom = "1px solid " + borderColor
-
- // all walls get top lines
- mx.el.style.borderTop = "1px solid " + borderColor
-
- // walls on initial sides get left lines
- // if their left edge lines up with the rect edge
- if (i == 0) {
- mx.el.style.borderLeft = "1px solid " + borderColor
- }
-
- // walls on terminal sides get right lines....
- // if their right edge lines up with the rect edge
- if (i == len-1) {
- mx.el.style.borderRight = "1px solid " + borderColor
- }
- })
- }
-
- Wall.prototype.siblings = function(){
- return this
-// 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 && w.$walls
-// })
-// return walls
- }
-
- Wall.prototype.randomize_colors = function(){
- var color = window.grayColors[ this.side | this.half_side ]
- // this.color(color)
- }
-
- Wall.prototype.stroke_colors = function(){
- var color = "#fff"
- var siblings = this.siblings()
- siblings.forEach(function(w, i){
- if (! w.$walls) return
- w.color(color)
- if (i == 0) {
- w.$walls.css("border-left", "1px solid #000")
- }
- if (i == siblings.length-1) {
- w.$walls.css("border-right", "1px solid #000")
- }
- w.$walls.css("border-top", "1px solid #000")
- w.$walls.css("border-bottom", "1px solid #000")
+ // if (mx.outlined) return
+ // mx.outlined = true
+ if (wallColor) {
+ mx.el.style.backgroundColor = wallColor
+ }
+ if (outlineColor) {
+ // all walls get bottom lines
+ mx.el.style.borderBottom = outlineString
+
+ // all walls get top lines
+ mx.el.style.borderTop = outlineString
+
+ // walls on initial sides get left lines
+ // if their left edge lines up with the rect edge
+ if (i == 0) {
+ mx.el.style.borderLeft = outlineString
+ }
+
+ // walls on terminal sides get right lines....
+ // if their right edge lines up with the rect edge
+ if (i == len-1) {
+ mx.el.style.borderRight = outlineString
+ }
+ }
})
}