From 46c02e33f4ea9156982429a01d748e43ae4154c3 Mon Sep 17 00:00:00 2001 From: ulumulu1510 Date: Wed, 1 Mar 2017 13:19:13 +0100 Subject: [PATCH] Renovate the class AsciiCompass to the current standards. --- .../massivecraft/factions/entity/Board.java | 4 +- .../factions/util/AsciiCompass.java | 117 ++++++------------ .../factions/util/AsciiCompassDirection.java | 88 +++++++++++++ 3 files changed, 127 insertions(+), 82 deletions(-) create mode 100644 src/com/massivecraft/factions/util/AsciiCompassDirection.java diff --git a/src/com/massivecraft/factions/entity/Board.java b/src/com/massivecraft/factions/entity/Board.java index 3efc9449..1640574b 100644 --- a/src/com/massivecraft/factions/entity/Board.java +++ b/src/com/massivecraft/factions/entity/Board.java @@ -11,8 +11,6 @@ import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentSkipListMap; -import org.bukkit.ChatColor; - import com.massivecraft.factions.Const; import com.massivecraft.factions.Factions; import com.massivecraft.factions.RelationParticipator; @@ -385,7 +383,7 @@ public class Board extends Entity implements BoardInterface PS topLeftPs = centerPs.plusChunkCoords(-halfWidth, -halfHeight); // Get the compass - ArrayList asciiCompass = AsciiCompass.getAsciiCompass(inDegrees, ChatColor.RED, Txt.parse("")); + List asciiCompass = AsciiCompass.getAsciiCompass(inDegrees); // Make room for the list of names height--; diff --git a/src/com/massivecraft/factions/util/AsciiCompass.java b/src/com/massivecraft/factions/util/AsciiCompass.java index 9d07cb8d..04c9744c 100644 --- a/src/com/massivecraft/factions/util/AsciiCompass.java +++ b/src/com/massivecraft/factions/util/AsciiCompass.java @@ -1,97 +1,56 @@ package com.massivecraft.factions.util; -import java.util.*; +import java.util.List; -import org.bukkit.ChatColor; +import com.massivecraft.massivecore.collections.MassiveList; + +import static com.massivecraft.factions.util.AsciiCompassDirection.*; public class AsciiCompass { - public enum Point + // -------------------------------------------- // + // COMPASS + // -------------------------------------------- // + + public static List getAsciiCompass(double degrees) { - N('N'), - NE('/'), - E('E'), - SE('\\'), - S('S'), - SW('/'), - W('W'), - NW('\\'); - - public final char asciiChar; - - private Point(final char asciiChar) - { - this.asciiChar = asciiChar; - } - - @Override - public String toString() - { - return String.valueOf(this.asciiChar); - } - - public String toString(boolean isActive, ChatColor colorActive, String colorDefault) - { - return (isActive ? colorActive : colorDefault)+String.valueOf(this.asciiChar); - } + return getAsciiCompass(AsciiCompassDirection.getByDegrees(degrees)); } - public static AsciiCompass.Point getCompassPointForDirection(double inDegrees) + private static List getAsciiCompass(AsciiCompassDirection directionFacing) { - double degrees = (inDegrees - 180) % 360 ; - if (degrees < 0) - degrees += 360; + // Create + List ret = new MassiveList<>(); - if (0 <= degrees && degrees < 22.5) - return AsciiCompass.Point.N; - else if (22.5 <= degrees && degrees < 67.5) - return AsciiCompass.Point.NE; - else if (67.5 <= degrees && degrees < 112.5) - return AsciiCompass.Point.E; - else if (112.5 <= degrees && degrees < 157.5) - return AsciiCompass.Point.SE; - else if (157.5 <= degrees && degrees < 202.5) - return AsciiCompass.Point.S; - else if (202.5 <= degrees && degrees < 247.5) - return AsciiCompass.Point.SW; - else if (247.5 <= degrees && degrees < 292.5) - return AsciiCompass.Point.W; - else if (292.5 <= degrees && degrees < 337.5) - return AsciiCompass.Point.NW; - else if (337.5 <= degrees && degrees < 360.0) - return AsciiCompass.Point.N; - else - return null; - } - - public static ArrayList getAsciiCompass(Point point, ChatColor colorActive, String colorDefault) - { - ArrayList ret = new ArrayList(); - String row; + // Fill + ret.add(visualizeRow(directionFacing, NW, N, NE)); + ret.add(visualizeRow(directionFacing, W, NONE, E)); + ret.add(visualizeRow(directionFacing, SW, S, SE)); - row = ""; - row += Point.NW.toString(Point.NW == point, colorActive, colorDefault); - row += Point.N.toString(Point.N == point, colorActive, colorDefault); - row += Point.NE.toString(Point.NE == point, colorActive, colorDefault); - ret.add(row); - - row = ""; - row += Point.W.toString(Point.W == point, colorActive, colorDefault); - row += colorDefault+"+"; - row += Point.E.toString(Point.E == point, colorActive, colorDefault); - ret.add(row); - - row = ""; - row += Point.SW.toString(Point.SW == point, colorActive, colorDefault); - row += Point.S.toString(Point.S == point, colorActive, colorDefault); - row += Point.SE.toString(Point.SE == point, colorActive, colorDefault); - ret.add(row); - + // Return return ret; } - public static ArrayList getAsciiCompass(double inDegrees, ChatColor colorActive, String colorDefault) + // -------------------------------------------- // + // VISUALIZE ROW + // -------------------------------------------- // + + private static String visualizeRow(AsciiCompassDirection directionFacing, AsciiCompassDirection... cardinals) { - return getAsciiCompass(getCompassPointForDirection(inDegrees), colorActive, colorDefault); + // Catch + if (cardinals == null) throw new NullPointerException("cardinals"); + + // Create + StringBuilder ret = new StringBuilder(cardinals.length); + + // Fill + for (AsciiCompassDirection asciiCardinal : cardinals) + { + ret.append(asciiCardinal.visualize(directionFacing)); + } + + // Return + return ret.toString(); } + } diff --git a/src/com/massivecraft/factions/util/AsciiCompassDirection.java b/src/com/massivecraft/factions/util/AsciiCompassDirection.java new file mode 100644 index 00000000..d4a5ada9 --- /dev/null +++ b/src/com/massivecraft/factions/util/AsciiCompassDirection.java @@ -0,0 +1,88 @@ +package com.massivecraft.factions.util; + +import org.bukkit.ChatColor; + +public enum AsciiCompassDirection +{ + // -------------------------------------------- // + // ENUM + // -------------------------------------------- // + + N('N'), + NE('/'), + E('E'), + SE('\\'), + S('S'), + SW('/'), + W('W'), + NW('\\'), + NONE('+'), + + // END OF LIST + ; + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private final char asciiChar; + public char getAsciiChar() { return this.asciiChar; } + + // -------------------------------------------- // + // CONSTANTS + // -------------------------------------------- // + + public static final ChatColor ACTIVE = ChatColor.RED; + public static final ChatColor INACTIVE = ChatColor.YELLOW; + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + AsciiCompassDirection(final char asciiChar) + { + this.asciiChar = asciiChar; + } + + // -------------------------------------------- // + // VISUALIZE + // -------------------------------------------- // + + public String visualize(AsciiCompassDirection directionFacing) + { + boolean isFacing = this.isFacing(directionFacing); + ChatColor color = this.getColor(isFacing); + + return color.toString() + this.getAsciiChar(); + } + + private boolean isFacing(AsciiCompassDirection directionFacing) + { + return this == directionFacing; + } + + private ChatColor getColor(boolean active) + { + return active ? ACTIVE : INACTIVE; + } + + // -------------------------------------------- // + // GET BY DEGREES + // -------------------------------------------- // + + public static AsciiCompassDirection getByDegrees(double degrees) + { + // Prepare + // The conversion from bukkit to usable degrees is (degrees - 180) % 360 + // But we reduced the 180 to 157 (-23) because it makes the math easier that follows. + degrees = (degrees - 157) % 360; + if (degrees < 0) degrees += 360; + + // Get ordinal + int ordinal = (int) Math.floor(degrees / 45);; + + // Return + return AsciiCompassDirection.values()[ordinal]; + } + +}