game: add: defeated by forfeit
This commit is contained in:
parent
d814363b36
commit
d0e87066b0
@ -10,9 +10,10 @@ class Game
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param {Client} client
|
* @param {Client} client
|
||||||
* @param {CallableFunction} update_goal
|
* @param {CallableFunction} goal_handler
|
||||||
|
* @param {CallableFunction} finish_handler
|
||||||
*/
|
*/
|
||||||
constructor(client, id, update_goal)
|
constructor(client, id, goal_handler, finish_handler)
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @type {Client}
|
* @type {Client}
|
||||||
@ -27,7 +28,12 @@ class Game
|
|||||||
/**
|
/**
|
||||||
* @type {CallableFunction}
|
* @type {CallableFunction}
|
||||||
*/
|
*/
|
||||||
this.update_goal = update_goal;
|
this.goal_handler = goal_handler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {CallableFunction}
|
||||||
|
*/
|
||||||
|
this.finish_handler = finish_handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -161,6 +167,16 @@ class Game
|
|||||||
this.ball.from_json(data);
|
this.ball.from_json(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_receive_finish(data)
|
||||||
|
{
|
||||||
|
this.finish_handler(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
_receive_goal(data)
|
||||||
|
{
|
||||||
|
this.goal_handler(data)
|
||||||
|
}
|
||||||
|
|
||||||
_receive(data)
|
_receive(data)
|
||||||
{
|
{
|
||||||
if (data.detail === "update_paddle")
|
if (data.detail === "update_paddle")
|
||||||
@ -170,7 +186,9 @@ class Game
|
|||||||
else if (data.detail === "init_game")
|
else if (data.detail === "init_game")
|
||||||
this._init_game(data);
|
this._init_game(data);
|
||||||
else if (data.detail === "goal")
|
else if (data.detail === "goal")
|
||||||
this.update_goal(data);
|
this._receive_goal(data);
|
||||||
|
else if (data.detail === "finish")
|
||||||
|
this._receive_finish(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
_init_game(data)
|
_init_game(data)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { client } from "../index.js";
|
import { client, reloadView } from "../index.js";
|
||||||
import { Game } from "../api/game/Game.js";
|
import { Game } from "../api/game/Game.js";
|
||||||
import AbstractView from "./abstracts/AbstractView.js";
|
import AbstractView from "./abstracts/AbstractView.js";
|
||||||
import { MyPlayer } from "../api/game/MyPlayer.js";
|
import { MyPlayer } from "../api/game/MyPlayer.js";
|
||||||
@ -9,11 +9,17 @@ export default class extends AbstractView
|
|||||||
constructor(params)
|
constructor(params)
|
||||||
{
|
{
|
||||||
super(params, "Game");
|
super(params, "Game");
|
||||||
this.game = new Game(client, params.id, this.update_goal);
|
this.game = new Game(client, params.id, this.on_goal, this.on_finish);
|
||||||
this.keys_pressed = [];
|
this.keys_pressed = [];
|
||||||
this.my_player = undefined;
|
this.my_player = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
on_finish(data)
|
||||||
|
{
|
||||||
|
console.log(data)
|
||||||
|
reloadView()
|
||||||
|
}
|
||||||
|
|
||||||
keyReleaseHandler(event)
|
keyReleaseHandler(event)
|
||||||
{
|
{
|
||||||
const idx = this.keys_pressed.indexOf(event.key);
|
const idx = this.keys_pressed.indexOf(event.key);
|
||||||
@ -51,7 +57,7 @@ export default class extends AbstractView
|
|||||||
/**
|
/**
|
||||||
* @param {Object} data
|
* @param {Object} data
|
||||||
*/
|
*/
|
||||||
update_goal(data)
|
on_goal(data)
|
||||||
{
|
{
|
||||||
document.getElementById(`goal-${data.player}`).innerText = data.nb_goal;
|
document.getElementById(`goal-${data.player}`).innerText = data.nb_goal;
|
||||||
}
|
}
|
||||||
|
@ -106,17 +106,11 @@ class Game(AbstractRoom):
|
|||||||
def _send_game_data(self, member: Spectator | Player):
|
def _send_game_data(self, member: Spectator | Player):
|
||||||
member.send("init_game", self.to_dict())
|
member.send("init_game", self.to_dict())
|
||||||
|
|
||||||
def everbody_is_here(self):
|
def _everbody_is_here(self):
|
||||||
for player in self.players:
|
return len(self.players) == len(self.get_players_connected())
|
||||||
if not player.is_connected():
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def nobody_is_here(self):
|
def _nobody_is_here(self):
|
||||||
for player in self.players:
|
return len(self.get_players_connected()) == 0
|
||||||
if player.is_connected():
|
|
||||||
return False
|
|
||||||
return len(self.spectators) == 0
|
|
||||||
|
|
||||||
def _player_join(self, user_id: int, socket: WebsocketConsumer):
|
def _player_join(self, user_id: int, socket: WebsocketConsumer):
|
||||||
|
|
||||||
@ -130,7 +124,7 @@ class Game(AbstractRoom):
|
|||||||
|
|
||||||
player.socket = socket
|
player.socket = socket
|
||||||
|
|
||||||
if (self.everbody_is_here()):
|
if (self._everbody_is_here()):
|
||||||
self.start()
|
self.start()
|
||||||
|
|
||||||
self._update_player(player)
|
self._update_player(player)
|
||||||
@ -141,13 +135,22 @@ class Game(AbstractRoom):
|
|||||||
self._updated_players.append(player)
|
self._updated_players.append(player)
|
||||||
|
|
||||||
def finish(self, winner: Player):
|
def finish(self, winner: Player):
|
||||||
|
print("yo")
|
||||||
|
self.broadcast("finish", {"winner": winner.to_dict()})
|
||||||
self.model.finish(winner.user_id)
|
self.model.finish(winner.user_id)
|
||||||
|
|
||||||
def _player_leave(self, player: Player):
|
def _player_leave(self, player: Player):
|
||||||
if (self.nobody_is_here()):
|
|
||||||
if (self.model.started):
|
connected_players: list[Player] = self.get_players_connected()
|
||||||
self.finish(player)
|
|
||||||
|
if (self.model.started):
|
||||||
|
print(len(connected_players))
|
||||||
|
if (len(connected_players) == 1):
|
||||||
|
last_player: Player = connected_players[0]
|
||||||
|
print("finish")
|
||||||
|
self.finish(last_player)
|
||||||
return
|
return
|
||||||
|
|
||||||
self._update_player(player)
|
self._update_player(player)
|
||||||
|
|
||||||
def _spectator_join(self, user_id: int, socket: WebsocketConsumer):
|
def _spectator_join(self, user_id: int, socket: WebsocketConsumer):
|
||||||
@ -178,7 +181,7 @@ class Game(AbstractRoom):
|
|||||||
self._player_leave(member)
|
self._player_leave(member)
|
||||||
elif (isinstance(member, Spectator)):
|
elif (isinstance(member, Spectator)):
|
||||||
self._spectator_leave(member)
|
self._spectator_leave(member)
|
||||||
if (self.nobody_is_here()):
|
if (self._nobody_is_here()):
|
||||||
self.stopped = True
|
self.stopped = True
|
||||||
self.thread.join(10)
|
self.thread.join(10)
|
||||||
self.game_manager.remove(self)
|
self.game_manager.remove(self)
|
||||||
|
Loading…
Reference in New Issue
Block a user