From 314636c6b1eddcca5e21da74c758c18d0dddb74d Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris.kearney@urbanairship.com>
Date: Sat, 23 Aug 2014 21:38:36 -0700
Subject: [PATCH] return path bold

---
 .../command/commands/MovementCommand.java     | 13 +++--
 .../creeper/managers/GameManager.java         | 57 ++++++++++++++++---
 .../comandante/creeper/model/Movement.java    | 10 +++-
 .../com/comandante/creeper/model/Player.java  | 21 ++++++-
 4 files changed, 84 insertions(+), 17 deletions(-)

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 289504ff..be8292af 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 fcdc2c43..8033e7ff 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 b6106eb0..62c80608 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 96662796..35957aab 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() {
+
+    }
 }
-- 
GitLab