Initial commit
This commit is contained in:
17
core/build.gradle
Normal file
17
core/build.gradle
Normal file
@@ -0,0 +1,17 @@
|
||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||
eclipse.project.name = appName + '-core'
|
||||
|
||||
dependencies {
|
||||
api "com.badlogicgames.gdx:gdx:$gdxVersion"
|
||||
api "com.github.crykn:kryonet:$kryoNetVersion"
|
||||
implementation project(':shared')
|
||||
|
||||
if(enableGraalNative == 'true') {
|
||||
implementation "io.github.berstanio:gdx-svmhelper-annotations:$graalHelperVersion"
|
||||
implementation(project(":shared"))
|
||||
}
|
||||
}
|
||||
|
||||
jar {
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
}
|
||||
17
core/src/main/java/io/github/eldek0/Main.java
Normal file
17
core/src/main/java/io/github/eldek0/Main.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package io.github.eldek0;
|
||||
|
||||
import com.badlogic.gdx.Game;
|
||||
import io.github.eldek0.game.MultiplayerScreen;
|
||||
|
||||
public class Main extends Game {
|
||||
|
||||
@Override
|
||||
public void create() {
|
||||
setScreen(new MultiplayerScreen());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package io.github.eldek0.game;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.Input;
|
||||
import com.badlogic.gdx.Screen;
|
||||
import com.badlogic.gdx.graphics.GL20;
|
||||
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
|
||||
import io.github.eldek0.network.GameClient;
|
||||
import io.github.eldek0.network.NetworkPackets;
|
||||
|
||||
public class MultiplayerScreen implements Screen {
|
||||
|
||||
private ShapeRenderer shapeRenderer;
|
||||
private GameClient gameClient;
|
||||
|
||||
private float x = 100;
|
||||
private float y = 100;
|
||||
private float speed = 200f;
|
||||
|
||||
private float sendTimer = 0f;
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
shapeRenderer = new ShapeRenderer();
|
||||
gameClient = new GameClient();
|
||||
|
||||
try {
|
||||
gameClient.connect("127.0.0.1", "Jugador");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(float delta) {
|
||||
update(delta);
|
||||
|
||||
Gdx.gl.glClearColor(0.15f, 0.15f, 0.2f, 1f);
|
||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||
|
||||
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
|
||||
|
||||
for (NetworkPackets.PlayerState player : gameClient.getPlayers().values()) {
|
||||
shapeRenderer.rect(player.x, player.y, 32, 32);
|
||||
}
|
||||
|
||||
shapeRenderer.end();
|
||||
}
|
||||
|
||||
private void update(float delta) {
|
||||
boolean moved = false;
|
||||
|
||||
if (Gdx.input.isKeyPressed(Input.Keys.W)) {
|
||||
y += speed * delta;
|
||||
moved = true;
|
||||
}
|
||||
if (Gdx.input.isKeyPressed(Input.Keys.S)) {
|
||||
y -= speed * delta;
|
||||
moved = true;
|
||||
}
|
||||
if (Gdx.input.isKeyPressed(Input.Keys.A)) {
|
||||
x -= speed * delta;
|
||||
moved = true;
|
||||
}
|
||||
if (Gdx.input.isKeyPressed(Input.Keys.D)) {
|
||||
x += speed * delta;
|
||||
moved = true;
|
||||
}
|
||||
|
||||
sendTimer += delta;
|
||||
|
||||
if (moved && sendTimer >= 0.05f) {
|
||||
gameClient.sendMyPosition(x, y);
|
||||
sendTimer = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resize(int width, int height) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pause() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resume() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hide() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (shapeRenderer != null) shapeRenderer.dispose();
|
||||
if (gameClient != null) gameClient.stop();
|
||||
}
|
||||
}
|
||||
95
core/src/main/java/io/github/eldek0/network/GameClient.java
Normal file
95
core/src/main/java/io/github/eldek0/network/GameClient.java
Normal file
@@ -0,0 +1,95 @@
|
||||
package io.github.eldek0.network;
|
||||
|
||||
import com.esotericsoftware.kryonet.Client;
|
||||
import com.esotericsoftware.kryonet.Connection;
|
||||
import com.esotericsoftware.kryonet.Listener;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class GameClient {
|
||||
|
||||
private final Client client;
|
||||
private final Map<Integer, NetworkPackets.PlayerState> players = new ConcurrentHashMap<>();
|
||||
private int myId = -1;
|
||||
|
||||
public GameClient() {
|
||||
client = new Client();
|
||||
Network.register(client);
|
||||
|
||||
client.addListener(new Listener() {
|
||||
@Override
|
||||
public void received(Connection connection, Object object) {
|
||||
if (object instanceof NetworkPackets.PlayerConnected packet) {
|
||||
NetworkPackets.PlayerState player = new NetworkPackets.PlayerState();
|
||||
player.id = packet.id;
|
||||
player.name = packet.name;
|
||||
player.x = packet.x;
|
||||
player.y = packet.y;
|
||||
|
||||
players.put(player.id, player);
|
||||
|
||||
if (packet.id == connection.getID()) {
|
||||
myId = packet.id;
|
||||
}
|
||||
}
|
||||
|
||||
if (object instanceof NetworkPackets.PlayerDisconnected packet) {
|
||||
players.remove(packet.id);
|
||||
}
|
||||
|
||||
if (object instanceof NetworkPackets.PlayerMove packet) {
|
||||
NetworkPackets.PlayerState player = players.get(packet.id);
|
||||
if (player != null) {
|
||||
player.x = packet.x;
|
||||
player.y = packet.y;
|
||||
}
|
||||
}
|
||||
|
||||
if (object instanceof NetworkPackets.WorldState packet) {
|
||||
players.clear();
|
||||
for (NetworkPackets.PlayerState p : packet.players) {
|
||||
players.put(p.id, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void connect(String host, String name) throws IOException {
|
||||
client.start();
|
||||
client.connect(5000, host, Network.TCP_PORT, Network.UDP_PORT);
|
||||
|
||||
NetworkPackets.Login login = new NetworkPackets.Login();
|
||||
login.name = name;
|
||||
client.sendTCP(login);
|
||||
}
|
||||
|
||||
public void sendMyPosition(float x, float y) {
|
||||
if (!client.isConnected() || myId == -1) return;
|
||||
|
||||
NetworkPackets.PlayerMove move = new NetworkPackets.PlayerMove();
|
||||
move.id = myId;
|
||||
move.x = x;
|
||||
move.y = y;
|
||||
|
||||
client.sendUDP(move);
|
||||
}
|
||||
|
||||
public Map<Integer, NetworkPackets.PlayerState> getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
||||
public int getMyId() {
|
||||
return myId;
|
||||
}
|
||||
|
||||
public boolean isConnected() {
|
||||
return client.isConnected();
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
client.stop();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user