+###
+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
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?
messages = outgoing_messages
outgoing_messages = []
+ 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'
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'
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 $ " <span id=\"other_player_url\">Here's the address for the other player in this game with you: <code>#{server_url}##{game}_#{other_player}</code></span>"
- 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
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]