summaryrefslogtreecommitdiff
path: root/public/assets/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts')
-rw-r--r--public/assets/javascripts/rectangles/_env.js14
-rw-r--r--public/assets/javascripts/rectangles/engine/map/ui_editor.js21
-rw-r--r--public/assets/javascripts/rectangles/engine/scenery/undo.js34
-rw-r--r--public/assets/javascripts/rectangles/models/rect.js4
-rw-r--r--public/assets/javascripts/rectangles/models/room.js8
-rw-r--r--public/assets/javascripts/rectangles/models/vec2.js4
-rw-r--r--public/assets/javascripts/rectangles/models/wall.js2
-rw-r--r--public/assets/javascripts/rectangles/util/keys.js6
-rw-r--r--public/assets/javascripts/rectangles/util/permissions.js13
-rw-r--r--public/assets/javascripts/ui/builder/BuilderToolbar.js9
10 files changed, 96 insertions, 19 deletions
diff --git a/public/assets/javascripts/rectangles/_env.js b/public/assets/javascripts/rectangles/_env.js
index 3cfe969..4b14a21 100644
--- a/public/assets/javascripts/rectangles/_env.js
+++ b/public/assets/javascripts/rectangles/_env.js
@@ -35,6 +35,20 @@ environment.init = function(){
zoom: -4.8
})
}
+
+ keys.on("z", function(e){
+ e.preventDefault()
+ if (e.ctrlKey || e.metaKey) {
+ if (e.shiftKey) {
+ var canRedo = UndoStack.redo()
+ console.log("can redo", canRedo)
+ }
+ else {
+ var canUndo = UndoStack.undo()
+ console.log("can undo", canUndo)
+ }
+ }
+ })
}
environment.update = function(t){
map.update()
diff --git a/public/assets/javascripts/rectangles/engine/map/ui_editor.js b/public/assets/javascripts/rectangles/engine/map/ui_editor.js
index 016a8ad..4b5f784 100644
--- a/public/assets/javascripts/rectangles/engine/map/ui_editor.js
+++ b/public/assets/javascripts/rectangles/engine/map/ui_editor.js
@@ -30,6 +30,7 @@ Map.UI.Editor = function(map){
//
function down (e, cursor){
+ var room
cursor.x.div(map.dimensions.a).add(0.5).mul(map.dimensions.a / map.zoom).add(map.center.a)
cursor.y.div(map.dimensions.b).sub(0.5).mul(map.dimensions.b / map.zoom).sub(map.center.b)
@@ -52,8 +53,17 @@ Map.UI.Editor = function(map){
if (intersects.length && base.permissions.destroy) {
base.mouse.down = false
- Rooms.remove(intersects[0])
- app.tube("builder-destroy-room", intersects[0])
+
+ room = intersects[0]
+
+ UndoStack.push({
+ type: "destroy-room",
+ prev: room.clone(),
+ next: { id: room.id },
+ })
+
+ Rooms.remove(room)
+ app.tube("builder-destroy-room", room)
return
}
else if (intersects.length) {
@@ -151,6 +161,13 @@ Map.UI.Editor = function(map){
cursor.x.abs().quantize(1)
cursor.y.abs().quantize(1)
var room = Rooms.add_with_rect( cursor )
+
+ UndoStack.push({
+ type: "create-room",
+ prev: { id: room.id },
+ next: room.clone()
+ })
+
app.tube("builder-pick-room", room)
}
}
diff --git a/public/assets/javascripts/rectangles/engine/scenery/undo.js b/public/assets/javascripts/rectangles/engine/scenery/undo.js
index fb221f5..b10a101 100644
--- a/public/assets/javascripts/rectangles/engine/scenery/undo.js
+++ b/public/assets/javascripts/rectangles/engine/scenery/undo.js
@@ -25,24 +25,44 @@
//
{
- type: "create-rectangle",
- undo: function(state){
+ type: "create-room",
+ undo: function(room){
+ Rooms.remove(room)
+ Rooms.clipper.update()
},
- redo: function(state){
+ redo: function(room){
+ Rooms.add(room)
+ Rooms.clipper.update()
+ app.tube("builder-pick-room", room)
},
},
{
- type: "update-rectangle",
+ type: "update-room",
undo: function(state){
+ var room = Rooms.list[state.id]
+ room.rect.assign( state.rect )
+ room.height = state.height
+ Rooms.clipper.update()
+ app.tube("builder-pick-room", room)
},
redo: function(state){
+ var room = Rooms.list[state.id]
+ room.rect.assign( state.rect )
+ room.height = state.height
+ Rooms.clipper.update()
+ app.tube("builder-pick-room", room)
},
},
{
- type: "destroy-rectangle",
- undo: function(state){
+ type: "destroy-room",
+ undo: function(room){
+ Rooms.add(room)
+ Rooms.clipper.update()
+ app.tube("builder-pick-room", room)
},
- redo: function(state){
+ redo: function(room){
+ Rooms.remove(room)
+ Rooms.clipper.update()
},
},
diff --git a/public/assets/javascripts/rectangles/models/rect.js b/public/assets/javascripts/rectangles/models/rect.js
index 58469bc..0642a65 100644
--- a/public/assets/javascripts/rectangles/models/rect.js
+++ b/public/assets/javascripts/rectangles/models/rect.js
@@ -39,6 +39,10 @@
Rect.prototype.clone = function(){
return new Rect( this.x.clone(), this.y.clone() )
}
+ Rect.prototype.assign = function(r) {
+ this.x.copy(r.x)
+ this.y.copy(r.y)
+ }
Rect.prototype.center = function(){
return new vec2(this.x.midpoint(), this.y.midpoint())
}
diff --git a/public/assets/javascripts/rectangles/models/room.js b/public/assets/javascripts/rectangles/models/room.js
index c2850ba..6c0e1bb 100644
--- a/public/assets/javascripts/rectangles/models/room.js
+++ b/public/assets/javascripts/rectangles/models/room.js
@@ -40,6 +40,14 @@
this.focused = false
}
+ Room.prototype.clone = function(){
+ return new Room ({
+ id: this.id,
+ rect: this.rect.clone(),
+ height: this.height,
+ })
+ }
+
Room.prototype.toString = function(){
return this.rect.toString()
}
diff --git a/public/assets/javascripts/rectangles/models/vec2.js b/public/assets/javascripts/rectangles/models/vec2.js
index 104c6f7..214feb9 100644
--- a/public/assets/javascripts/rectangles/models/vec2.js
+++ b/public/assets/javascripts/rectangles/models/vec2.js
@@ -17,6 +17,10 @@
vec2.prototype.clone = function(){
return new vec2(this.a, this.b)
}
+ vec2.prototype.assign = function(v){
+ this.a = v.a
+ this.b = v.b
+ }
vec2.prototype.abs = function(){
if (this.b < this.a) {
this.invert()
diff --git a/public/assets/javascripts/rectangles/models/wall.js b/public/assets/javascripts/rectangles/models/wall.js
index 027d5f5..91e7c18 100644
--- a/public/assets/javascripts/rectangles/models/wall.js
+++ b/public/assets/javascripts/rectangles/models/wall.js
@@ -146,8 +146,6 @@ window.Wall = (function(){
if (shouldFlip) {
sortedWalls = sortedWalls.reverse()
}
-
-console.log(sortedWalls.map(function(z){return useX ? z.x : z.z}).join(" "))
var len = sortedWalls.length
diff --git a/public/assets/javascripts/rectangles/util/keys.js b/public/assets/javascripts/rectangles/util/keys.js
index 5a5c9d2..62d763f 100644
--- a/public/assets/javascripts/rectangles/util/keys.js
+++ b/public/assets/javascripts/rectangles/util/keys.js
@@ -19,7 +19,7 @@ var keys = (function(){
break;
default:
if (keys.debug) console.log(key)
- base.tube(key)
+ base.tube(key, e)
break;
}
})
@@ -158,8 +158,8 @@ var keys = (function(){
'backslash' : '220',
'closebracket' : '221',
'single_quote' : '222'
- }
- var KEY_NAMES = invert_hash(KEYCODES)
+ },
+ KEY_NAMES = invert_hash(KEYCODES)
return base
})() \ No newline at end of file
diff --git a/public/assets/javascripts/rectangles/util/permissions.js b/public/assets/javascripts/rectangles/util/permissions.js
index 394b7d6..1b5a1b5 100644
--- a/public/assets/javascripts/rectangles/util/permissions.js
+++ b/public/assets/javascripts/rectangles/util/permissions.js
@@ -26,14 +26,12 @@ Permissions.prototype.assign = function (key, state) {
Permissions.prototype.add = function (key) {
var base = this
- base[op] = true
- return state
+ base[key] = true
}
Permissions.prototype.remove = function (key) {
var base = this
- base[op] = true
- return state
+ base[key] = true
}
Permissions.prototype.clear = function () {
@@ -42,3 +40,10 @@ Permissions.prototype.clear = function () {
base[op] = false
})
}
+
+Permissions.prototype.log = function () {
+ var base = this
+ base.keys.forEach(function(op){
+ console.log(op, base[op])
+ })
+} \ No newline at end of file
diff --git a/public/assets/javascripts/ui/builder/BuilderToolbar.js b/public/assets/javascripts/ui/builder/BuilderToolbar.js
index 239b05e..2eb7590 100644
--- a/public/assets/javascripts/ui/builder/BuilderToolbar.js
+++ b/public/assets/javascripts/ui/builder/BuilderToolbar.js
@@ -14,7 +14,14 @@ var BuilderToolbar = View.extend({
initialize: function(opt){
this.parent = opt.parent
- map.ui.permissions.toggle()
+ this.resetPermissions()
+ },
+
+ resetPermissions: function(){
+ map.ui.permissions.clear()
+ map.ui.permissions.add("create")
+ map.ui.permissions.add("move")
+ map.ui.permissions.add("resize")
},
toggleMap: function(){