X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=client.coffee;h=21587dd93d6088bc4f87906128c39f64d477279b;hb=711b95481e8373c56ce14f9d8b200f4204d13a36;hp=7f2267491f319c26559e7bd7aa8a8af24d4a9e78;hpb=3f89f7dbaf990e3f219c1c782fe55455eaa68cbc;p=peach-cgt.git diff --git a/client.coffee b/client.coffee index 7f22674..21587dd 100644 --- a/client.coffee +++ b/client.coffee @@ -1,10 +1,12 @@ # globals $table = null table_height = 0 +card_height = 0 state = null server_url = null +top_card_z = 0 # css z-index of front-most card -message = (txt) -> +show_message = (txt) -> txt # FIXME implement chat box or something # timeout function with args in convenient order @@ -26,16 +28,32 @@ new_button = (text) -> $ $ "
#{text}
" # transform coordinates from client-side coords to server-side coords (or back) # this makes it so p2 view everything upside down (mirrored), but still sends coords rightside up -transform_coords = (coords) -> - ret = {left: coords.left, top: coords.top} - if state.agent is 'p2' - ret.top = table_height - ret.top - return ret +transform_x = (x) -> x +transform_y = (y) -> + return y unless state.agent is 'p2' + return table_height - card_height - y + +next_card_z = -> return top_card_z += 1 + +bring_card_to_front = (card) -> + card.view.css "z-index": next_card_z() instantiate_card = (card) -> text = card.text - view_coords = transform_coords {left: card.x, top: card.y} - view = $ $ "
#{text}
" + if card.owner is state.agent + card_class = 'my_card' + else + card_class = 'your_card' + + # initial card state from server has z so that stacks come out with the right layers + if card.z? + if card.z > top_card_z + top_card_z = card.z + else + unless card.pile + card.z = next_card_z() + + view = $ $ "
#{text}
" button_box = $ $ '
' flip_button = new_button "flip over" mark_button = new_button "mark" @@ -51,10 +69,12 @@ instantiate_card = (card) -> if card.flipped view.addClass 'flipped' $table.append view - view.draggable stack: '.card' + view.draggable containment: '#table', grid: [20, 20] + view.bind 'dragstart', (event, ui) -> + view.css 'z-index': card.z = next_card_z() view.bind 'dragstop', (event, ui) -> - p = transform_coords view.position() - state.move state.agent, card.number, p.left, p.top + p = view.position() + state.move state.agent, card.number, transform_x(p.left), transform_y(p.top), card.z card.view = view error_lag = 3 @@ -82,13 +102,13 @@ send_updates = -> type: 'POST' dataType: 'json' error: (xhr, status, error) -> - message "Network error while sending, you might want to refresh. Trying again in #{error_lag} seconds. (Status: #{status}, Error: #{error})" + show_message "Network error while sending, you might want to refresh. Trying again in #{error_lag} seconds. (Status: #{status}, Error: #{error})" for message in messages outgoing_messages.unshift message timeout error_lag * 1000, send_updates error_lag *= 2 success: (data, status, xhr) -> - message "update sent" + show_message "update sent" error_lag = 3 } @@ -118,13 +138,13 @@ init = -> server_url = window.location state = window.game_model.new me - state.on 'move', (agent, card, x, y) -> + state.on 'move', (agent, card, x, y, z) -> # FIXME add/handle pile argument if agent is me - tell_server ['move', agent, card, x, y] + tell_server ['move', agent, card, x, y, z] else - coords = transform_coords {left: x, top: y} - state.cards[card].view.animate { left: "#{coords.left}px", top: "#{coords.top}px"}, 800 + bring_card_to_front state.cards[card] + state.cards[card].view.animate { left: "#{transform_x x}px", top: "#{transform_y y}px"}, 800 state.on 'mark', (agent, card, state) -> @cards[card].view.toggleClass 'marked', state if agent is me @@ -149,5 +169,7 @@ init = -> $ -> $table = $ '#table' - table_height = $table.height() - 148 # FIXME auto-detect card height + table_height = $table.height() + card_height = $('#loading-card').outerHeight() + init()