Skip to content

Instantly share code, notes, and snippets.

@bdefore
Created October 22, 2012 01:30
Show Gist options
  • Save bdefore/3929187 to your computer and use it in GitHub Desktop.
Save bdefore/3929187 to your computer and use it in GitHub Desktop.
_ = require 'underscore'
domready = require 'domready'
Arbitro = require './arbitro'
Shrinkage = require './shrinkage'
ShrinkageRenderer = require './view/shrinkage_renderer'
RuleSet = require './model/rule_set'
Renderer = require './view/renderer'
Transport = require './transports/transport'
SocketIo = require './transports/socket_io'
ioClient = require 'socket.io-client'
domready () ->
_challenges = {}
_players = {}
container = $('#container')
challengeList = $('#challenge-select')
playerList = $('#player-list')
@renderer = new ShrinkageRenderer(container)
$(window).resize () =>
@renderer.resize $(window).width(), $(window).height()
@renderer.resize $(window).width(), $(window).height()
@games = { shrinkage: { ruleSet: new Shrinkage(), renderer: @renderer } }
@socketUrl = 'http://localhost'
@socketOptions = {}#{ transports: 'websocket', 'force new connection': true }
@client = ioClient.connect @socketUrl, @socketOptions
@transport = new SocketIo @client
@a = new Arbitro @transport, @games
$('#playerName').text "Your name: " + @transport.id
@a.on "challenge", (challenge, challenges, sender) =>
console.log 'total challenges: ' + challenges.length
challengeList.empty()
for challenge in challenges
_challenges[challenge.host] = challenge
# don't show your own challenges
if challenge.host != @transport.id
console.log 'challenge'
item = $('<a href="#"/>').click(accept(challenge))
.data('challenge', challenge.host)
.text(challenge.host)
challengeList.append item
@a.on "challengeCancelled", (challenge, challenges, host) =>
console.log 'total challenges after cancel: ' + challenges.length
challengeList.empty()
for challenge in challenges
_challenges[challenge.host] = challenge
# don't show your own challenges
if challenge.host != @transport.id
console.log 'challenge'
item = $('<a href="#"/>').click(accept(challenge))
.data('challenge', challenge.host)
.text(challenge.host)
console.log 'assigning to challenges local store'
challengeList.append item
@a.on "chatMessage", (message, sender) =>
console.log "chat message: " + message + " from " + sender
@a.on "matchReady", (match, challenge) =>
console.log 'match ready'
if challenge.host == @transport.id
@a.beginMatch()
@a.on "matchStart", (match, challenge) =>
console.log 'match start'
# console.log match
# console.log challenge
@a.on "matchEnd", (match) =>
console.log 'match end'
@a.initializeMatch()
@a.on "score", (score) =>
$('#playerScore').text "Balls remaining: " + score[@transport.id]
@a.on "roomChange", (room) =>
playerList.empty()
$('#currentRoom').text "In room: " + room
@a.on "playerStatus", (player, players) =>
console.log 'New player status: ' + player.id + " in room:" + player.room
playerList.empty()
console.log 'Update display of players in room: ' + @transport.room
playersInLocalRoom = _.filter players, (pl) => pl.room == @transport.room
console.log 'In local: ' + playersInLocalRoom.length
for player in playersInLocalRoom
console.log 'looping in players, this one: ' + player.id
item = $('<a href="#"/>').click(playerClick(player))
.data('player', player)
.text(player.id)
_players[player.id] = player
playerList.append item
$('#create').click (event) =>
# @a.createChallenge "example"
@a.createChallenge "shrinkage", { autoStart: true }
$('#lobby').click (event) =>
@a.lobby()
$('#container').mousemove (event) =>
do event.preventDefault
if event.touches and !!event.touches.length
touch = event.touches[0]
@a.mousemove touch.pageX, touch.pageY
else
@a.mousemove event.clientX, event.clientY
playerClick = (player) =>
# console.log 'clicked a player'
accept = (challenge) =>
return () =>
@a.acceptChallenge challenge
initializeMatch = (event) =>
@a.initializeMatch()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment