]> git.eli173.com Git - pong_br/commitdiff
'finished' collision stuff, about to change gamestate to reflect it
authorElijah Cohen <eli@eli173.com>
Thu, 2 May 2019 21:08:34 +0000 (16:08 -0500)
committerElijah Cohen <eli@eli173.com>
Thu, 2 May 2019 21:08:34 +0000 (16:08 -0500)
NOTES.org
server/collisions.js
server/constants.js
server/gamestate.js
web/constants.js
web/main.js

index d7f013c4db915c090123598ef351b9f66ed5294e..f0f7f8bbf7aba7b680a9f1a2923240286bbacc11 100644 (file)
--- a/NOTES.org
+++ b/NOTES.org
@@ -1,4 +1,8 @@
 
+WAIT SHIT I THINK THE MAX SPEEDS ARE DETERMINED BY THE FRAMERATE. WHOOPS. TOFIX
+
+
+
 The general outline of the game is that we have some large number of players $n$, arranged in a $2n$-sided regular polygon, where the player has their pong-space, and is surrounded by two walls. The walls primarily serve the purpose of having the game end nicely when there are two players left: it becomes a regular game of pong.
 
 I'm going to limit the number of players to 10 for the time being, I think anything with more than 20 sides might be a bit too much. 20 might be pushing it actually.
index b1e9a744a0c9977c61872267ffde82c3026c4414..19347338ec5b1b19720d562e4b8486b379dd3bfa 100644 (file)
@@ -1,4 +1,5 @@
 
+const c = require('./constants.js');
 const Coord = require('./coord.js');
 
 const Endpoints = require('./endpoints.js'); // i guess slightly useful here
@@ -59,20 +60,59 @@ var segments_intersect = function(e1, e2) {
     return true;
 }
 
+
 var handleWalls = function(ball, walls) {
     // returns true if there's a collision
+    // modifies ball's velocity if it encounters an actual collision
+    // wall is an endpoints
     for(var wall of walls) {
-       var nearest = nearest_point_on_line(ball.coord, wall);
-       if(ball.coord.dist2(nearest) < (ball.radius)**2) { // there's a collision
-           // so the midpoint of the wall gives a nice normal vector
-           var norm = ball.coord;
+       var next_spot = new Coord(ball.coord.x + ball.dx, ball.coord.y + ball.dy);
+       if(segments_intersect(walls, new Endpoints(ball.coord, next_spot))) {
+           //there's a collision
+           var wall_normal = new Coord((wall.f.x+wall.s.x)/2, (wall.f.y+wall.s.y)/2); // given by the midpoint
+           var normal_angle = Math.atan2(wall_normal.x, wall_normal.y);
+           var vel_vec = new Coord(ball.dx, ball.dy);
+           vel_vec.rotate(-normal_angle);
+           vel_vec.x = -vel_vec.x; // i'm fairly certain it's x...
+           vel_vec.rotate(normal_angle);
+           ball.speed_up();
+           return true;
        }
     }
-
+    return false;
 }
 
-var handlePaddles = function() {
 
+var handlePaddles = function(ball, lzs, paddles) {
+    // same, but with paddles and speed movement bonus
+    // i iterate over lzs, get matching paddle
+    for(var lz of lzs) {
+       var paddle = this.paddles.find(p => p.id==lz.id);
+       if(paddle === undefined) { // this is badd...
+           console.log("paddle not found...");
+           return false;
+       }
+       var wall = paddle.getPaddlePoints(lz);
+       //
+       var next_spot = new Coord(ball.coord.x + ball.dx, ball.coord.y + ball.dy);
+       if(segments_intersect(walls, new Endpoints(ball.coord, next_spot))) {
+           //there's a collision
+           var wall_normal = new Coord((wall.f.x+wall.s.x)/2, (wall.f.y+wall.s.y)/2); // given by the midpoint
+           var normal_angle = Math.atan2(wall_normal.x, wall_normal.y);
+           var vel_vec = new Coord(ball.dx, ball.dy);
+           vel_vec.rotate(-normal_angle);
+           vel_vec.x = -vel_vec.x; // i'm fairly certain it's x...
+           if(paddle.direction == 'u')
+               vel_vec.y += c.PADDLE_MVT_BONUS;
+           else if(paddle.direction == 'd')
+               vel_vec.y -= c.PADDLE_MVT_BONUS;
+           vel_vec.rotate(normal_angle);
+           ball.speed_up();
+           return true;
+       }
+    }
+    return false;
 }
 
+
 module.exports = {handleWalls: handleWalls, handlePaddles, handlePaddles};
index 9ff4e05de7ff06ffec26aac5ce18ba06aef89838..a45093aeb67665e1bae87ebdb9a9625939fc9673 100644 (file)
@@ -23,7 +23,7 @@ var c = {
     BOARD_RADIUS: 10, // completely arbitrary actually...
     // paddle
     DPADDLE: 0.1,
-    WIDTH_RATIO: 0.1, // paddle is 1/10th of gap rn
+    WIDTH_RATIO: 0.2, // paddle is 1/10th of gap rn
 }
 
 module.exports = c
index 4ac418d704fc2d6ba8d834addc0c0091d364e11c..b64e0aa1c865ba56a080d9a983060f422c01e585 100644 (file)
@@ -41,6 +41,7 @@ GameState.prototype.update = function(inputs) {
        this.paddles[i].move(inputs[this.paddles[i].id]); //hacky and bad, requires the inputs be
     }
     //move the balls
+    // can i increase efficiency or sensibility by doing this later? maybe. should i? unlikely rn
     for(var ball of this.balls) {
        ball.coord.x += ball.dx;
        ball.coord.y += ball.dy;
index add9fdd715292287a4cc8542ed7fb4b850a546e7..1a53e89a66c1823462ca4fc9f7137e74a24231a8 100644 (file)
@@ -23,7 +23,7 @@ var c = {
     BOARD_RADIUS: 10, // completely arbitrary actually...
     // paddle
     DPADDLE: 0.1,
-    WIDTH_RATIO: 0.1, // paddle is 1/10th of gap rn
+    WIDTH_RATIO: 0.2, // paddle is 1/10th of gap rn
 }
 
 
index f11df3fc3cabf397de96c32d6ad0addaa862f798..ecafbd8101d74d972e1a0885dd77ef383586c7d4 100644 (file)
@@ -18,6 +18,11 @@ var main = function() { // starts everything, gets us going, setup ish
     // change the 1's to zoom in i think.. todo
     ctx.transform(10, 0, 0, 10, ctx.canvas.width/2, ctx.canvas.height/2); // change to setTransform?
 
+    // this is just to have everything go easily for testing
+    var othersockets = [];
+    for(var i=0; i<c.NUM_PLAYERS -1; i++) {
+       othersockets.push(new WebSocket(prefixurl));
+    }
     
     theSocket = new WebSocket(prefixurl);
     theSocket.onmessage = function(e) {