+###
+Peach CGT -- Card Game Table simulator
+Copyright (C) 2011 Jason Woofenden
+Lincensed under AGPLv3. Source here: https://gitorious.org/peach-cgt
+###
+
# this file is used by the client and server.
# work around lack of module system in the browser:
my_exports = window.game_model
class GameState
- constructor: (agent) ->
+ constructor: (slug, agent) ->
+ @slug = slug
@agent = agent
@hooks = {}
@cards = []
- @piles = {}
on: (event, callback) ->
unless @hooks[event]?
@hooks[event] = []
return unless @hooks[event]?
for callback in @hooks[event]
callback.apply this, args
- move: (agent, card, x, y) -> # FIXME add pile argument
+ move: (agent, card, x, y, z, pile) ->
# FIXME what to do on error?
- return unless @cards[card]? #?.pile?
- #cur_pile = cards[card].pile
- #if pile isnt cur_pile
+ return unless @cards[card]?
@cards[card].x = x
@cards[card].y = y
+ @cards[card].z = z
+ if pile?
+ @cards[card].pile = pile
+ else if @cards[card].pile?
+ delete @cards[card].pile
- @trigger 'move', agent, card, x, y # FIXME add pile argument
+ @trigger 'move', agent, card, x, y, z, pile
mark: (agent, card, state) ->
# FIXME what to do on error?
set_cards: (agent, cards) ->
@cards = []
- @piles = {}
for card in cards
- card.number = @cards.length
+ card.number = @cards.length unless card.number
+ card.z = @cards.length unless card.z
@cards.push card
- if card.pile?
- unless @piles[card.pile]?
- @piles[card.pile] = []
- @piles[card.pile].push card
@trigger 'set_cards', agent, @cards
+ new_cards: (agent, cards) ->
+ for card in cards
+ card.number = @cards.length unless card.number
+ card.z = @cards.length unless card.z
+ @cards.push card
+ @trigger 'new_cards', agent, cards
+
send_state: (agent) ->
@trigger 'send_state', agent
return typeof messages
for message in messages
- unless message instanceof Array and message[0]? and message[0] in ['move', 'mark', 'flip', 'set_cards', 'send_state']
+ unless message instanceof Array and message[0]? and message[0] in ['move', 'mark', 'flip', 'set_cards', 'send_state', 'new_cards']
+ if console?.log?
+ console.log "Got unrecognized message: #{JSON.stringify message}"
# FIXME what to do on error?
return 2
method = message.shift()
return
-my_exports.new = (agent) -> new GameState agent
+my_exports.new = (slug, agent) -> new GameState slug, agent