game: multiplayer: work

This commit is contained in:
starnakin 2024-05-15 13:41:24 +02:00
parent efd8d53f6c
commit 400a91df3e
8 changed files with 31 additions and 23 deletions

View File

@ -149,8 +149,6 @@ export class PongGame extends AGame
*/ */
async _receive(data) async _receive(data)
{ {
console.log(data)
if (this._inited === false && data.detail === "init_game") if (this._inited === false && data.detail === "init_game")
{ {
this._initGame(data); this._initGame(data);
@ -167,6 +165,16 @@ export class PongGame extends AGame
await this._receiveFinish(data); await this._receiveFinish(data);
else if (data.detail === "start") else if (data.detail === "start")
await this._receiveStart(); await this._receiveStart();
else if (data.detail === "eliminated")
await this._receiveEliminated(data)
}
async _receiveEliminated(data)
{
console.log('bozo')
let eliminated = this.players.find(player => player.id === data.eliminated_id)
eliminated.isEliminated = true;
console.log(eliminated)
} }
async _receiveFinish(data) async _receiveFinish(data)
@ -194,7 +202,6 @@ export class PongGame extends AGame
} }
player.score.push(data.timestamp) player.score.push(data.timestamp)
console.log(player)
await this._goalHandler(player); await this._goalHandler(player);
} }

View File

@ -12,10 +12,11 @@ export class PongMyPlayer extends PongPlayer
* @param {Segment} rail * @param {Segment} rail
* @param {[Number]} score * @param {[Number]} score
* @param {Position} position * @param {Position} position
* @param {Boolean} isEliminated
*/ */
constructor(client, game, score, rail, position = new Position(0.5)) constructor(client, game, score, rail, position = new Position(0.5), isEliminated)
{ {
super(client, game, client.me.id, client.me.username, client.me.avatar, score, rail, position, true); super(client, game, client.me.id, client.me.username, client.me.avatar, score, rail, position, true, isEliminated);
/** /**
* @type {Client} * @type {Client}
*/ */

View File

@ -65,8 +65,7 @@ export class PongPlayer extends APlayer
{ {
if (this.isConnected === false || this.isEliminated === true) if (this.isConnected === false || this.isEliminated === true)
{ {
ctx.moveTo(this.rail.start.x, this.rail.start.y); this.rail.draw(ctx)
ctx.lineTo(this.rail.stop.x, this.rail.stop.y);
return; return;
} }

View File

@ -71,6 +71,7 @@ export default class PongOnlineView extends AbstractAuthenticatedView
myPlayer.score, myPlayer.score,
myPlayer.rail, myPlayer.rail,
myPlayer.position, myPlayer.position,
myPlayer.isEliminated
); );
myPlayer = this.myPlayer; myPlayer = this.myPlayer;
@ -87,7 +88,6 @@ export default class PongOnlineView extends AbstractAuthenticatedView
keyPressHandler(event) keyPressHandler(event)
{ {
console.log("bozo")
if (!this.keysPressed.includes(event.key)) if (!this.keysPressed.includes(event.key))
this.keysPressed.push(event.key); this.keysPressed.push(event.key);
} }

View File

@ -10,18 +10,14 @@ import math
class Ball: class Ball:
def __init__(self) -> None: def __init__(self) -> None:
self.size: float self.size: float = config.BALL_SIZE
self.position: Position self.position: Position = Position(Point(config.BALL_SPAWN_POS_X + self.size / 2, config.BALL_SPAWN_POS_Y + self.size / 2), time.time())
self.angle: float self.angle: float = 0
self.speed: float self.speed: float = 0
self.reset()
self.speed = 0
def reset(self) -> None: def reset(self, target: Point) -> None:
self.size = config.BALL_SIZE self.position: Position = Position(Point(config.BALL_SPAWN_POS_X + self.size / 2, config.BALL_SPAWN_POS_Y + self.size / 2), time.time())
self.position = Position(Point(config.BALL_SPAWN_POS_X + self.size / 2, config.BALL_SPAWN_POS_Y + self.size / 2), time.time()) self.angle = math.atan2(target.y - self.position.location.y, target.x - self.position.location.x)
self.angle = math.pi * 0
self.speed = config.BALL_SPEED_START self.speed = config.BALL_SPEED_START
def to_dict(self) -> dict: def to_dict(self) -> dict:

View File

@ -14,6 +14,7 @@ from django.contrib.auth.models import User
from ...routine import routine from ...routine import routine
import random
import threading import threading
class PongGame(AGame): class PongGame(AGame):
@ -54,6 +55,7 @@ class PongGame(AGame):
else: else:
self.walls.append(Segment(corners[i].copy(), corners[(i + 1) % 4].copy())) self.walls.append(Segment(corners[i].copy(), corners[(i + 1) % 4].copy()))
self.ball: Ball = Ball() self.ball: Ball = Ball()
def goal(self, goal_defenser: PongPlayer) -> None: def goal(self, goal_defenser: PongPlayer) -> None:
@ -73,7 +75,7 @@ class PongGame(AGame):
self.finish(player_list[0]) self.finish(player_list[0])
return return
self.ball.reset() self.ball.reset(goal_defenser.rail.center())
def get_valid_players(self) -> list[PongPlayer]: def get_valid_players(self) -> list[PongPlayer]:
return [player for player in self.players if player.is_connected and not player.is_eliminated] return [player for player in self.players if player.is_connected and not player.is_eliminated]
@ -92,7 +94,9 @@ class PongGame(AGame):
self.broadcast("start") self.broadcast("start")
self.ball.reset() players: list[PongPlayer] = self.get_valid_players()
self.ball.reset(players[random.randint(0, len(players) -1)].rail.center())
self.broadcast("update_ball", self.ball.to_dict()) self.broadcast("update_ball", self.ball.to_dict())

View File

@ -28,6 +28,9 @@ class Segment:
def copy(self): def copy(self):
return Segment(self.start.copy(), self.stop.copy()) return Segment(self.start.copy(), self.stop.copy())
def center(self):
return Point((self.start.x + self.stop.x) / 2, (self.start.y + self.stop.y) / 2)
def to_dict(self) -> dict: def to_dict(self) -> dict:
data: dict[str: dict] = { data: dict[str: dict] = {

View File

@ -16,8 +16,6 @@ import asyncio
import math import math
import time
from asgiref.sync import SyncToAsync from asgiref.sync import SyncToAsync