From a41b51a62f170dcb81b8866eb4910bd662851678 Mon Sep 17 00:00:00 2001
From: Chris Kearney <chris.kearney@urbanairship.com>
Date: Fri, 5 Sep 2014 22:20:23 -0700
Subject: [PATCH] prompt changes, spacing changes on command output.

---
 .../com/comandante/creeper/npc/NpcStats.java  |  6 ++-
 .../creeper/player/PlayerManager.java         | 52 +++++++++++++++----
 .../creeper/player/PlayerStats.java           |  3 +-
 .../creeper/server/ChannelUtils.java          |  8 +--
 .../creeper/server/CreeperSession.java        | 11 ++++
 .../creeper/server/command/WhoCommand.java    | 23 ++++----
 .../com/comandante/creeper/stat/Stats.java    | 13 ++++-
 .../comandante/creeper/stat/StatsBuilder.java |  8 ++-
 8 files changed, 92 insertions(+), 32 deletions(-)

diff --git a/src/main/java/com/comandante/creeper/npc/NpcStats.java b/src/main/java/com/comandante/creeper/npc/NpcStats.java
index 9e5e34dc..ee18b2f2 100644
--- a/src/main/java/com/comandante/creeper/npc/NpcStats.java
+++ b/src/main/java/com/comandante/creeper/npc/NpcStats.java
@@ -14,7 +14,8 @@ public class NpcStats {
             .setMaxHealth(100)
             .setWeaponRatingMin(5)
             .setWeaponRatingMax(10)
-            .setNumberweaponOfRolls(1);
+            .setNumberweaponOfRolls(1)
+            .setExperience(100);
 
     public final static StatsBuilder DRUGGED_PIMP = new StatsBuilder()
             .setStrength(5)
@@ -27,6 +28,7 @@ public class NpcStats {
             .setMaxHealth(150)
             .setWeaponRatingMin(5)
             .setWeaponRatingMax(10)
-            .setNumberweaponOfRolls(1);
+            .setNumberweaponOfRolls(1)
+            .setExperience(100);
 
 }
diff --git a/src/main/java/com/comandante/creeper/player/PlayerManager.java b/src/main/java/com/comandante/creeper/player/PlayerManager.java
index 825ba85d..e9de66f2 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerManager.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerManager.java
@@ -3,13 +3,17 @@ package com.comandante.creeper.player;
 
 import com.comandante.creeper.fight.FightManager;
 import com.comandante.creeper.managers.SessionManager;
-import com.comandante.creeper.world.Room;
+import com.comandante.creeper.server.Color;
 import com.comandante.creeper.stat.Stats;
+import com.comandante.creeper.world.Room;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.apache.commons.codec.binary.Base64;
 import org.mapdb.DB;
 import org.mapdb.HTreeMap;
+import org.nocrala.tools.texttablefmt.BorderStyle;
+import org.nocrala.tools.texttablefmt.ShownBorders;
+import org.nocrala.tools.texttablefmt.Table;
 
 import java.util.Iterator;
 import java.util.Map;
@@ -108,7 +112,39 @@ public class PlayerManager {
     public String getLookString(Player player) {
         PlayerMetadata playerMetadata = getPlayerMetadata(player.getPlayerId());
         Stats playerStats = playerMetadata.getStats();
-        return playerStats.toString();
+
+        Table t = new Table(2, BorderStyle.UNICODE_BOX,
+                ShownBorders.HEADER_AND_FOOTER);
+
+        t.setColumnWidth(0, 14, 14);
+        t.setColumnWidth(1, 3, 5);
+
+        t.addCell(player.getPlayerName());
+        t.addCell("");
+        t.addCell("Strength");
+        t.addCell(Integer.toString(playerStats.getStrength()));
+
+        t.addCell("Willpower");
+        t.addCell(Integer.toString(playerStats.getWillpower()));
+
+        t.addCell("Aim");
+        t.addCell(Integer.toString(playerStats.getAim()));
+
+        t.addCell("Agile");
+        t.addCell(Integer.toString(playerStats.getAgile()));
+
+        t.addCell("Armor");
+        t.addCell(Integer.toString(playerStats.getArmorRating()));
+
+        t.addCell("Mele");
+        t.addCell(Integer.toString(playerStats.getMeleSkill()));
+
+        t.addCell("Health");
+        t.addCell(Integer.toString(playerStats.getMaxHealth()));
+
+        t.addCell(Integer.toString(playerStats.getExperience()));
+        t.addCell("XP");
+        return t.render();
     }
 
     public void updatePlayerHealth(String playerId, int amount) {
@@ -121,7 +157,7 @@ public class PlayerManager {
     }
 
 
-    public String getPrompt(String playerId, Integer roomId) {
+    public String buildPrompt(String playerId, Integer roomId) {
         boolean isFight = FightManager.isActiveFight(sessionManager.getSession(playerId));
         Player player = getPlayer(playerId);
         PlayerMetadata playerMetadata = getPlayerMetadata(playerId);
@@ -130,14 +166,10 @@ public class PlayerManager {
         StringBuilder sb = new StringBuilder()
                 .append("[")
                 .append(player.getPlayerName())
-                .append(" health: ")
-                .append(currentHealth).append("/").append(maxHealth)
-                .append(" roomId:")
-                .append(roomId)
-                .append((" users:"))
-                .append(getNumberOfLoggedInUsers());
+                .append("@creeper ")
+                .append(currentHealth).append("/").append(maxHealth);
         if (isFight) {
-            sb.append(" in battle! ");
+            sb.append(Color.RED + " ! " + Color.RESET);
         }
         sb.append("] ");
         return sb.toString();
diff --git a/src/main/java/com/comandante/creeper/player/PlayerStats.java b/src/main/java/com/comandante/creeper/player/PlayerStats.java
index 099a16fb..84ec6920 100644
--- a/src/main/java/com/comandante/creeper/player/PlayerStats.java
+++ b/src/main/java/com/comandante/creeper/player/PlayerStats.java
@@ -16,5 +16,6 @@ public class PlayerStats {
             .setMaxHealth(100)
             .setWeaponRatingMin(10)
             .setWeaponRatingMax(20)
-            .setNumberweaponOfRolls(1);
+            .setNumberweaponOfRolls(1)
+            .setExperience(0);
 }
diff --git a/src/main/java/com/comandante/creeper/server/ChannelUtils.java b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
index 5bd26a9e..4e5de622 100644
--- a/src/main/java/com/comandante/creeper/server/ChannelUtils.java
+++ b/src/main/java/com/comandante/creeper/server/ChannelUtils.java
@@ -37,7 +37,7 @@ public class ChannelUtils {
         }
         Player player = playerManager.getPlayer(playerId);
         Room playerCurrentRoom = roomManager.getPlayerCurrentRoom(player).get();
-        player.getChannel().write(playerManager.getPrompt(playerId, playerCurrentRoom.getRoomId()));
+        player.getChannel().write(playerManager.buildPrompt(playerId, playerCurrentRoom.getRoomId()));
     }
 
     public void writeToRoom(String playerId, String message) {
@@ -48,9 +48,6 @@ public class ChannelUtils {
         Set<String> presentPlayerIds = playerCurrentRoom.getPresentPlayerIds();
         for (String id : presentPlayerIds) {
             Player presentPlayer = playerManager.getPlayer(id);
-       //     if (presentPlayer.getPlayerId().equals(playerId)) {
-        //        write(playerId, message);
-         //   } else {
                 writeNoPrompt(presentPlayer.getPlayerId(), message);
             }
         }
@@ -70,13 +67,12 @@ public class ChannelUtils {
         Player player = playerManager.getPlayer(playerId);
         Room playerCurrentRoom = roomManager.getPlayerCurrentRoom(player).get();
         StringBuilder sb = new StringBuilder();
-        sb.append("\r\n");
         sb.append(sanitze(message));
         if (isAfterSpace) {
             sb.append(("\r\n"));
         }
         if (isPrompt) {
-            sb.append(playerManager.getPrompt(playerId, playerCurrentRoom.getRoomId()));
+            sb.append(playerManager.buildPrompt(playerId, playerCurrentRoom.getRoomId()));
         }
         player.getChannel().write(sb.toString());
     }
diff --git a/src/main/java/com/comandante/creeper/server/CreeperSession.java b/src/main/java/com/comandante/creeper/server/CreeperSession.java
index c120a097..dccd6a4e 100644
--- a/src/main/java/com/comandante/creeper/server/CreeperSession.java
+++ b/src/main/java/com/comandante/creeper/server/CreeperSession.java
@@ -5,6 +5,8 @@ import com.comandante.creeper.fight.FightResults;
 import com.comandante.creeper.server.command.Command;
 import com.google.common.base.Optional;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.UUID;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -17,6 +19,7 @@ public class CreeperSession {
     private Optional<Future<FightResults>> activeFight = Optional.absent();
     private AtomicBoolean isAbleToDoAbility = new AtomicBoolean(false);
     private Optional<CreeperEntry<UUID, Command>> grabMultiLineInput = Optional.absent();
+    private final long sessionCreationTimestamp = System.currentTimeMillis();
 
     State state;
 
@@ -29,6 +32,14 @@ public class CreeperSession {
         authed
     }
 
+    public long getSessionCreationTimestamp() {
+        return sessionCreationTimestamp;
+    }
+
+    public String getPrettyDate() {
+        return  new SimpleDateFormat("d MMM yyyy, hh:mm aaa").format(new Date(getSessionCreationTimestamp()));
+    }
+
     public Optional<Future<FightResults>> getActiveFight() {
         return activeFight;
     }
diff --git a/src/main/java/com/comandante/creeper/server/command/WhoCommand.java b/src/main/java/com/comandante/creeper/server/command/WhoCommand.java
index 9b15e295..ddf8e4a0 100644
--- a/src/main/java/com/comandante/creeper/server/command/WhoCommand.java
+++ b/src/main/java/com/comandante/creeper/server/command/WhoCommand.java
@@ -10,7 +10,6 @@ import org.nocrala.tools.texttablefmt.ShownBorders;
 import org.nocrala.tools.texttablefmt.Table;
 
 import java.util.Arrays;
-import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
@@ -26,19 +25,20 @@ public class WhoCommand extends Command {
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
         try {
-            CellStyle numberStyle = new CellStyle(CellStyle.HorizontalAlign.right);
-
-            Table t = new Table(3, BorderStyle.UNICODE_BOX_DOUBLE_BORDER,
-                    ShownBorders.SURROUND_HEADER_FOOTER_AND_COLUMNS);
+            Table t = new Table(3, BorderStyle.UNICODE_BOX,
+                    ShownBorders.HEADER_AND_FIRST_COLLUMN);
 
             t.setColumnWidth(0, 8, 14);
-            t.setColumnWidth(1, 7, 16);
-            t.setColumnWidth(2, 9, 16);
+            t.setColumnWidth(1, 14, 16);
+            t.setColumnWidth(2, 26, 26);
+            t.addCell("player");
+            t.addCell("ip address");
+            t.addCell("logged in since");
             Set<Player> allPlayers = getGameManager().getAllPlayers();
             for (Player allPlayer : allPlayers) {
                 t.addCell(allPlayer.getPlayerName());
-                t.addCell(allPlayer.getChannel().getRemoteAddress().toString());
-                t.addCell(new Date().toString());
+                t.addCell(allPlayer.getChannel().getRemoteAddress().toString().substring(1).split(":")[0]);
+                t.addCell(extractCreeperSession(e.getChannel()).getPrettyDate());
             }
             getGameManager().getChannelUtils().write(getPlayerId(extractCreeperSession(e.getChannel())), t.render());
         } finally {
@@ -49,11 +49,11 @@ public class WhoCommand extends Command {
     public static void main(String[] args) {
         CellStyle numberStyle = new CellStyle(CellStyle.HorizontalAlign.right);
 
-        Table t = new Table(3, BorderStyle.DESIGN_DIM,
+        Table t = new Table(3, BorderStyle.UNICODE_BOX,
                 ShownBorders.HEADER_ONLY);
 
         t.setColumnWidth(0, 22, 28);
-        t.setColumnWidth(1, 12, 22);
+        t.setColumnWidth(1, 15, 22);
         t.setColumnWidth(2, 9, 16);
 
         t.addCell("Chrisadfasdfas");
@@ -71,4 +71,5 @@ public class WhoCommand extends Command {
 
         System.out.println("\n\n\n\n" + t.render());
     }
+
 }
diff --git a/src/main/java/com/comandante/creeper/stat/Stats.java b/src/main/java/com/comandante/creeper/stat/Stats.java
index 1dc24ebb..a9fcbcc5 100644
--- a/src/main/java/com/comandante/creeper/stat/Stats.java
+++ b/src/main/java/com/comandante/creeper/stat/Stats.java
@@ -14,6 +14,15 @@ public class Stats implements Serializable {
     private int weaponRatingMax;
     private int weaponRatingMin;
     private int numberweaponOfRolls;
+    private int experience;
+
+    public int getExperience() {
+        return experience;
+    }
+
+    public void setExperience(int experience) {
+        this.experience = experience;
+    }
 
     public int getStrength() {
         return strength;
@@ -113,7 +122,8 @@ public class Stats implements Serializable {
                  int maxHealth,
                  int weaponRatingMax,
                  int weaponRatingMin,
-                 int numberweaponOfRolls) {
+                 int numberweaponOfRolls,
+                 int experience) {
         this.strength = strength;
         this.willpower = willpower;
         this.aim = aim;
@@ -125,6 +135,7 @@ public class Stats implements Serializable {
         this.weaponRatingMax = weaponRatingMax;
         this.weaponRatingMin = weaponRatingMin;
         this.numberweaponOfRolls = numberweaponOfRolls;
+        this.experience = experience;
     }
 
     @Override
diff --git a/src/main/java/com/comandante/creeper/stat/StatsBuilder.java b/src/main/java/com/comandante/creeper/stat/StatsBuilder.java
index 39b44d3a..0d3255e0 100644
--- a/src/main/java/com/comandante/creeper/stat/StatsBuilder.java
+++ b/src/main/java/com/comandante/creeper/stat/StatsBuilder.java
@@ -12,6 +12,7 @@ public class StatsBuilder {
     private int weaponRatingMax;
     private int weaponRatingMin;
     private int numberweaponOfRolls;
+    private int experience;
 
     public StatsBuilder setStrength(int strength) {
         this.strength = strength;
@@ -68,7 +69,12 @@ public class StatsBuilder {
         return this;
     }
 
+    public StatsBuilder setExperience(int experience) {
+        this.experience = experience;
+        return this;
+    }
+
     public Stats createStats() {
-        return new Stats(strength, willpower, aim, agile, armorRating, meleSkill, currentHealth, maxHealth, weaponRatingMax, weaponRatingMin, numberweaponOfRolls);
+        return new Stats(strength, willpower, aim, agile, armorRating, meleSkill, currentHealth, maxHealth, weaponRatingMax, weaponRatingMin, numberweaponOfRolls, experience);
     }
 }
\ No newline at end of file
-- 
GitLab