Create AsciiMap and move map logic from Board to own class.
This commit is contained in:
@ -1,23 +1,16 @@
|
||||
package com.massivecraft.factions.entity;
|
||||
|
||||
import com.massivecraft.factions.Const;
|
||||
import com.massivecraft.factions.Factions;
|
||||
import com.massivecraft.factions.RelationParticipator;
|
||||
import com.massivecraft.factions.TerritoryAccess;
|
||||
import com.massivecraft.factions.util.AsciiCompass;
|
||||
import com.massivecraft.massivecore.collections.MassiveMap;
|
||||
import com.massivecraft.massivecore.collections.MassiveSet;
|
||||
import com.massivecraft.massivecore.ps.PS;
|
||||
import com.massivecraft.massivecore.store.Entity;
|
||||
import com.massivecraft.massivecore.util.Txt;
|
||||
import com.massivecraft.massivecore.xlib.gson.reflect.TypeToken;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
@ -345,89 +338,4 @@ public class Board extends Entity<Board> implements BoardInterface
|
||||
return false;
|
||||
}
|
||||
|
||||
// MAP GENERATION
|
||||
|
||||
@Override
|
||||
public List<Object> getMap(RelationParticipator observer, PS centerPs, double inDegrees, int width, int height)
|
||||
{
|
||||
centerPs = centerPs.getChunkCoords(true);
|
||||
|
||||
List<Object> ret = new ArrayList<>();
|
||||
Faction centerFaction = this.getFactionAt(centerPs);
|
||||
|
||||
ret.add(Txt.titleize("(" + centerPs.getChunkX() + "," + centerPs.getChunkZ() + ") " + centerFaction.getName(observer)));
|
||||
|
||||
int halfWidth = width / 2;
|
||||
int halfHeight = height / 2;
|
||||
width = halfWidth * 2 + 1;
|
||||
height = halfHeight * 2 + 1;
|
||||
|
||||
PS topLeftPs = centerPs.plusChunkCoords(-halfWidth, -halfHeight);
|
||||
|
||||
// Get the compass
|
||||
List<String> asciiCompass = AsciiCompass.getAsciiCompass(inDegrees);
|
||||
|
||||
// Make room for the list of names
|
||||
height--;
|
||||
|
||||
Map<Faction, Character> fList = new HashMap<>();
|
||||
int chrIdx = 0;
|
||||
boolean overflown = false;
|
||||
|
||||
// For each row
|
||||
for (int dz = 0; dz < height; dz++)
|
||||
{
|
||||
// Draw and add that row
|
||||
StringBuilder row = new StringBuilder();
|
||||
for (int dx = 0; dx < width; dx++)
|
||||
{
|
||||
if (dx == halfWidth && dz == halfHeight)
|
||||
{
|
||||
row.append(Const.MAP_KEY_SEPARATOR);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ! overflown && chrIdx >= Const.MAP_KEY_CHARS.length) overflown = true;
|
||||
|
||||
PS herePs = topLeftPs.plusChunkCoords(dx, dz);
|
||||
Faction hereFaction = this.getFactionAt(herePs);
|
||||
boolean contains = fList.containsKey(hereFaction);
|
||||
if (hereFaction.isNone())
|
||||
{
|
||||
row.append(Const.MAP_KEY_WILDERNESS);
|
||||
}
|
||||
else if ( ! contains && overflown)
|
||||
{
|
||||
row.append(Const.MAP_KEY_OVERFLOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ! contains) fList.put(hereFaction, Const.MAP_KEY_CHARS[chrIdx++]);
|
||||
char fchar = fList.get(hereFaction);
|
||||
row.append(hereFaction.getColorTo(observer).toString()).append(fchar);
|
||||
}
|
||||
}
|
||||
|
||||
String line = row.toString();
|
||||
|
||||
// Add the compass
|
||||
if (dz == 0) line = asciiCompass.get(0) + line.substring(3*3);
|
||||
if (dz == 1) line = asciiCompass.get(1) + line.substring(3*3);
|
||||
if (dz == 2) line = asciiCompass.get(2) + line.substring(3*3);
|
||||
|
||||
ret.add(line);
|
||||
}
|
||||
|
||||
String fRow = "";
|
||||
for (Faction keyfaction : fList.keySet())
|
||||
{
|
||||
fRow += keyfaction.getColorTo(observer).toString() + fList.get(keyfaction) + ": " + keyfaction.getName() + " ";
|
||||
}
|
||||
if (overflown) fRow += Const.MAP_OVERFLOW_MESSAGE;
|
||||
fRow = fRow.trim();
|
||||
ret.add(fRow);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.massivecraft.factions.entity;
|
||||
|
||||
import com.massivecraft.factions.RelationParticipator;
|
||||
import com.massivecraft.factions.TerritoryAccess;
|
||||
import com.massivecraft.massivecore.collections.MassiveMap;
|
||||
import com.massivecraft.massivecore.collections.MassiveSet;
|
||||
@ -12,7 +11,6 @@ import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
@ -302,17 +300,6 @@ public class BoardColl extends Coll<Board> implements BoardInterface
|
||||
return false;
|
||||
}
|
||||
|
||||
// MAP GENERATION
|
||||
|
||||
@Override
|
||||
public List<Object> getMap(RelationParticipator observer, PS centerPs, double inDegrees, int width, int height)
|
||||
{
|
||||
if (centerPs == null) return null;
|
||||
Board board = this.get(centerPs.getWorld());
|
||||
if (board == null) return null;
|
||||
return board.getMap(observer, centerPs, inDegrees, width, height);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// WORLDS
|
||||
// -------------------------------------------- //
|
||||
|
@ -1,10 +1,8 @@
|
||||
package com.massivecraft.factions.entity;
|
||||
|
||||
import com.massivecraft.factions.RelationParticipator;
|
||||
import com.massivecraft.factions.TerritoryAccess;
|
||||
import com.massivecraft.massivecore.ps.PS;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@ -42,8 +40,4 @@ public interface BoardInterface
|
||||
boolean isConnectedPs(PS ps, Faction faction);
|
||||
boolean isAnyConnectedPs(Set<PS> pss, Faction faction);
|
||||
|
||||
// MAP
|
||||
// TODO: Could the degrees be embedded in centerPs yaw instead?
|
||||
List<Object> getMap(RelationParticipator observer, PS centerPs, double inDegrees, int width, int height);
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user