JSON serial change & working basic gameplay

This commit is contained in:
Thomas
2020-08-27 11:10:00 +02:00
parent e2e4495f02
commit cec5fca5c4
16 changed files with 131 additions and 52 deletions

View File

@@ -4,8 +4,11 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import org.json.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.WebSocketSession;
@@ -24,14 +27,17 @@ public class GameManager implements IGameManager {
SocketUtils.sendMessage(session, "error", "cant login twice");
return;
}
Player player = initPlayer(new Player());
game.getSessions().put(session.getId(), session);
game.getPlayers().put(session.getId(), player);
SocketUtils.forwardMessage(session, "login", new JSONObject(player));
SocketUtils.forwardMessage(session, "gameSettings", new JSONObject(game.getSettings()));
System.out.println("[GAME] Player " + session.getId() + " logged in | status: " + player.getX() + " " + player.getY() + " " + player.getColor());
SocketUtils.sendObject(session, "login", new ObjectMapper().writeValueAsString(player));
SocketUtils.sendObject(session, "gameSettings", new ObjectMapper().writeValueAsString(game.getSettings()));
SocketUtils.sendObject(session, "gameUpdate", new ObjectMapper().writeValueAsString(game.getPlayers().values()));
}
@Override
@@ -48,14 +54,16 @@ public class GameManager implements IGameManager {
}
@Override
@Scheduled(fixedDelay = 1000 / 60)
public void step() throws InterruptedException, IOException {
// CHECK OUT OF BORDERS & COLISIONS
game.getPlayers().forEach((id, player) -> {
// OUT OF BORDERS
if (player.getX() - game.getSettings().getPlayerSize() < 0 ||
player.getX() + game.getSettings().getPlayerSize() > game.getSettings().getArenaSize() ||
player.getY() - game.getSettings().getPlayerSize() < 0 ||
player.getY() + game.getSettings().getPlayerSize() > game.getSettings().getArenaSize()) {
if (player.getX() - game.getSettings().getPlayerSize() < 0
|| player.getX() + game.getSettings().getPlayerSize() > game.getSettings().getArenaSize()
|| player.getY() - game.getSettings().getPlayerSize() < 0
|| player.getY() + game.getSettings().getPlayerSize() > game.getSettings().getArenaSize()) {
System.out.println("[GAME] border");
killPlayer(id);
return;
}
@@ -65,8 +73,12 @@ public class GameManager implements IGameManager {
for (var i = 0; i < player2.getWalls().size() - 2; i++) {
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(), game.getSettings().getPlayerSize())) {
if (this.isCrossingLine(wallA.getX(), wallA.getY(), wallB.getX(), wallB.getY(), player.getX(), player.getY(), game.getSettings().getPlayerSize())) {
if (isCloseToWall(wallA.getX(), wallA.getY(), wallB.getX(), wallB.getY(), player.getX(), player.getY(),
game.getSettings().getPlayerSize())) {
System.out.println("[GAME] close to wall");
if (this.isCrossingLine(wallA.getX(), wallA.getY(), wallB.getX(), wallB.getY(), player.getX(),
player.getY(), game.getSettings().getPlayerSize())) {
System.out.println("[GAME] touch da wall");
killPlayer(id);
return;
}
@@ -88,12 +100,21 @@ public class GameManager implements IGameManager {
player.setX(player.getX() + game.getSettings().getPlayerSpeed() * Math.cos(player.getAngle()));
player.setY(player.getY() + game.getSettings().getPlayerSpeed() * Math.sin(player.getAngle()));
});
SocketUtils.broadcast(game, "gameUpdate", new ObjectMapper().writeValueAsString(game.getPlayers().values()));
}
private void killPlayer (String id) {
private void killPlayer(String id) {
Player player = game.getPlayers().get(id);
initPlayer(player);
SocketUtils.sendMessage(game.getSessions().get(id), "gamePlayerDead", "yo dead");
System.out.println("[GAME] Player " + id + " is dead | status: " + player.getX() + " " + player.getY() + " " + player.getColor());
try {
SocketUtils.sendObject(game.getSessions().get(id), "gamePlayerDead",
new ObjectMapper().writeValueAsString(player));
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private boolean isCloseToWall (double xa, double ya, double xb, double yb, double xc, double yc, double radius) {
@@ -120,8 +141,8 @@ public class GameManager implements IGameManager {
double x = game.getSettings().getArenaSize() * (0.25 + Math.random() * 0.5);
double y = game.getSettings().getArenaSize() * (0.25 + Math.random() * 0.5);
player.setAngle(0);
player.setTargetAngle(0);
// player.setAngle(0);
// player.setTargetAngle(0);
player.setLastWall(0);
player.setWalls(new ArrayList<Wall>());
player.setColor(String.format("#%06x", rand.nextInt(0xffffff + 1)));