2 Peach CGT -- Card Game Table simulator
3 Copyright (C) 2011 Jason Woofenden
4 Lincensed under AGPLv3. Source here: https://gitorious.org/peach-cgt
7 # this file is used by the client and server.
9 # work around lack of module system in the browser:
13 window.game_model = {}
14 my_exports = window.game_model
17 constructor: (slug, agent) ->
22 on: (event, callback) ->
25 @hooks[event].push callback
26 trigger: (event, args...) ->
27 return unless @hooks[event]?
28 for callback in @hooks[event]
29 callback.apply this, args
30 move: (agent, card, x, y, z, pile) ->
31 # FIXME what to do on error?
32 return unless @cards[card]?
38 @cards[card].pile = pile
39 else if @cards[card].pile?
40 delete @cards[card].pile
42 @trigger 'move', agent, card, x, y, z, pile
44 mark: (agent, card, state) ->
45 # FIXME what to do on error?
46 return unless @cards[card]?
47 @cards[card].marked = state
48 @trigger 'mark', agent, card, state
50 flip: (agent, card, state) ->
51 # FIXME what to do on error?
52 return unless @cards[card]?
53 @cards[card].flipped = state
54 @trigger 'flip', agent, card, state
56 # FIXME implement set_pile(pile, card_order_array)
58 set_cards: (agent, cards) ->
61 card.number = @cards.length unless card.number
62 card.z = @cards.length unless card.z
64 @trigger 'set_cards', agent, @cards
66 new_cards: (agent, cards) ->
68 card.number = @cards.length unless card.number
69 card.z = @cards.length unless card.z
71 @trigger 'new_cards', agent, cards
73 send_state: (agent) ->
74 @trigger 'send_state', agent
76 process_messages: (messages) ->
77 unless typeof messages is 'array' or typeof messages is 'object'
78 # FIXME what to do on error?
79 return typeof messages
81 for message in messages
82 unless message instanceof Array and message[0]? and message[0] in ['move', 'mark', 'flip', 'set_cards', 'send_state', 'new_cards']
84 console.log "Got unrecognized message: #{JSON.stringify message}"
85 # FIXME what to do on error?
87 method = message.shift()
88 @[method].apply this, message
92 my_exports.new = (slug, agent) -> new GameState slug, agent