X-Git-Url: https://jasonwoof.com/gitweb/?p=peach-cgt.git;a=blobdiff_plain;f=common.coffee;h=ce09f13aa469e2dbea7aab657c8a5a8fba97aae3;hp=2a146af56bde7d54350506024eae010f6140678f;hb=4ae9f3f4c527c3565fa7e82c114f025053927df3;hpb=bff997aff6d7220a8183421bdff64c9a1ef352c3 diff --git a/common.coffee b/common.coffee index 2a146af..ce09f13 100644 --- a/common.coffee +++ b/common.coffee @@ -1,50 +1,52 @@ # this file is used by the client and server. +# work around lack of module system in the browser: +if exports? + my_exports = exports +else + window.game_model = {} + my_exports = window.game_model + class GameState constructor: (agent) -> @agent = agent - state = { - hooks: {} - card_types: [] - auto_shuffle: false - cards: [] - piles: {} - } + @hooks = {} + @cards = [] + @piles = {} on: (event, callback) -> - unless hooks[event]? - hooks[event] = [] - hooks[event].push callback + unless @hooks[event]? + @hooks[event] = [] + @hooks[event].push callback trigger: (event, args...) -> - return unless hooks[event]? - for callback in hooks[event] + return unless @hooks[event]? + for callback in @hooks[event] callback.apply this, args move: (agent, card, x, y) -> # FIXME add pile argument # FIXME what to do on error? - return unless cards[card]? #?.pile? + return unless @cards[card]? #?.pile? #cur_pile = cards[card].pile #if pile isnt cur_pile - cards[card].x = x - cards[card].y = y + @cards[card].x = x + @cards[card].y = y @trigger 'move', agent, card, x, y # FIXME add pile argument mark: (agent, card, state) -> # FIXME what to do on error? - return unless cards[card]?.marked? #?.pile? - card.marked = state - @trigger 'mark', agent, state + return unless @cards[card]? + @cards[card].marked = state + @trigger 'mark', agent, card, state flip: (agent, card, state) -> # FIXME what to do on error? - return unless cards[card]?.flipped? #?.pile? - card.flipped = state - @trigger 'flip', agent, state + return unless @cards[card]? + @cards[card].flipped = state + @trigger 'flip', agent, card, state # FIXME implement set_pile(pile, card_order_array) set_cards: (cards) -> - trigger 'delete_all_cards' @cards = [] @piles = {} for card in cards @@ -54,5 +56,20 @@ class GameState unless @piles[card.pile]? @piles[card.pile] = [] @piles[card.pile].push card - trigger 'all_new_cards' + @trigger 'set_cards', @cards + + process_messages: (messages) -> + unless typeof messages is 'array' or typeof messages is 'object' + # FIXME what to do on error? + return typeof messages + + for message in messages + unless message instanceof Array and message[0]? and message[0] in ['move', 'mark', 'flip', 'set_cards'] + # FIXME what to do on error? + return 2 + method = message.shift() + @[method].apply this, message + return + +my_exports.new = (agent) -> new GameState agent