X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=main.coffee;h=be5a85f4b05496ce5d8206c75da8f184deb9085b;hb=ee2ec8d8939f363a4395fce3d2d9988e493f9cc7;hp=7ea4a02c65d89f8e982db2c5a33289945684024b;hpb=0b52d6dd991c18addb3c7fbff0174b8c7c2ba6cb;p=hexbog.git diff --git a/main.coffee b/main.coffee index 7ea4a02..be5a85f 100644 --- a/main.coffee +++ b/main.coffee @@ -80,7 +80,7 @@ board_col_top_px = [] score = 0 board = new Array(board_tiles) # letters ("Qu" or single letter) board_neighbors = [] # array of tile numbers "next to" this one -board_top_px = [] # array of pixel coordinates for top of column +tile_top_px = [] # array of pixel coordinates for top of column board_left_px = [] # array of pixel coordinates for left of column board_aboves = [] # array of tile numbers above, starting from top board_below = [] # tile number of next tile below or false @@ -189,7 +189,7 @@ init_board_layout = () -> is_bottom_tile = i is board_col_heights[col_num] - 1 # link tile number to pixel "top" and "left" of containing column - board_top_px.push col_top_px + tile_top_px.push col_top_px + i * tile_width board_left_px.push col_num * tile_width # aboves (array of tile numbers above, starting from top) @@ -285,12 +285,8 @@ selected_word = -> word += board[i] for i in selected return word.toLowerCase() -html_slide = (num, dist) -> - if dist - cur = html_tiles[num].css 'top' - cur = Number(cur.substr(0, cur.length - 2)) - dest = cur + (dist * tile_width) - html_tiles[num].animate {top: "#{dest}px"}, slide_ms +html_slide = (num) -> + html_tiles[num].animate {top: "#{tile_top_px[num]}px"}, slide_ms save_game = -> encoded = '' @@ -314,7 +310,7 @@ blip_selection = -> if cur_top is undefined cur_top = fader if top_tile isnt cur_top - new_px = board_top_px[fader] - tile_width + new_px = -20 - tile_width new_slide = 1 top_tile = cur_top html_tiles[fader].remove() @@ -329,28 +325,32 @@ blip_selection = -> new_tile top_tile, board_left_px[top_tile], new_px slides[top_tile] = new_slide new_px -= tile_width + new_px -= 50 new_slide += 1 for i in [0 .. board.length - 1] - html_slide i, slides[i] - slides[i] = 0 + if slides[i] + html_slide i save_game() update_selection_display() activate_selection = -> word = selected_word() if word.length < 3 + # FIXME make this a hint log "Too short: \"#{word}\"" return unless is_word word + # FIXME make this automatically part of the selection display log "Not on word list: \"#{word}\"" return word_score = Math.round(Math.pow(1.7, word.length)) score += word_score $score_display.html score + # FIXME make some kind of animation showing score gain log "blipped \"#{word}\" for #{word_score} points" blip_selection() look_up_definition word - $('#definition').click() if cur_tab is 'instructions' + $('#definition').click() show_definition = (word, type, definition, language) -> @@ -521,6 +521,7 @@ extract_wiktionary_definiton = (html) -> look_up_definition = (word) -> + $definition_body.html "Looking up definition for \"#{word}\"." $.ajax({ url: "http://en.wiktionary.org/w/api.php?action=parse&format=json&page=#{word}" jsonpCallback: "lud_#{word}" # always use the same callback for the same word so it's cacheable @@ -532,9 +533,7 @@ look_up_definition = (word) -> if tdl show_definition word, tdl[0], tdl[1], tdl[2] else - log "Sorry, couldn't find a definition for \"#{word}\"" - error: -> - log "wiktionary failed to load: \"#{error_msg}\"" + $definition_body.html "Sorry, couldn't find a definition for \"#{word}\"." }) board_as_txt = -> @@ -574,20 +573,28 @@ init_tab = (t) -> $('#' + t).removeClass('tab').addClass('selected-tab').animate({height: tab_height}, 1000) cur_tab = t init_tabs = -> - for t in ['instructions', 'definition', 'logtab', 'restart'] + for t in ['instructions', 'definition', 'donate', 'restart'] init_tab t +init_keybinding = -> + $(window).keydown (e) -> + switch e.keyCode + when 32, 10, 13 + activate_selection() + when 27 + unselect_all() + $log = undefined init_log = -> $log = $('#log') log = (msg) -> - $log.children().last().remove() - $log.prepend $('
').html msg + console.log msg if console.log? init_game = -> init_log() if $(window).height() >= 440 $('#centerer').css('margin-top', '25px') + init_keybinding() init_tabs() init_board() init_html_board()