X-Git-Url: https://jasonwoof.com/gitweb/?p=peach-cgt.git;a=blobdiff_plain;f=client.coffee;h=0ec59d6f0bb2e4b98e6feaabbef33d08ff5708ae;hp=6da0968d083b43cddcf74502702360ac3f9b7e57;hb=HEAD;hpb=2931445ceb51e471291c9a8fd90ffa0d67b3d801 diff --git a/client.coffee b/client.coffee index 6da0968..0ec59d6 100644 --- a/client.coffee +++ b/client.coffee @@ -1,3 +1,9 @@ +### +Peach CGT -- Card Game Table simulator +Copyright (C) 2011 Jason Woofenden +Lincensed under AGPLv3. Source here: https://gitorious.org/peach-cgt +### + # globals $table = null table_width = 0 @@ -111,7 +117,7 @@ instantiate_card = (card) -> if card.flipped view.addClass 'flipped' $table.append view - view.draggable containment: '#table', grid: [20, 20] + view.draggable grid: [20, 20] view.bind 'dragstart', (event, ui) -> view.css 'z-index': card.z = next_card_z() if card.pile? @@ -144,11 +150,12 @@ send_updates = -> messages = outgoing_messages outgoing_messages = [] - $.ajax "#{server_url}/set", { + show_message "#{server_url}set" + $.ajax "#{server_url}set", { cache: false data: { agent: state.agent - game: 'test' # FIXME, and in the /get call too + game: state.slug messages: JSON.stringify(messages) } type: 'POST' @@ -166,7 +173,7 @@ send_updates = -> error_lag = 3 poll_for_updates = -> - $.ajax "#{server_url}/get?agent=#{state.agent}&game=test", { + $.ajax "#{server_url}get?agent=#{state.agent}&game=#{state.slug}", { cache: false type: 'GET' dataType: 'json' @@ -329,16 +336,43 @@ init_card_designer = -> container.append submit +new_game_slug = -> + charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + ret = '' + while ret.length < 10 + ret += charset[Math.floor(Math.random() * charset.length)] + return ret + init = -> + is_new_game = false if window.location.hash? and window.location.hash.length > 0 - me = window.location.hash.substr 1 - winloc = "#{window.location}" + winloc = window.location.toString() server_url = winloc.substr 0, winloc.length - window.location.hash.length + game_agent = window.location.hash.substr 1 + s = game_agent.split /_/g + if s.length isnt 2 + window.location = server_url + # in case that doesn't cause a redirect: + timeout 20, init + return + game = s[0] + me = s[1] else me = 'p1' - server_url = window.location + game = new_game_slug() + server_url = window.location.toString() + window.location.hash = "#{game}_#{me}" # TODO should I put a # at the beginning? + is_new_game = true + + if me is 'p1' + other_player = 'p2' + else + me = 'p2' + other_player = 'p1' + + $('#main_header').append $ " Here's the address for the other player in this game with you: #{server_url}##{game}_#{other_player}" - state = window.game_model.new me + state = window.game_model.new game, me state.on 'move', (agent, card, x, y, z, pile) -> if z > top_card_z top_card_z = z @@ -370,10 +404,13 @@ init = -> state.on 'new_cards', (agent, cards) -> initialize_cards() - # timeout so browser will stop showing that we're loading - timeout 1, init_card_designer - timeout 1, poll_for_updates - timeout 2, -> + # timeouts are so browser will stop showing that we're loading + if is_new_game + timeout 1, -> + tell_server ['new_game', state.slug, state.agent] + timeout 2, init_card_designer + timeout 3, poll_for_updates + timeout 4, -> # ask for initial state tell_server ['send_state', state.agent]