Renovate the class AsciiCompass to the current standards.

This commit is contained in:
ulumulu1510 2017-03-01 13:19:13 +01:00
parent 6f782b8503
commit 46c02e33f4
3 changed files with 127 additions and 82 deletions

View File

@ -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<Board> implements BoardInterface
PS topLeftPs = centerPs.plusChunkCoords(-halfWidth, -halfHeight);
// Get the compass
ArrayList<String> asciiCompass = AsciiCompass.getAsciiCompass(inDegrees, ChatColor.RED, Txt.parse("<a>"));
List<String> asciiCompass = AsciiCompass.getAsciiCompass(inDegrees);
// Make room for the list of names
height--;

View File

@ -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<String> 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<String> getAsciiCompass(AsciiCompassDirection directionFacing)
{
double degrees = (inDegrees - 180) % 360 ;
if (degrees < 0)
degrees += 360;
// Create
List<String> 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<String> getAsciiCompass(Point point, ChatColor colorActive, String colorDefault)
{
ArrayList<String> ret = new ArrayList<String>();
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<String> 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();
}
}

View File

@ -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];
}
}