X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=main.coffee;h=ce6798339a857547f1eec057cdb9faf624060ed2;hb=6efb82ed2f52b2567a7e7c5d42ff0ea4c3b3a615;hp=15266900a5e027346998cf00b7e27ab6d5a7bc4b;hpb=25679b665fdcdaccf3081694986f1e5312f3c09a;p=hexbog.git diff --git a/main.coffee b/main.coffee index 1526690..ce67983 100644 --- a/main.coffee +++ b/main.coffee @@ -26,6 +26,8 @@ slide_ms = 2000 board_col_heights = [5, 6, 7, 8, 7, 6, 5] +# code and css will need adjusting if you change HP_MAX +HP_MAX = 10 ############################################################## ############## fix javascript some more ################ @@ -231,7 +233,7 @@ init_board = -> encoded = get_cookie 'hexbog' if encoded? and encoded.length > board_tiles new_letter_queue = (encoded.substr 0, board_tiles).split '' - score = parseInt(encoded.substr(board_tiles), 10) + score = parseInt(encoded.substr(board_tiles), HP_MAX) # work out which grid spaces are connected # (neighbors, above, down) @@ -291,11 +293,6 @@ unselect_all = -> _unselect_tile() update_selection_display() -shrink_selection = (leave_count) -> - while selected.length > leave_count - _unselect_tile() - update_selection_display() - selected_word = -> word = '' word += tiles[i].text for i in selected @@ -304,18 +301,62 @@ selected_word = -> save_game = -> encoded = '' for t in tiles - encoded += t.letter.substr 0, 1 + encoded += t.text.substr 0, 1 encoded += score set_cookie 'hexbog', encoded, 365 window.location.hash = encoded # remove the selected tiles from the board, create new tiles, and slide everything into place blip_selection = -> + difficulty = 11 - Math.log(100 + score) # higher numbers are easier + unsink = difficulty * score_for selected_word() # how much tile restoration we have left to do faders = selected.num_sort() selected = [] update_selection_display() + neighbors = {} + nneighbors = {} for i in faders tiles[i].dom.unbind('click').fadeOut fade_ms + tiles[i].new_hp = tiles[i].hp + for n in board_neighbors[i] + neighbors[n] = tiles[n] + for nn in board_neighbors[n] + nneighbors[nn] = tiles[nn] + for i in faders + delete nneighbors[i] + delete neighbors[i] + for k, v of neighbors + delete nneighbors[k] + # convert to arrays so we can sort, etc + nneighbors = (v for k, v of nneighbors) + neighbors = (v for k, v of neighbors) + # TODO make this apply eavenly to neighbors + # TODO different range for different word lengths + for nei in [neighbors, nneighbors] + if unsink > 0 + for i in nei + if i.hp is 0 and unsink >= 10 + i.new_hp = 10 + unsink -= 10 + i.text = new_letter() + i.dom.html i.text + for nei in [neighbors, nneighbors] + if unsink > 0 + for i in nei + if i.hp > 0 and unsink > 0 + unsink -= 10 - i.hp + i.new_hp = 10 + for i in tiles + i.new_hp ?= i.hp - 1 + if i.new_hp < 0 + i.new_hp = 0 + else if i.new_hp > HP_MAX + i.new_hp = HP_MAX + if i.new_hp isnt i.hp + i.dom.removeClass "hp#{i.hp}" + i.dom.addClass "hp#{i.new_hp}" + i.hp = i.new_hp + delete i.new_hp timeout fade_ms + 1, -> # which tiles need to be slid down sliders = (false for i in tiles) @@ -401,36 +442,31 @@ select_tile = (num) -> new_tile = (num, x, y) -> letter = new_letter() - html_tile = $("