Merge pull request '[Feature]: Lebenspunkte zu Spieldaten hinzufügen' (!16) from task/TD-47-Lebenspunkte-zu-Spieldaten-hinzufuegen into trunk
Reviewed-on: #16 Reviewed-by: Snoweuph <snow+git@euph.email>
This commit is contained in:
commit
e188cc5974
7 changed files with 72 additions and 10 deletions
|
@ -1,5 +1,6 @@
|
|||
package de.towerdefence.server.match;
|
||||
|
||||
import de.towerdefence.server.match.callbacks.PlayerHitpointsCallback;
|
||||
import de.towerdefence.server.match.callbacks.PlayerMoneyCallback;
|
||||
import de.towerdefence.server.match.exeptions.InvalidPlacementException;
|
||||
import de.towerdefence.server.match.exeptions.InvalidPlacementReason;
|
||||
|
@ -7,6 +8,7 @@ import de.towerdefence.server.player.Player;
|
|||
import lombok.Getter;
|
||||
|
||||
public class GameSession {
|
||||
final static int START_HITPOINTS = 100;
|
||||
final static int START_MONEY = 50;
|
||||
final static int MAP_SIZE_X = 10;
|
||||
final static int MAP_SIZE_Y = 20;
|
||||
|
@ -16,12 +18,18 @@ public class GameSession {
|
|||
private final Player player;
|
||||
@Getter
|
||||
private int money;
|
||||
@Getter
|
||||
private int playerHitpoints;
|
||||
private final PlayerMoneyCallback moneyCallback;
|
||||
//private final PlayerHitpointsCallback hitpointsCallback;
|
||||
|
||||
public GameSession(Player player, PlayerMoneyCallback moneyCallback) {
|
||||
this.player = player;
|
||||
this.moneyCallback = moneyCallback;
|
||||
//this.hitpointsCallback = hitpointsCallback;
|
||||
this.money = START_MONEY;
|
||||
this.playerHitpoints = START_HITPOINTS;
|
||||
|
||||
}
|
||||
|
||||
public void placeTower(Tower tower, int x, int y) throws InvalidPlacementException {
|
||||
|
@ -41,5 +49,6 @@ public class GameSession {
|
|||
|
||||
public void addMoney(int amount) {
|
||||
money += amount;
|
||||
moneyCallback.call(player, money);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package de.towerdefence.server.match;
|
||||
|
||||
import de.towerdefence.server.match.callbacks.PlayerHitpointsCallback;
|
||||
import de.towerdefence.server.match.callbacks.PlayerMoneyCallback;
|
||||
import de.towerdefence.server.player.Player;
|
||||
import lombok.Getter;
|
||||
|
@ -47,7 +48,11 @@ public class Match {
|
|||
|
||||
}
|
||||
|
||||
public void connectPlayer(Player player, PlayerMoneyCallback moneyCallback) {
|
||||
public void connectPlayer(
|
||||
Player player,
|
||||
PlayerMoneyCallback moneyCallback,
|
||||
PlayerHitpointsCallback hitpointsCallback
|
||||
) {
|
||||
boolean isPlayer1 = player1.equals(player);
|
||||
boolean isPlayer2 = player2.equals(player);
|
||||
if (!isPlayer1 && !isPlayer2) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package de.towerdefence.server.match;
|
||||
|
||||
import de.towerdefence.server.match.callbacks.PlayerHitpointsCallback;
|
||||
import de.towerdefence.server.match.callbacks.PlayerMoneyCallback;
|
||||
import de.towerdefence.server.match.exeptions.InvalidPlacementException;
|
||||
import de.towerdefence.server.match.exeptions.InvalidPlacementReason;
|
||||
|
@ -48,15 +49,20 @@ public class MatchService {
|
|||
return opponent.get();
|
||||
}
|
||||
|
||||
public void playerConnected(Player player, PlayerMoneyCallback moneyCallback) {
|
||||
public void playerConnected(
|
||||
Player player,
|
||||
PlayerMoneyCallback moneyCallback,
|
||||
PlayerHitpointsCallback hitpointsCallback
|
||||
) {
|
||||
Match match = playerMatches.get(player);
|
||||
match.connectPlayer(player, moneyCallback);
|
||||
match.connectPlayer(player, moneyCallback, hitpointsCallback);
|
||||
Optional<GameSession> optionalPlayerSession = match.getPlayerGameSession(player);
|
||||
if (optionalPlayerSession.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
GameSession playerSession = optionalPlayerSession.get();
|
||||
moneyCallback.call(player, playerSession.getMoney());
|
||||
hitpointsCallback.call(player, playerSession.getPlayerHitpoints() );
|
||||
if (!match.hasMatchStarted()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package de.towerdefence.server.match.callbacks;
|
||||
|
||||
import de.towerdefence.server.player.Player;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface PlayerHitpointsCallback {
|
||||
void call(Player player, int playerHitpoints);
|
||||
}
|
|
@ -6,6 +6,7 @@ import de.towerdefence.server.match.exeptions.InvalidPlacementException;
|
|||
import de.towerdefence.server.match.exeptions.NotInMatchException;
|
||||
import de.towerdefence.server.player.Player;
|
||||
import de.towerdefence.server.server.JsonWebsocketHandler;
|
||||
import de.towerdefence.server.server.channels.match.hitpoints.PlayerHitpointsMessage;
|
||||
import de.towerdefence.server.server.channels.match.money.PlayerMoneyMessage;
|
||||
import de.towerdefence.server.server.channels.match.placing.GamePlayerMap;
|
||||
import de.towerdefence.server.server.channels.match.placing.InvalidPlacementMessage;
|
||||
|
@ -37,7 +38,11 @@ public class MatchWebsocketHandler extends JsonWebsocketHandler {
|
|||
public void afterConnectionEstablished(WebSocketSession session) {
|
||||
super.afterConnectionEstablished(session);
|
||||
playerSessions.put(sessionPlayers.get(session), session);
|
||||
matchService.playerConnected(sessionPlayers.get(session), this::onPlayerMoneyChanged);
|
||||
matchService.playerConnected(
|
||||
sessionPlayers.get(session),
|
||||
this::onPlayerMoneyChanged,
|
||||
this::onPlayerHitpointsChanged
|
||||
);
|
||||
}
|
||||
|
||||
private void onPlayerMoneyChanged(Player player, int playerMoney) {
|
||||
|
@ -48,6 +53,14 @@ public class MatchWebsocketHandler extends JsonWebsocketHandler {
|
|||
}
|
||||
}
|
||||
|
||||
private void onPlayerHitpointsChanged(Player player, int playerHitpoints) {
|
||||
WebSocketSession session = playerSessions.get(player);
|
||||
try {
|
||||
new PlayerHitpointsMessage(playerHitpoints).send(session);
|
||||
} catch (IOException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void closeSession(WebSocketSession session, CloseStatus reason) {
|
||||
Player player = sessionPlayers.get(session);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package de.towerdefence.server.server.channels.match;
|
||||
package de.towerdefence.server.server.channels.match.hitpoints;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
||||
|
@ -8,19 +8,18 @@ import lombok.AllArgsConstructor;
|
|||
import java.util.Map;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class PlayerMoneyMessage extends JsonMessage {
|
||||
|
||||
private final int playerMoney;
|
||||
public class PlayerHitpointsMessage extends JsonMessage {
|
||||
|
||||
private final int playerHitpoints;
|
||||
@Override
|
||||
protected String getMessageId() {
|
||||
return "PlayerMoney";
|
||||
return "PlayerHitpoints";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Map<String, JsonNode> getData(JsonNodeFactory factory) {
|
||||
return Map.of(
|
||||
"playerMoney", factory.numberNode(this.playerMoney)
|
||||
"playerHitpoints", factory.numberNode(this.playerHitpoints)
|
||||
);
|
||||
}
|
||||
}
|
22
ws/ws.yml
22
ws/ws.yml
|
@ -239,6 +239,21 @@ channels:
|
|||
required:
|
||||
- $id
|
||||
- playerMoney
|
||||
PlayerHitpoints:
|
||||
description: Hitpoints a player currently has
|
||||
payload:
|
||||
type: object
|
||||
additionalProperties: false
|
||||
properties:
|
||||
$id:
|
||||
type: string
|
||||
format: messageId
|
||||
playerHitpoints:
|
||||
type: integer
|
||||
required:
|
||||
- $id
|
||||
- playerHitpoints
|
||||
|
||||
|
||||
|
||||
operations:
|
||||
|
@ -321,6 +336,13 @@ operations:
|
|||
$ref: "#/channels/match"
|
||||
messages:
|
||||
- $ref: "#/channels/match/messages/PlayerMoney"
|
||||
playerHitpoints:
|
||||
title: PlayerHitpoints
|
||||
action: receive
|
||||
channel:
|
||||
$ref: "#/channels/match"
|
||||
messages:
|
||||
- $ref: "#/channels/match/messages/PlayerHitpoints"
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue