       when 270
         new MapArea2D(@x1 - factor * @width(), @y1, @x2, @y2)
 
+class MapArea2DVertex extends MapArea2D
+  constructor: (@x1, @y1, @x2, @y2) ->
+    @siblings = []
+  init_vxy: (@vx, @vy) ->
+  add_sibling: (sibling) ->
+    @siblings.push(sibling)
+
 class Map2D
   max_x: 520
   max_y: 520
   default_width: 40
   default_height: 40
+  infinity: 65535
   map_units: [] # has_many map_units
   constructor: (@battle_field, @canvas, @scene) ->
     @image = document.getElementById('resources')

        @inputs[key].push("keydown")

class EnemyAICommander extends Commander
  next: ->
    # attack home
    # attack user tank
    @battle_field_object

class MissileCommander extends Commander
  next: -> @move("start")


    if @map.out_of_bound(destroy_area)
      @bom_on_destroy = true
      @model.energy -= @max_depend_point
    else
      hit_map_units = @map.units_at(destroy_area)
      _.each(hit_map_units, (unit) =>
        defend_point = unit.defend(@model, destroy_area)
        @bom_on_destroy = (defend_point == @max_depend_point)
        @model.energy -= defend_point
      )
    @model.destroy() if @model.energy <= 0
  destroy_area: ->
    switch @direction
      when 0
