- # which tiles need to be slid down
- sliders = (false for i in tiles)
-
- prev_col_top = null
- next_new_y = null
- for deleted in faders
- # find the tile number of the top tile in this column
- if board_aboves[deleted].length is 0
- col_top = deleted
- else
- col_top = board_aboves[deleted][0]
-
- # reset location where new tiles appear when we change columns
- if prev_col_top isnt col_top
- next_new_y = -10 - tile_width
- prev_col_top = col_top
-
- tiles[deleted].dom.remove()
-
- # For each each tile above the one we've deleted:
- # 1. move it down one slot in the data scructures
- # 2. mark it as needing to slide
- dest = deleted
- aboves = board_aboves[deleted].clone().reverse()
- for above in aboves
- tiles[dest] = tiles[above]
- tiles[dest].id = dest
- tiles[dest].dom.data 'tile_number', dest
- sliders[dest] = true
- --dest
- sliders[col_top] = true # the new tile needs to be slid down too
-
- new_tile col_top, board_left_px[col_top], next_new_y
- next_new_y -= tile_width + 50
-
- for slide, i in sliders
- if slide
- tiles[i].dom.animate {top: "#{tile_top_px[i]}px"}, slide_ms
- sliders[i] = false
+ # delete old tiles, mark where tiles are moving
+ for fader in faders
+ fader.space.column.fader_count += 1
+ fader.dom.remove()
+ fader.removed = true
+ for above in fader.space.aboves
+ if above.tile.dest?
+ above.tile.dest += 1
+ else
+ above.tile.dest = above.id + 1
+
+ # move tiles down (graphically and in data structure)
+ rspaces = []
+ for s in spaces
+ rspaces.unshift s
+ for space in rspaces
+ tile = space.tile
+ if tile.dest? and not (tile.removed?)
+ dest_space = spaces[tile.dest]
+ delete tile.dest
+ tile.dom.animate {top: "#{dest_space.top_px}px"}, slide_ms
+ tile.space = dest_space
+ dest_space.tile = tile
+
+ # create new tiles
+ for column in columns
+ dest = 0
+ while column.fader_count > 0
+ column.fader_count -= 1
+ slide_from = -10 - tile_width
+ slide_from -= (50 + tile_width) * column.fader_count
+ space = column.spaces[dest++]
+ tile = new_tile space, slide_from
+ tile.dom.animate {top: "#{space.top_px}px"}, slide_ms
+