JSON serial change & working basic gameplay
This commit is contained in:
@@ -2,10 +2,15 @@ package gltronic.tronio;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
import org.springframework.scheduling.TaskScheduler;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
@ComponentScan(basePackages = "gltronic.tronio")
|
||||
@PropertySource("classpath:application.properties")
|
||||
public class TronIoApplication {
|
||||
@@ -14,4 +19,15 @@ public class TronIoApplication {
|
||||
SpringApplication.run(TronIoApplication.class, args);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TaskScheduler taskScheduler() {
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
|
||||
scheduler.setPoolSize(2);
|
||||
scheduler.setThreadNamePrefix("scheduled-task-");
|
||||
scheduler.setDaemon(true);
|
||||
|
||||
return scheduler;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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)));
|
||||
|
||||
@@ -2,7 +2,6 @@ package gltronic.tronio.business;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.web.socket.TextMessage;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
|
||||
@@ -17,17 +16,17 @@ public class SocketUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void forwardMessage(WebSocketSession session, String type, JSONObject message) {
|
||||
public static void sendObject(WebSocketSession session, String type, String object) {
|
||||
try {
|
||||
session.sendMessage(new TextMessage("{\"type\":\"" + type + "\",\"message\": " + message.toString() + " }"));
|
||||
session.sendMessage(new TextMessage("{\"type\":\"" + type + "\",\"message\": " + object + " }"));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void broadcast(Game game, String type, JSONObject message) {
|
||||
public static void broadcast(Game game, String type, String message) {
|
||||
game.getSessions().forEach((id, session) -> {
|
||||
forwardMessage(session, type, message);
|
||||
sendObject(session, type, message);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package gltronic.tronio.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
@@ -9,13 +11,20 @@ import lombok.Setter;
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class Player {
|
||||
private double x;
|
||||
private double y;
|
||||
private double angle;
|
||||
private double targetAngle;
|
||||
private ArrayList<Wall> walls;
|
||||
private int lastWall;
|
||||
|
||||
private String color;
|
||||
|
||||
private double x;
|
||||
|
||||
private double y;
|
||||
|
||||
private double angle;
|
||||
|
||||
private double targetAngle;
|
||||
|
||||
private ArrayList<Wall> walls;
|
||||
|
||||
private int lastWall;
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package gltronic.tronio.web;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -23,15 +25,17 @@ public class SocketHandler extends TextWebSocketHandler {
|
||||
@Override
|
||||
public void handleTextMessage(WebSocketSession session, TextMessage message)
|
||||
throws InterruptedException, IOException {
|
||||
System.err.println("[WS] message :" + message.getPayload());
|
||||
// System.err.println("[WS] message :" + message.getPayload());
|
||||
|
||||
String payload = message.getPayload();
|
||||
JSONObject jsonObject = new JSONObject(payload);
|
||||
JSONObject rootObject = new JSONObject(payload);
|
||||
|
||||
String type = (String) jsonObject.get("type");
|
||||
String type = rootObject.getString("type");
|
||||
switch (type) {
|
||||
case "update":
|
||||
gameManager.updatePlayer(session, (Player) jsonObject.get("message"));
|
||||
Player player = new ObjectMapper().readValue(rootObject.get("message").toString(), Player.class);
|
||||
|
||||
gameManager.updatePlayer(session, player);
|
||||
break;
|
||||
default:
|
||||
SocketUtils.sendMessage(session, "error", "unknow command");
|
||||
|
||||
Reference in New Issue
Block a user