From efa2bee08c01b1c33cafce8bbaccfed28b5f775c Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Sun, 22 Jun 2014 19:11:15 +0530
Subject: [PATCH 01/10] Adds shortcuts for undo/redo for thangs tab view

---
 app/views/editor/level/thangs_tab_view.coffee | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/app/views/editor/level/thangs_tab_view.coffee b/app/views/editor/level/thangs_tab_view.coffee
index 8e905654a..e2d0d4ac8 100644
--- a/app/views/editor/level/thangs_tab_view.coffee
+++ b/app/views/editor/level/thangs_tab_view.coffee
@@ -57,6 +57,8 @@ module.exports = class ThangsTabView extends View
     'delete, del, backspace': 'deleteSelectedExtantThang'
     'left': -> @moveAddThangSelection -1
     'right': -> @moveAddThangSelection 1
+    'ctrl+z': 'undoAction'
+    'ctrl+shift+z': 'redoAction'
 
   constructor: (options) ->
     super options
@@ -450,6 +452,12 @@ module.exports = class ThangsTabView extends View
     $('#add-thangs-column').toggle()
     @onWindowResize e
 
+  undoAction: (e) ->
+    @thangsTreema.undo()
+
+  redoAction: (e) ->
+    @thangsTreema.redo()
+
 class ThangsNode extends TreemaNode.nodeMap.array
   valueClass: 'treema-array-replacement'
   getChildren: ->

From c40da260f04d68e4fc185404a3a42b1788addfe5 Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Tue, 24 Jun 2014 16:00:29 +0530
Subject: [PATCH 02/10] Adds initial modal and view for terrain generator

---
 app/styles/terrain_randomise.sass             | 148 ++++++++++++++++++
 app/templates/modal/terrain_randomise.jade    |  14 ++
 .../modal/terrain_randomise_modal.coffee      |  29 ++++
 3 files changed, 191 insertions(+)
 create mode 100644 app/styles/terrain_randomise.sass
 create mode 100644 app/templates/modal/terrain_randomise.jade
 create mode 100644 app/views/modal/terrain_randomise_modal.coffee

diff --git a/app/styles/terrain_randomise.sass b/app/styles/terrain_randomise.sass
new file mode 100644
index 000000000..3022f10c1
--- /dev/null
+++ b/app/styles/terrain_randomise.sass
@@ -0,0 +1,148 @@
+#terrain-randomise-modal
+  #noob-view p
+    font-size: 30px
+  
+  #skip-tutorial-button
+    font-size: 16px
+  
+  .tutorial-suggestion
+    text-align: center
+    font-size: 18px
+    margin: 10px 0 30px
+  
+  .play-option
+    margin-bottom: 15px
+    width: 100%
+    height: 100px
+    overflow: hidden
+    background: white
+    border: 1px solid #333
+    position: relative
+
+    -webkit-transition: opacity 0.3s ease-in-out
+    -moz-transition: opacity 0.3s ease-in-out
+    -ms-transition: opacity 0.3s ease-in-out
+    -o-transition: opacity 0.3s ease-in-out
+    transition: opacity 0.3s ease-in-out
+    
+    opacity: 0.4
+    
+    border-radius: 5px
+    .only-one
+      -webkit-transition: opacity 0.3s ease-in-out
+      -moz-transition: opacity 0.3s ease-in-out
+      -ms-transition: opacity 0.3s ease-in-out
+      -o-transition: opacity 0.3s ease-in-out
+      transition: opacity 0.3s ease-in-out
+      opacity: 0
+    
+  .play-option:hover
+    opacity: 1
+    .only-one
+      opacity: 1
+    
+  .my-icon
+    position: relative
+    left: 0
+    top: -10px
+    z-index: 1
+    
+  .my-team-icon
+    height: 60px
+    position: relative
+    top: -10px
+    left: 10px
+    z-index: 0
+    
+  .opponent-team-icon
+    height: 60px
+    position: relative
+    top: 10px
+    right: 10px
+    z-index: 0
+    float: right
+    -moz-transform: scaleX(-1)
+    -o-transform: scaleX(-1)
+    -webkit-transform: scaleX(-1)
+    transform: scaleX(-1)
+    filter: FlipH
+    -ms-filter: "FlipH"
+    
+  .opponent-icon
+    position: relative
+    float: right
+    right: 0
+    top: -10px
+    -moz-transform: scaleX(-1)
+    -o-transform: scaleX(-1)
+    -webkit-transform: scaleX(-1)
+    transform: scaleX(-1)
+    filter: FlipH
+    -ms-filter: "FlipH"
+    z-index: 1
+    
+  .name-label
+    border-bottom: 20px solid lightslategray
+    height: 0
+    width: 40%
+    position: absolute
+    bottom: 0
+    color: black
+    font-weight: bold
+    text-align: center
+    z-index: 2
+    
+    span
+      position: relative
+      top: 1px
+      
+  .my-name
+    border-right: 15px solid transparent
+    left: 0
+    span
+      left: 3px
+    
+  .preset-size
+    border-left: 15px solid transparent
+    right: 0
+    //text-align: right
+    span
+      right: 3px
+  
+  .preset-name
+    border-top: 25px solid darkgray
+    border-left: 20px solid transparent
+    border-right: 20px solid transparent
+    height: 0
+    width: 30%
+    position: absolute
+    left: 35%
+    top: 0
+    color: black
+    text-align: center
+    font-size: 18px
+    font-weight: bold
+
+    span
+      position: relative
+      top: -25px
+      
+  .easy-option .preset-name
+    border-top: 25px solid limegreen
+      
+  .medium-option .preset-name
+    border-top: 25px solid darkorange
+    
+  .hard-option .preset-name
+    border-top: 25px solid black
+    color: white
+
+  .vs
+    position: absolute
+    left: 40%
+    right: 40%
+    text-align: center
+    top: 35px
+    font-size: 40px
+    font-weight: bolder
+    color: black
\ No newline at end of file
diff --git a/app/templates/modal/terrain_randomise.jade b/app/templates/modal/terrain_randomise.jade
new file mode 100644
index 000000000..e2bbd23f6
--- /dev/null
+++ b/app/templates/modal/terrain_randomise.jade
@@ -0,0 +1,14 @@
+extends /templates/modal/modal_base
+
+block modal-header-content
+  h3(data-i18n="editor.pick_a_terrain") Pick a Terrain
+
+block modal-body-content
+  div#normal-view
+    a(href="#")
+        div.play-option(data-preset-type="grassy", data-preset-size="small")
+          div.preset-size.name-label
+            span(data-i18n="ladder.small") Small
+          div.preset-name
+            span(data-i18n="ladder.grassy") Grassy
+    //- for model in models
\ No newline at end of file
diff --git a/app/views/modal/terrain_randomise_modal.coffee b/app/views/modal/terrain_randomise_modal.coffee
new file mode 100644
index 000000000..6dba35042
--- /dev/null
+++ b/app/views/modal/terrain_randomise_modal.coffee
@@ -0,0 +1,29 @@
+ModalView = require 'views/kinds/ModalView'
+template = require 'templates/modal/terrain_randomise'
+CocoModel = require 'models/CocoModel'
+
+module.exports = class TerrainRandomiseModal extends ModalView
+  id: 'terrain-randomise-modal'
+  template: template
+  thangs = []
+
+  events:
+    'click .play-option': 'onRandomise'
+
+  onRevertModel: (e) ->
+    id = $(e.target).val()
+    CocoModel.backedUp[id].revert()
+    $(e.target).closest('tr').remove()
+    @reloadOnClose = true
+
+  onRandomise: (e) ->
+    
+  getRenderData: ->
+    c = super()
+    models = _.values CocoModel.backedUp
+    models = (m for m in models when m.hasLocalChanges())
+    c.models = models
+    c
+
+  onHidden: ->
+    location.reload() if @reloadOnClose

From 813ecaa59c1350f05b2dd350bbf920b9ba6ff1f7 Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Tue, 24 Jun 2014 16:05:14 +0530
Subject: [PATCH 03/10] Adds randomise option to dropdown on editor page

---
 app/templates/editor/level/edit.jade | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/app/templates/editor/level/edit.jade b/app/templates/editor/level/edit.jade
index d04b8f4bd..e446f7613 100644
--- a/app/templates/editor/level/edit.jade
+++ b/app/templates/editor/level/edit.jade
@@ -79,6 +79,8 @@ block header
               a(data-i18n="common.fork")#fork-level-start-button Fork
             li(class=anonymous ? "disabled": "")
               a(data-toggle="coco-modal", data-target="modal/revert", data-i18n="editor.revert")#revert-button Revert
+            li(class=anonymous ? "disabled": "")
+              a(data-toggle="coco-modal", data-target="modal/terrain_randomise", data-i18n="editor.randomise")#randomise-button Randomise
             li(class=anonymous ? "disabled": "")
               a(data-i18n="editor.pop_i18n")#pop-level-i18n-button Populate i18n
             li.divider

From 1436a4dac75b9157218e0bfab278248c7e017ae8 Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Tue, 24 Jun 2014 16:15:39 +0530
Subject: [PATCH 04/10] Cleans up some css for terrain generator modal

---
 app/styles/terrain_randomise.sass          | 28 ++++------------------
 app/templates/modal/terrain_randomise.jade |  2 +-
 2 files changed, 5 insertions(+), 25 deletions(-)

diff --git a/app/styles/terrain_randomise.sass b/app/styles/terrain_randomise.sass
index 3022f10c1..e6cf29bec 100644
--- a/app/styles/terrain_randomise.sass
+++ b/app/styles/terrain_randomise.sass
@@ -1,16 +1,6 @@
 #terrain-randomise-modal
-  #noob-view p
-    font-size: 30px
-  
-  #skip-tutorial-button
-    font-size: 16px
-  
-  .tutorial-suggestion
-    text-align: center
-    font-size: 18px
-    margin: 10px 0 30px
-  
-  .play-option
+
+  .choose-option
     margin-bottom: 15px
     width: 100%
     height: 100px
@@ -36,7 +26,7 @@
       transition: opacity 0.3s ease-in-out
       opacity: 0
     
-  .play-option:hover
+  .choose-option:hover
     opacity: 1
     .only-one
       opacity: 1
@@ -135,14 +125,4 @@
     
   .hard-option .preset-name
     border-top: 25px solid black
-    color: white
-
-  .vs
-    position: absolute
-    left: 40%
-    right: 40%
-    text-align: center
-    top: 35px
-    font-size: 40px
-    font-weight: bolder
-    color: black
\ No newline at end of file
+    color: white
\ No newline at end of file
diff --git a/app/templates/modal/terrain_randomise.jade b/app/templates/modal/terrain_randomise.jade
index e2bbd23f6..680af187c 100644
--- a/app/templates/modal/terrain_randomise.jade
+++ b/app/templates/modal/terrain_randomise.jade
@@ -6,7 +6,7 @@ block modal-header-content
 block modal-body-content
   div#normal-view
     a(href="#")
-        div.play-option(data-preset-type="grassy", data-preset-size="small")
+        div.choose-option(data-preset-type="grassy", data-preset-size="small")
           div.preset-size.name-label
             span(data-i18n="ladder.small") Small
           div.preset-name

From 74205b31d2ce69a3558798f9bf1e259600947e66 Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Thu, 26 Jun 2014 18:32:31 +0530
Subject: [PATCH 05/10] Adds code for passing randomised thangs to thang view

---
 app/views/editor/level/thangs_tab_view.coffee  |  6 ++++++
 app/views/modal/terrain_randomise_modal.coffee | 13 ++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/app/views/editor/level/thangs_tab_view.coffee b/app/views/editor/level/thangs_tab_view.coffee
index e2d0d4ac8..f68965bc3 100644
--- a/app/views/editor/level/thangs_tab_view.coffee
+++ b/app/views/editor/level/thangs_tab_view.coffee
@@ -43,6 +43,7 @@ module.exports = class ThangsTabView extends View
     'sprite:mouse-up': 'onSpriteMouseUp'
     'sprite:double-clicked': 'onSpriteDoubleClicked'
     'surface:stage-mouse-up': 'onStageMouseUp'
+    'randomise:terrain-generated': 'onRandomiseTerrain'
 
   events:
     'click #extant-thangs-filter button': 'onFilterExtantThangs'
@@ -223,6 +224,11 @@ module.exports = class ThangsTabView extends View
     return unless e.thang
     @editThang thangID: e.thang.id
 
+  onRandomiseTerrain: (e) ->
+    console.log e
+    for thang in e.thangs
+      console.log thang.id, thang.pos
+
   # TODO: figure out a good way to have all Surface clicks and Treema clicks just proxy in one direction, so we can maintain only one way of handling selection and deletion
   onExtantThangSelected: (e) ->
     @selectedExtantSprite?.setNameLabel? null unless @selectedExtantSprite is e.sprite
diff --git a/app/views/modal/terrain_randomise_modal.coffee b/app/views/modal/terrain_randomise_modal.coffee
index 6dba35042..0b5f96426 100644
--- a/app/views/modal/terrain_randomise_modal.coffee
+++ b/app/views/modal/terrain_randomise_modal.coffee
@@ -8,7 +8,7 @@ module.exports = class TerrainRandomiseModal extends ModalView
   thangs = []
 
   events:
-    'click .play-option': 'onRandomise'
+    'click .choose-option': 'onRandomise'
 
   onRevertModel: (e) ->
     id = $(e.target).val()
@@ -17,6 +17,17 @@ module.exports = class TerrainRandomiseModal extends ModalView
     @reloadOnClose = true
 
   onRandomise: (e) ->
+    @thangs = []
+    @thangs.push {
+      'id':'Grass01'
+      'pos':{
+        'x':20
+        'y':20
+        }
+      }
+    Backbone.Mediator.publish('randomise:terrain-generated', 
+      'thangs': @thangs
+    )
     
   getRenderData: ->
     c = super()

From 38bed0ee93649b8e67cc65416c25fa57f857a30c Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Thu, 26 Jun 2014 21:40:11 +0530
Subject: [PATCH 06/10] Random thangs are now created and positioned in the
 thangs view

---
 app/views/editor/level/thangs_tab_view.coffee | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/views/editor/level/thangs_tab_view.coffee b/app/views/editor/level/thangs_tab_view.coffee
index f68965bc3..bcc398bbc 100644
--- a/app/views/editor/level/thangs_tab_view.coffee
+++ b/app/views/editor/level/thangs_tab_view.coffee
@@ -228,6 +228,8 @@ module.exports = class ThangsTabView extends View
     console.log e
     for thang in e.thangs
       console.log thang.id, thang.pos
+      @selectAddThangType thang.id
+      @addThang @addThangType, thang.pos
 
   # TODO: figure out a good way to have all Surface clicks and Treema clicks just proxy in one direction, so we can maintain only one way of handling selection and deletion
   onExtantThangSelected: (e) ->
@@ -280,6 +282,7 @@ module.exports = class ThangsTabView extends View
     @selectAddThang {target: icons[nextSelectedIndex]}
 
   selectAddThangType: (type, @cloneSourceThang) ->
+    console.log type
     if _.isString type
       type = _.find @supermodel.getModels(ThangType), (m) -> m.get('name') is type
     pos = @addThangSprite?.thang.pos  # Maintain old sprite's pos if we have it
@@ -397,6 +400,7 @@ module.exports = class ThangsTabView extends View
     @editThang thangID: id if id
 
   addThang: (thangType, pos) ->
+    console.log thangType, pos
     thangID = Thang.nextID(thangType.get('name'), @world) until thangID and not @thangsTreema.get "id=#{thangID}"
     if @cloneSourceThang
       components = _.cloneDeep @thangsTreema.get "id=#{@cloneSourceThang.id}/components"

From b401b0489378d7b82d96615280e12b6dff0d0e41 Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Sat, 28 Jun 2014 10:20:55 +0530
Subject: [PATCH 07/10] Adds randomiseFloor and randomiseBorder functions

---
 app/templates/modal/terrain_randomise.jade    |  2 +-
 .../modal/terrain_randomise_modal.coffee      | 94 +++++++++++++++++--
 2 files changed, 88 insertions(+), 8 deletions(-)

diff --git a/app/templates/modal/terrain_randomise.jade b/app/templates/modal/terrain_randomise.jade
index 680af187c..799b4312c 100644
--- a/app/templates/modal/terrain_randomise.jade
+++ b/app/templates/modal/terrain_randomise.jade
@@ -6,7 +6,7 @@ block modal-header-content
 block modal-body-content
   div#normal-view
     a(href="#")
-        div.choose-option(data-preset-type="grassy", data-preset-size="small")
+        div.choose-option(data-preset-type="dungeon", data-preset-size="small")
           div.preset-size.name-label
             span(data-i18n="ladder.small") Small
           div.preset-name
diff --git a/app/views/modal/terrain_randomise_modal.coffee b/app/views/modal/terrain_randomise_modal.coffee
index 0b5f96426..35562ef81 100644
--- a/app/views/modal/terrain_randomise_modal.coffee
+++ b/app/views/modal/terrain_randomise_modal.coffee
@@ -2,6 +2,34 @@ ModalView = require 'views/kinds/ModalView'
 template = require 'templates/modal/terrain_randomise'
 CocoModel = require 'models/CocoModel'
 
+presets = {
+  'dungeon': {
+    'type':'dungeon'
+    'borders':['Dungeon Wall']
+    'floors':['Dungeon Floor']
+    'decorations':[]
+  }
+}
+
+sizes = {
+  'small': {
+    'x':80
+    'y':68
+  }
+  'large': {
+    'x':160
+    'y':136
+  }
+  'floorSize': {
+    'x':20
+    'y':20
+  }
+  'borderSize': {
+    'x':4
+    'y':4
+  }
+}
+
 module.exports = class TerrainRandomiseModal extends ModalView
   id: 'terrain-randomise-modal'
   template: template
@@ -18,16 +46,68 @@ module.exports = class TerrainRandomiseModal extends ModalView
 
   onRandomise: (e) ->
     @thangs = []
-    @thangs.push {
-      'id':'Grass01'
-      'pos':{
-        'x':20
-        'y':20
-        }
-      }
+    target = $(e.target)
+    presetType = target.attr 'data-preset-type'
+    presetSize = target.attr 'data-preset-size'
+    @randomiseThangs presetType, presetSize
+
     Backbone.Mediator.publish('randomise:terrain-generated', 
       'thangs': @thangs
     )
+
+  randomiseThangs: (presetName, presetSize) ->
+    preset = presets[presetName]
+    presetSize = sizes[presetSize]
+    @thangs = []
+    @randomiseFloor preset, presetSize
+    @randomiseBorder preset, presetSize
+
+  randomiseFloor: (preset, presetSize) ->
+    for i in _.range(0, presetSize.x, sizes.floorSize.x)
+      for j in _.range(0, presetSize.y, sizes.floorSize.y)
+        @thangs.push {
+          'id': @getRandomThang(preset.floors)
+          'pos': {
+            'x': i
+            'y': j
+          }
+        }
+
+  randomiseBorder: (preset, presetSize) ->
+    for i in _.range(0-sizes.floorSize.x/2+sizes.borderSize.x, presetSize.x-sizes.floorSize.x/2, sizes.borderSize.x)
+      @thangs.push {
+        'id': @getRandomThang(preset.borders)
+        'pos': {
+          'x': i
+          'y': 0-sizes.floorSize.x/2
+        }
+      }
+      @thangs.push {
+        'id': @getRandomThang(preset.borders)
+        'pos': {
+          'x': i
+          'y': presetSize.y - sizes.borderSize.y
+        }
+      }
+
+    for i in _.range(0-sizes.floorSize.y/2, presetSize.y-sizes.borderSize.y, sizes.borderSize.y)
+      @thangs.push {
+        'id': @getRandomThang(preset.borders)
+        'pos': {
+          'x': 0-sizes.floorSize.x/2+sizes.borderSize.x
+          'y': i
+        }
+      }
+      @thangs.push {
+        'id': @getRandomThang(preset.borders)
+        'pos': {
+          'x': presetSize.x - sizes.borderSize.x - sizes.floorSize.x/2
+          'y': i
+        }
+      }
+
+  getRandomThang: (thangList) ->
+    return thangList[_.random(0, thangList.length-1)]
     
   getRenderData: ->
     c = super()

From dbe464df1637b490a1933a3d1de700624c6d83ca Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Sat, 28 Jun 2014 10:22:15 +0530
Subject: [PATCH 08/10] Removes console logs

---
 app/views/editor/level/thangs_tab_view.coffee | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/app/views/editor/level/thangs_tab_view.coffee b/app/views/editor/level/thangs_tab_view.coffee
index bcc398bbc..010b38b50 100644
--- a/app/views/editor/level/thangs_tab_view.coffee
+++ b/app/views/editor/level/thangs_tab_view.coffee
@@ -225,9 +225,7 @@ module.exports = class ThangsTabView extends View
     @editThang thangID: e.thang.id
 
   onRandomiseTerrain: (e) ->
-    console.log e
     for thang in e.thangs
-      console.log thang.id, thang.pos
       @selectAddThangType thang.id
       @addThang @addThangType, thang.pos
 
@@ -282,7 +280,6 @@ module.exports = class ThangsTabView extends View
     @selectAddThang {target: icons[nextSelectedIndex]}
 
   selectAddThangType: (type, @cloneSourceThang) ->
-    console.log type
     if _.isString type
       type = _.find @supermodel.getModels(ThangType), (m) -> m.get('name') is type
     pos = @addThangSprite?.thang.pos  # Maintain old sprite's pos if we have it
@@ -400,7 +397,6 @@ module.exports = class ThangsTabView extends View
     @editThang thangID: id if id
 
   addThang: (thangType, pos) ->
-    console.log thangType, pos
     thangID = Thang.nextID(thangType.get('name'), @world) until thangID and not @thangsTreema.get "id=#{thangID}"
     if @cloneSourceThang
       components = _.cloneDeep @thangsTreema.get "id=#{@cloneSourceThang.id}/components"

From da0b0d9830d1c748ac35271ce73877995d1fdd31 Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Fri, 4 Jul 2014 01:04:21 +0530
Subject: [PATCH 09/10] Big terrain generator commit - 1.Adds method for
 randomising decorations/doodads 2.Creates presets 3.Adds thang clusters which
 can be used to create presets easily

---
 app/templates/modal/terrain_randomise.jade    |  2 +-
 .../modal/terrain_randomise_modal.coffee      | 89 +++++++++++++++++--
 2 files changed, 82 insertions(+), 9 deletions(-)

diff --git a/app/templates/modal/terrain_randomise.jade b/app/templates/modal/terrain_randomise.jade
index 799b4312c..680af187c 100644
--- a/app/templates/modal/terrain_randomise.jade
+++ b/app/templates/modal/terrain_randomise.jade
@@ -6,7 +6,7 @@ block modal-header-content
 block modal-body-content
   div#normal-view
     a(href="#")
-        div.choose-option(data-preset-type="dungeon", data-preset-size="small")
+        div.choose-option(data-preset-type="grassy", data-preset-size="small")
           div.preset-size.name-label
             span(data-i18n="ladder.small") Small
           div.preset-name
diff --git a/app/views/modal/terrain_randomise_modal.coffee b/app/views/modal/terrain_randomise_modal.coffee
index 35562ef81..e7bdc4a73 100644
--- a/app/views/modal/terrain_randomise_modal.coffee
+++ b/app/views/modal/terrain_randomise_modal.coffee
@@ -2,12 +2,51 @@ ModalView = require 'views/kinds/ModalView'
 template = require 'templates/modal/terrain_randomise'
 CocoModel = require 'models/CocoModel'
 
+clusters = {
+  'rocks': ['Rock 1', 'Rock 2', 'Rock 3', 'Rock 4', 'Rock 5', 'Rock Cluster 1', 'Rock Cluster 2', 'Rock Cluster 3']
+  'trees': ['Tree 1', 'Tree 2', 'Tree 3', 'Tree 4']  
+  'shrubs': ['Shrub 1', 'Shrub 2', 'Shrub 3']
+  'houses': ['House 1', 'House 2', 'House 3', 'House 4']
+  'animals': ['Cow', 'Horse']
+  'wood': ['Firewood 1', 'Firewood 2', 'Firewood 3', 'Barrel']
+  'farm': ['Farm']
+}
+
 presets = {
-  'dungeon': {
-    'type':'dungeon'
-    'borders':['Dungeon Wall']
-    'floors':['Dungeon Floor']
-    'decorations':[]
+  # 'dungeon': {
+  #   'type':'dungeon'
+  #   'borders':['Dungeon Wall']
+  #   'floors':['Dungeon Floor']
+  #   'decorations':[]
+  # }
+  'grassy': {
+    'type':'grassy'
+    'borders':['Tree 1', 'Tree 2', 'Tree 3']
+    'floors':['Grass01', 'Grass02', 'Grass03']
+    'decorations': {
+      'house': {
+        'num':[1,2] #min-max
+        'width': 20
+        'height': 20
+        'clusters': {
+          'houses':[1,1]
+          'trees':[1,2]
+          'shrubs':[0,3]
+          'rocks':[1,2]
+        }
+      }
+      'farm': {
+        'num':[1,2] #min-max
+        'width': 20
+        'height': 20
+        'clusters': {
+          'farm':[1,1]
+          'shrubs':[2,3]
+          'wood':[2,4]
+          'animals':[2,3]
+        }
+      }
+    }
   }
 }
 
@@ -45,12 +84,12 @@ module.exports = class TerrainRandomiseModal extends ModalView
     @reloadOnClose = true
 
   onRandomise: (e) ->
-    @thangs = []
     target = $(e.target)
     presetType = target.attr 'data-preset-type'
     presetSize = target.attr 'data-preset-size'
     @randomiseThangs presetType, presetSize
-
+    # console.log target, target.attr 'data-preset-type'
+    # console.log target.attr 'data-preset-size'
     Backbone.Mediator.publish('randomise:terrain-generated', 
       'thangs': @thangs
     )
@@ -61,6 +100,8 @@ module.exports = class TerrainRandomiseModal extends ModalView
     @thangs = []
     @randomiseFloor preset, presetSize
     @randomiseBorder preset, presetSize
+    @randomiseDecorations preset, presetSize
+    # console.log _.range(0, presetSize.x, sizes.floorSize)
 
   randomiseFloor: (preset, presetSize) ->
     for i in _.range(0, presetSize.x, sizes.floorSize.x)
@@ -106,9 +147,41 @@ module.exports = class TerrainRandomiseModal extends ModalView
         }
       }
 
+  randomiseDecorations: (preset, presetSize)->
+    console.log preset.decorations
+    for name, decoration of preset.decorations
+      console.log 'here', decoration
+      for num in _.range(_.random(decoration.num[0], decoration.num[1]))
+        center = 
+        {
+          'x':_.random(decoration.width, presetSize.x - decoration.width), 
+          'y':_.random(decoration.height, presetSize.y - decoration.height)
+        }
+        min = 
+        {
+          'x':center.x - decoration.width/2
+          'y':center.y - decoration.height/2     
+        }
+        max = 
+        {
+          'x':center.x + decoration.width/2
+          'y':center.y + decoration.height/2     
+        }
+        console.log center, min, max
+        for cluster, range of decoration.clusters
+          for i in _.range(_.random(range[0], range[1]))
+            @thangs.push {
+              'id':@getRandomThang(clusters[cluster])
+              'pos':{
+                'x':_.random(min.x, max.x)
+                'y':_.random(min.y, max.y)
+              }
+            }
+
+
   getRandomThang: (thangList) ->
     return thangList[_.random(0, thangList.length-1)]
-    
+
   getRenderData: ->
     c = super()
     models = _.values CocoModel.backedUp

From 5fb4f161d0e99c950ad1d08222095a9a5e9b0913 Mon Sep 17 00:00:00 2001
From: Jayant Jain <jayantjain1992@gmail.com>
Date: Thu, 10 Jul 2014 21:18:51 +0530
Subject: [PATCH 10/10] Removes console logs

---
 app/views/modal/terrain_randomise_modal.coffee | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/app/views/modal/terrain_randomise_modal.coffee b/app/views/modal/terrain_randomise_modal.coffee
index e7bdc4a73..94b4676fb 100644
--- a/app/views/modal/terrain_randomise_modal.coffee
+++ b/app/views/modal/terrain_randomise_modal.coffee
@@ -88,8 +88,6 @@ module.exports = class TerrainRandomiseModal extends ModalView
     presetType = target.attr 'data-preset-type'
     presetSize = target.attr 'data-preset-size'
     @randomiseThangs presetType, presetSize
-    # console.log target, target.attr 'data-preset-type'
-    # console.log target.attr 'data-preset-size'
     Backbone.Mediator.publish('randomise:terrain-generated', 
       'thangs': @thangs
     )
@@ -101,7 +99,6 @@ module.exports = class TerrainRandomiseModal extends ModalView
     @randomiseFloor preset, presetSize
     @randomiseBorder preset, presetSize
     @randomiseDecorations preset, presetSize
-    # console.log _.range(0, presetSize.x, sizes.floorSize)
 
   randomiseFloor: (preset, presetSize) ->
     for i in _.range(0, presetSize.x, sizes.floorSize.x)
@@ -148,9 +145,7 @@ module.exports = class TerrainRandomiseModal extends ModalView
       }
 
   randomiseDecorations: (preset, presetSize)->
-    console.log preset.decorations
     for name, decoration of preset.decorations
-      console.log 'here', decoration
       for num in _.range(_.random(decoration.num[0], decoration.num[1]))
         center = 
         {
@@ -167,7 +162,6 @@ module.exports = class TerrainRandomiseModal extends ModalView
           'x':center.x + decoration.width/2
           'y':center.y + decoration.height/2     
         }
-        console.log center, min, max
         for cluster, range of decoration.clusters
           for i in _.range(_.random(range[0], range[1]))
             @thangs.push {