From 365984428de7e53d7dac4713cd9d39a8555a74e4 Mon Sep 17 00:00:00 2001 From: Adam Howard Date: Wed, 9 Feb 2011 21:03:39 +0000 Subject: [PATCH] Collaborative gaming now works!!! --- js/comms.js | 11 ++++++++--- js/game.js | 12 ++++++------ rb/cue.rb | 15 ++++++++++++--- rb/game.rb | 3 ++- rb/server.rb | 43 ++++++++++++++++++++++++++++--------------- 5 files changed, 56 insertions(+), 28 deletions(-) diff --git a/js/comms.js b/js/comms.js index 6829327..0893a1d 100644 --- a/js/comms.js +++ b/js/comms.js @@ -1,4 +1,5 @@ var socket; +var gotBalls = false; function setup(){ connect(); @@ -18,10 +19,14 @@ function connect(){ socket = new WebSocket('ws://127.0.0.1:8080'); socket.onmessage = function(mess) { var data = $.parseJSON(mess.data); - console.log(data); - balls = data['balls']; + if(data['balls']){ + balls = data['balls']; + cue.x = data['cue'].x; + cue.y = data['cue'].y; + } + cue.vx = data['cue'].vx; + cue.vy = data['cue'].vy; }; - }; window.onload += setup(); \ No newline at end of file diff --git a/js/game.js b/js/game.js index 68e0c56..fd63089 100644 --- a/js/game.js +++ b/js/game.js @@ -1,4 +1,4 @@ -var cue = new Cue(100,100); +var cue = new Cue(-100,-100); var context; var mx; @@ -101,16 +101,16 @@ function dist(x, y, X, Y){ } $('canvas').mousedown(function(e){ - mx = e.pageX - offset.left - my = e.pageY - offset.top - if (dist(mx,my, cue.x, cue.y) < 20){ + mx = e.pageX - offset.left - 10 + my = e.pageY - offset.top - 10 + if (dist(mx,my, cue.x, cue.y) < 40){ shooting = true; } }); $('canvas').mouseup(function(e){ if (shooting){ - mx = e.pageX - offset.left - my = e.pageY - offset.top + mx = e.pageX - offset.left - 10 + my = e.pageY - offset.top - 10 calculateCuePull(); var distX = cue.x-mx; diff --git a/rb/cue.rb b/rb/cue.rb index 2f956e4..468530a 100644 --- a/rb/cue.rb +++ b/rb/cue.rb @@ -1,7 +1,16 @@ class Cue - attr_accessor :x, :y + attr_accessor :x, :y, :vx, :vy def initialize - self.x = 200 - self.y = 200 + self.x = 300 + self.y = 300 + self.vx = 0 + self.vy = 0 + end + def to_json(*a){ + :x=>x, + :y=>y, + :vx=>vx, + :vy=>vy + }.to_json(*a) end end \ No newline at end of file diff --git a/rb/game.rb b/rb/game.rb index 6553ebf..b08401d 100644 --- a/rb/game.rb +++ b/rb/game.rb @@ -55,6 +55,7 @@ def generate_ball end def other_players(player) - players.reject{|p| p==player} + r = players.reject{|p| p==player} + r end end \ No newline at end of file diff --git a/rb/server.rb b/rb/server.rb index a77df22..0f508db 100644 --- a/rb/server.rb +++ b/rb/server.rb @@ -29,9 +29,16 @@ def dist(x1, y1, x2, y2) # player = Player.new player = Player.new(socket) @players << player - game = Game.new(player) - @games << game - socket.send({:balls=>game.balls}.to_json) + if @games.empty? + game = Game.new(player) + @games << game + else + game = @games.first + game.players << player + end + socket.send({:balls=>game.balls, :cue=>game.cue}.to_json) + + puts @games.first.players.count rescue Exception => e puts e.inspect puts e.backtrace @@ -39,24 +46,30 @@ def dist(x1, y1, x2, y2) end socket.onmessage do |mess| puts "move received" + puts "socket in #{socket.object_id}" array = mess.split '/' - # puts array - player = @players.find{|p| p.socket = socket } - game = @games.find{|g| g.players.include? player } - # game.move(socket, array[0], array[1]) - game.other_players(player).each do |s| - s.send mess + + player = @players.find{|p| p.socket == socket } + # game = @games.find{|g| g.players.include? player } + game = @games.first + + game.cue.vx = array[0] + game.cue.vy = array[1] + # # game.move(player, array[0], array[1]) + game.other_players(player).each do |p| + p.socket.send({:cue=>game.cue}.to_json) + puts "socket out #{p.socket.object_id}" end end socket.onclose do - # puts @games.inspect - # player = @players.find{|p| p.socket = socket } - # game = @games.find{|g| g.players.include player} - # game.players.delete player - # @players.delete player + player = @players.find{|p| p.socket = socket } + game = @games.find{|g| g.players.include? player} + game.players.delete player + @players.delete player puts 'user left' + puts @games.first.players.count end end - `open /Users/skattyadz/code/couronne/game.html` + # `open /Users/skattyadz/code/couronne/game.html` end \ No newline at end of file