diff --git a/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java b/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java index 289504ff972d5a77b65fba629f7fe54a2a20addc..be8292af0a0066b0c92f6acdd9dcfc4df3e918b1 100644 --- a/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java +++ b/src/main/java/com/comandante/creeper/command/commands/MovementCommand.java @@ -55,7 +55,7 @@ public class MovementCommand extends Command { return; } Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getNorthId().get()); - movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the north."); + movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the north.", "south"); } if (southTriggers.contains(command.toLowerCase())) { if (!currentRoom.getSouthId().isPresent()) { @@ -63,7 +63,7 @@ public class MovementCommand extends Command { return; } Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getSouthId().get()); - movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the south."); + movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the south.", "north"); } if (eastTriggers.contains(command.toLowerCase())) { if (!currentRoom.getEastId().isPresent()) { @@ -71,7 +71,7 @@ public class MovementCommand extends Command { return; } Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getEastId().get()); - movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the east."); + movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the east.", "west"); } if (westTriggers.contains(command.toLowerCase())) { if (!currentRoom.getWestId().isPresent()) { @@ -79,7 +79,7 @@ public class MovementCommand extends Command { return; } Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getWestId().get()); - movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west."); + movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west.", "east"); } if (upTriggers.contains(command.toLowerCase())) { if (!currentRoom.getUpId().isPresent()) { @@ -87,7 +87,7 @@ public class MovementCommand extends Command { return; } Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getUpId().get()); - movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west."); + movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west.", "down"); } if (downTriggers.contains(command.toLowerCase())) { if (!currentRoom.getDownId().isPresent()) { @@ -95,10 +95,11 @@ public class MovementCommand extends Command { return; } Room destinationRoom = gameManager.getRoomManager().getRoom(currentRoom.getDownId().get()); - movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west."); + movement = new Movement(player, currentRoom.getRoomId(), destinationRoom.getRoomId(), this, "exited to the west.", "up"); } gameManager.movePlayer(movement); if (movement != null) { + player.setReturnDirection(Optional.of(movement.getReturnDirection())); gameManager.currentRoomLogic(movement.getPlayer().getPlayerId()); } } diff --git a/src/main/java/com/comandante/creeper/managers/GameManager.java b/src/main/java/com/comandante/creeper/managers/GameManager.java index fcdc2c43e402c780e5beb8c6368d4f33957f7ecc..8033e7ff89fbd7222613100c78c1a4dc17e49a0f 100644 --- a/src/main/java/com/comandante/creeper/managers/GameManager.java +++ b/src/main/java/com/comandante/creeper/managers/GameManager.java @@ -214,27 +214,66 @@ public class GameManager { } } - private String getExits(Room room) { + private String getExits(Room room, Player player) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("[ Exits: "); stringBuilder.append(new Ansi().fg(Ansi.Color.GREEN).toString()); + if (!player.getReturnDirection().isPresent()) { + player.setReturnDirection(Optional.of("-")); + } if (room.getNorthId().isPresent()) { - stringBuilder.append("North "); + if (player.getReturnDirection().get().equalsIgnoreCase("north")) { + stringBuilder.append(new Ansi().fgBright(Ansi.Color.GREEN).toString()); + stringBuilder.append("North "); + stringBuilder.append(new Ansi().fg(Ansi.Color.GREEN).toString()); + } else { + stringBuilder.append("North "); + } } if (room.getSouthId().isPresent()) { - stringBuilder.append("South "); + if (player.getReturnDirection().get().equalsIgnoreCase("south")) { + stringBuilder.append(new Ansi().fgBright(Ansi.Color.GREEN).toString()); + stringBuilder.append("South "); + stringBuilder.append(new Ansi().fg(Ansi.Color.GREEN).toString()); + } else { + stringBuilder.append("South "); + } } if (room.getEastId().isPresent()) { - stringBuilder.append("East "); + if (player.getReturnDirection().get().equalsIgnoreCase("east")) { + stringBuilder.append(new Ansi().fgBright(Ansi.Color.GREEN).toString()); + stringBuilder.append("East "); + stringBuilder.append(new Ansi().fg(Ansi.Color.GREEN).toString()); + } else { + stringBuilder.append("East "); + } } if (room.getWestId().isPresent()) { - stringBuilder.append("West "); + if (player.getReturnDirection().get().equalsIgnoreCase("west")) { + stringBuilder.append(new Ansi().fgBright(Ansi.Color.GREEN).toString()); + stringBuilder.append("West "); + stringBuilder.append(new Ansi().fg(Ansi.Color.GREEN).toString()); + } else { + stringBuilder.append("West "); + } } if (room.getUpId().isPresent()) { - stringBuilder.append("Up "); + if (player.getReturnDirection().get().equalsIgnoreCase("up")) { + stringBuilder.append(new Ansi().fgBright(Ansi.Color.GREEN).toString()); + stringBuilder.append("Up "); + stringBuilder.append(new Ansi().fg(Ansi.Color.GREEN).toString()); + } else { + stringBuilder.append("Up "); + } } if (room.getDownId().isPresent()) { - stringBuilder.append("Down "); + if (player.getReturnDirection().get().equalsIgnoreCase("down")) { + stringBuilder.append(new Ansi().fgBright(Ansi.Color.GREEN).toString()); + stringBuilder.append("Down "); + stringBuilder.append(new Ansi().fg(Ansi.Color.GREEN).toString()); + } else { + stringBuilder.append("Down "); + } } stringBuilder.append(new Ansi().reset().toString()).append("]\r\n"); return stringBuilder.toString(); @@ -249,7 +288,7 @@ public class GameManager { sb.append(playerCurrentRoom.getRoomTitle()).append("\r\n\r\n"); sb.append(new Ansi().reset().toString()); sb.append(playerCurrentRoom.getRoomDescription()).append("\r\n"); - sb.append(getExits(playerCurrentRoom)); + sb.append(getExits(playerCurrentRoom, player)); for (String searchPlayerId : playerCurrentRoom.getPresentPlayerIds()) { if (searchPlayerId.equals(player.getPlayerId())) { continue; @@ -257,7 +296,7 @@ public class GameManager { Player searchPlayer = playerManager.getPlayer(searchPlayerId); sb.append(searchPlayer.getPlayerName()).append(" is here.\r\n"); } - for (String npcId: playerCurrentRoom.getNpcIds()) { + for (String npcId : playerCurrentRoom.getNpcIds()) { Npc npcEntity = entityManager.getNpcEntity(npcId); sb.append("A ").append(npcEntity.getColorName()).append(" is here.\r\n"); } diff --git a/src/main/java/com/comandante/creeper/model/Movement.java b/src/main/java/com/comandante/creeper/model/Movement.java index b6106eb070aafb7d3b7ee22400fe6e8e22d282f7..62c8060896547b85e7c194dd1677ff24c1b22ed9 100644 --- a/src/main/java/com/comandante/creeper/model/Movement.java +++ b/src/main/java/com/comandante/creeper/model/Movement.java @@ -9,17 +9,25 @@ public class Movement { private final Integer destinationRoomId; private final MovementCommand command; private final String roomExitMessage; + private final String returnDirection; public Movement(Player player, Integer sourceRoomId, Integer destinationRoomId, MovementCommand command, - String roomExitMessage) { + String roomExitMessage, + String returnDirection) { this.player = player; this.sourceRoomId = sourceRoomId; this.destinationRoomId = destinationRoomId; this.command = command; this.roomExitMessage = roomExitMessage; + this.returnDirection = returnDirection; + + } + + public String getReturnDirection() { + return returnDirection; } public Integer getSourceRoomId() { diff --git a/src/main/java/com/comandante/creeper/model/Player.java b/src/main/java/com/comandante/creeper/model/Player.java index 9666279680210c4e258610caa75584da95fc08f1..35957aab0368b0f7cc5bb0cdd1a2662a30f427dd 100644 --- a/src/main/java/com/comandante/creeper/model/Player.java +++ b/src/main/java/com/comandante/creeper/model/Player.java @@ -1,13 +1,15 @@ package com.comandante.creeper.model; +import com.google.common.base.Optional; import org.apache.commons.codec.binary.Base64; import org.jboss.netty.channel.Channel; -public class Player { +public class Player extends CreeperEntity{ private String playerName; private Channel channel; + private Optional<String> returnDirection = Optional.absent(); public Player(String playerName) { this.playerName = playerName; @@ -28,4 +30,21 @@ public class Player { public void setChannel(Channel channel) { this.channel = channel; } + + public void setPlayerName(String playerName) { + this.playerName = playerName; + } + + public Optional<String> getReturnDirection() { + return returnDirection; + } + + public void setReturnDirection(Optional<String> returnDirection) { + this.returnDirection = returnDirection; + } + + @Override + public void run() { + + } }