(function(){ UndoStack.register([ { type: "create-scenery", undo: function(state){ Scenery.remove(state.id) Scenery.resize.hide() // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, redo: function(state){ var scenery = Scenery.deserialize([ state ]) Scenery.resize.show( scenery ) // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, }, { type: "update-scenery", undo: function(state){ var scenery = Scenery.find(state.id) var wall = Walls.find( state.wall_id ) scenery.deserialize(state) scenery.set_wall({ wall: wall }) if (editor.permissions.resize) { Scenery.resize.show(scenery) } // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, redo: function(state){ var scenery = Scenery.find(state.id) var wall = Walls.find( state.wall_id ) scenery.deserialize(state) scenery.set_wall({ wall: wall }) if (editor.permissions.resize) { Scenery.resize.show(scenery) Scenery.resize.move_dots() Scenery.resize.rotate_dots() } // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, }, { type: "destroy-scenery", undo: function(state){ var scenery = Scenery.deserialize([ state ]) Scenery.resize.show( scenery ) // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, redo: function(state){ Scenery.resize.hide() Scenery.remove(state.id) // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, }, // { type: "create-room", undo: function(room){ Rooms.remove(room) Rooms.rebuild() }, redo: function(room){ Rooms.add(new Room(room)) Rooms.rebuild() app.tube("builder-pick-room", room) }, }, { type: "update-room", undo: function(state){ var room = Rooms.list[state.id] room.rect.assign( state.rect ) room.height = state.height Rooms.rebuild() 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.rebuild() app.tube("builder-pick-room", room) }, }, { type: "destroy-room", undo: function(room){ Rooms.add(new Room(room)) Rooms.rebuild() app.tube("builder-pick-room", room) }, redo: function(room){ Rooms.remove(room) Rooms.rebuild() }, }, { type: "update-rooms-height", undo: function(state){ var rooms = Rooms.values() rooms.forEach(function(room){ room.height = state }) }, }, // { type: "update-wallpaper", undo: function(state){ var wall = Walls.lookup[state.id] wall.deserialize(state) Minotaur.watch( app.router.editorView.settings ) }, }, { type: "update-all-wallpaper", undo: function(state){ Walls.deserialize(state) Minotaur.watch( app.router.editorView.settings ) }, }, { type: "choose-preset", undo: function(state){ app.controller.colorControl.load(state.colors) Walls.deserialize(state.walls) Minotaur.watch( app.router.editorView.settings ) }, redo: function(state){ app.controller.presets.loadByName(state) Minotaur.watch( app.router.editorView.settings ) }, }, { type: "choose-another-preset", undo: function(state){ app.controller.presets.loadByName(state) Minotaur.watch( app.router.editorView.settings ) }, }, { type: "update-colors", undo: function(state){ Walls.setColor[ state.mode ]( state.rgb ) app.router.editorView.colorControl.setSwatchColor( state.mode, state.rgb ) Minotaur.watch( app.router.editorView.settings ) }, }, { type: "randomize-scenery", undo: function(state){ state.added.forEach(function(_scenery){ Scenery.remove(_scenery.id) }) var scenery_list = Scenery.deserialize(state.removed) scenery_list.forEach(function(scenery){ scenery.was_randomly_placed = true }) Scenery.resize.hide() // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, redo: function(state){ state.removed.forEach(function(_scenery){ Scenery.remove(_scenery.id) }) var scenery_list = Scenery.deserialize(state.added) scenery_list.forEach(function(scenery){ scenery.was_randomly_placed = true }) // TODO: watch individual scenery object here Minotaur.watch( app.router.editorView.settings ) }, }, ]) })()