Fixed collision detection
This commit is contained in:
@@ -71,6 +71,9 @@ public class GameManager implements IGameManager {
|
||||
// COLLISIONS
|
||||
game.getPlayers().forEach((id2, player2) -> {
|
||||
for (var i = 0; i < player2.getWalls().size() - 2; i++) {
|
||||
// Pour evité la collision avec un mur venant d'être placé par le même joueur
|
||||
if (id.equals(id2) && i >= player2.getWalls().size() - 4) break;
|
||||
|
||||
Wall wallA = player2.getWalls().get(i);
|
||||
Wall wallB = player2.getWalls().get(i + 1);
|
||||
if (isCloseToWall(wallA.getX(), wallA.getY(), wallB.getX(), wallB.getY(), player.getX(), player.getY(),
|
||||
@@ -101,7 +104,11 @@ public class GameManager implements IGameManager {
|
||||
player.setY(player.getY() + game.getSettings().getPlayerSpeed() * Math.sin(player.getAngle()));
|
||||
});
|
||||
|
||||
SocketUtils.broadcast(game, "gameUpdate", new ObjectMapper().writeValueAsString(game.getPlayers().values()));
|
||||
// Broadcast une fois sur deux
|
||||
if (game.isUpdateNeeded()) {
|
||||
SocketUtils.broadcast(game, "gameUpdate", new ObjectMapper().writeValueAsString(game.getPlayers().values()));
|
||||
game.setUpdateNeeded(false);
|
||||
} else game.setUpdateNeeded(true);
|
||||
}
|
||||
|
||||
private void killPlayer(String id) {
|
||||
@@ -127,11 +134,15 @@ public class GameManager implements IGameManager {
|
||||
}
|
||||
|
||||
private boolean isCrossingLine (double xa, double ya, double xb, double yb, double xc, double yc, double radius) {
|
||||
/*
|
||||
var a = xc - xa;
|
||||
var b = xb - xa;
|
||||
var c = yc - ya;
|
||||
var d = yb - ya;
|
||||
var result = (a * d - b * c) / Math.sqrt(Math.pow(xa - xb, 2) + Math.pow(ya - yb, 2));
|
||||
*/
|
||||
|
||||
var result = Math.abs((yb - ya) * xc - (xb - xa) * yc + xb * ya - yb * xa)/ Math.sqrt(Math.pow(xb - xa, 2) + Math.pow(yb - ya, 2));
|
||||
|
||||
return result < radius;
|
||||
}
|
||||
|
||||
@@ -16,8 +16,10 @@ public class Game {
|
||||
private Map<String, Player> players;
|
||||
private Map<String, WebSocketSession> sessions;
|
||||
private GameSettings settings;
|
||||
private boolean updateNeeded;
|
||||
|
||||
public Game() {
|
||||
this.updateNeeded = false;
|
||||
this.players = new HashMap<>();
|
||||
this.sessions = new HashMap<>();
|
||||
this.settings = new GameSettings();
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user