JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
add untested common.coffee
[peach-cgt.git] / common.coffee
1 # this file is used by the client and server.
2
3 class GameState
4         constructor: (agent) ->
5                 @agent = agent
6                 state = {
7                         hooks: {}
8                         card_types: []
9                         auto_shuffle: false
10                         cards: []
11                         piles: {}
12                 }
13         on: (event, callback) ->
14                 unless hooks[event]?
15                         hooks[event] = []
16                 hooks[event].push callback
17         trigger: (event, args...) ->
18                 return unless hooks[event]?
19                 for callback in hooks[event]
20                         callback.apply this, args
21         move: (agent, card, x, y) -> # FIXME add pile argument
22                 # FIXME what to do on error?
23                 return unless cards[card]? #?.pile?
24                 #cur_pile = cards[card].pile
25                 #if pile isnt cur_pile
26
27                 cards[card].x = x
28                 cards[card].y = y
29
30                 @trigger 'move', agent, card, x, y # FIXME add pile argument
31
32         mark: (agent, card, state) ->
33                 # FIXME what to do on error?
34                 return unless cards[card]?.marked? #?.pile?
35                 card.marked = state
36                 @trigger 'mark', agent, state
37
38         flip: (agent, card, state) ->
39                 # FIXME what to do on error?
40                 return unless cards[card]?.flipped? #?.pile?
41                 card.flipped = state
42                 @trigger 'flip', agent, state
43
44         # FIXME implement set_pile(pile, card_order_array)
45
46         set_cards: (cards) ->
47                 trigger 'delete_all_cards'
48                 @cards = []
49                 @piles = {}
50                 for card in cards
51                         card.number = @cards.length
52                         @cards.push card
53                         if card.pile?
54                                 unless @piles[card.pile]?
55                                         @piles[card.pile] = []
56                                 @piles[card.pile].push card
57                 trigger 'all_new_cards'
58