更新
This commit is contained in:
@@ -16,6 +16,9 @@ public class NetworkManager {
|
||||
private final Map<String, String> playerCharacters = new HashMap<>();
|
||||
// 存储远程玩家的攻击类型(attackType)
|
||||
private final Map<String, String> playerAttacks = new HashMap<>();
|
||||
// 伤害事件:targetId -> 累积伤害(本帧内可能多次)
|
||||
private final Map<String, Integer> damageEvents = new HashMap<>();
|
||||
private final Map<String, float[]> respawnEvents = new HashMap<>();
|
||||
|
||||
public static NetworkManager getInstance() {
|
||||
if (instance == null) {
|
||||
@@ -104,6 +107,39 @@ public class NetworkManager {
|
||||
} else {
|
||||
Gdx.app.error("Network", "攻击消息格式错误: " + message);
|
||||
}
|
||||
} else if (message.startsWith("DAMAGE:")) {
|
||||
// DAMAGE:targetId,amount,(dir)
|
||||
String[] parts = message.substring(7).split(",");
|
||||
if (parts.length >= 2) {
|
||||
String targetId = parts[0];
|
||||
try {
|
||||
int amount = Integer.parseInt(parts[1]);
|
||||
damageEvents.merge(targetId, amount, Integer::sum);
|
||||
// 第三个参数方向目前不存储,只为击退逻辑可扩展
|
||||
Gdx.app.log("Network",
|
||||
"收到伤害: " + targetId + " -" + amount + (parts.length >= 3 ? (" dir=" + parts[2]) : ""));
|
||||
} catch (NumberFormatException e) {
|
||||
Gdx.app.error("Network", "伤害数值解析失败: " + message);
|
||||
}
|
||||
} else {
|
||||
Gdx.app.error("Network", "伤害消息格式错误: " + message);
|
||||
}
|
||||
} else if (message.startsWith("RESPAWN:")) {
|
||||
// RESPAWN:playerId,x,y
|
||||
String[] parts = message.substring(8).split(",");
|
||||
if (parts.length == 3) {
|
||||
try {
|
||||
String pid = parts[0];
|
||||
float x = Float.parseFloat(parts[1]);
|
||||
float y = Float.parseFloat(parts[2]);
|
||||
respawnEvents.put(pid, new float[] { x, y });
|
||||
Gdx.app.log("Network", "收到重生: " + pid + " -> (" + x + "," + y + ")");
|
||||
} catch (NumberFormatException e) {
|
||||
Gdx.app.error("Network", "重生坐标解析失败: " + message);
|
||||
}
|
||||
} else {
|
||||
Gdx.app.error("Network", "重生消息格式错误: " + message);
|
||||
}
|
||||
} else {
|
||||
Gdx.app.log("Network", "未知消息类型: " + message);
|
||||
}
|
||||
@@ -140,6 +176,32 @@ public class NetworkManager {
|
||||
return playerCharacters;
|
||||
}
|
||||
|
||||
public Map<String, Integer> getDamageEvents() {
|
||||
return damageEvents;
|
||||
}
|
||||
|
||||
public void sendDamage(String targetId, int amount) {
|
||||
String msg = "DAMAGE:" + targetId + "," + amount; // 不含方向
|
||||
if (isHost && server != null) {
|
||||
server.broadcastToOthers(null, msg);
|
||||
receiveMessage(msg); // 本地也应用
|
||||
} else if (client != null) {
|
||||
client.sendMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendRespawn(String playerId, float x, float y) {
|
||||
String msg = "RESPAWN:" + playerId + "," + x + "," + y;
|
||||
if (isHost && server != null) {
|
||||
server.broadcastToOthers(null, msg);
|
||||
receiveMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, float[]> getRespawnEvents() {
|
||||
return respawnEvents;
|
||||
}
|
||||
|
||||
public boolean isHost() {
|
||||
return isHost;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user