package module.map.constants;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import module.map.Neighbor;
import module.map.api.IDoor;
import module.map.api.IRoom;
import module.map.constants.CDoorAttribute.doorStatus;
public class CExit {
public static enum exit {
EAST("�F"),
WEST("��"),
SOUTH("�n"),
NORTH("�_"),
UP("�W"),
DOWN("�U");
public String chineseName;
exit (String chineseName){
this.chineseName = chineseName;
}
}
public static String displayRoomExits(IRoom r){
StringBuffer buffer = new StringBuffer();
buffer.append("[�X�f:");
ConcurrentHashMap<CExit.exit, Neighbor> exitMap = r.getExits();
int count = 0;
for (Entry<exit, Neighbor> entry : exitMap.entrySet()){
IDoor targetDoor = entry.getValue().getDoor();
if (targetDoor == null || (targetDoor.getDoorStatus() != doorStatus.CLOSED
&& targetDoor.getDoorStatus() != doorStatus.LOCKED))
count++;
}
if (count == 0)
buffer.append(" �L ]\n");
else {
buffer.append(displaySingleExit(exitMap, exit.EAST));
buffer.append(displaySingleExit(exitMap, exit.WEST));
buffer.append(displaySingleExit(exitMap, exit.SOUTH));
buffer.append(displaySingleExit(exitMap, exit.NORTH));
buffer.append(displaySingleExit(exitMap, exit.UP));
buffer.append(displaySingleExit(exitMap, exit.DOWN));
buffer.append(" ]\n");
}
return buffer.toString();
}
public static String[] getAccessibleExitsRoom(IRoom r){
ConcurrentHashMap<CExit.exit, Neighbor> exitMap = r.getExits();
ConcurrentHashMap<exit, Neighbor> accessibleExitMap = new ConcurrentHashMap<exit, Neighbor>();
for (Entry<exit, Neighbor> entry : exitMap.entrySet()){
IDoor door = entry.getValue().getDoor();
if (door == null || (door.getDoorStatus() != doorStatus.CLOSED
&& door.getDoorStatus() != doorStatus.LOCKED))
accessibleExitMap.put(entry.getKey(), entry.getValue());
}
String[] result = new String[accessibleExitMap.size()];
if (accessibleExitMap.isEmpty()) return null;
else {
int index = 0;
if (accessibleExitMap.containsKey(exit.EAST)){
result[index] = "e";
index++;
}
if (accessibleExitMap.containsKey(exit.WEST)){
result[index] = "w";
index++;
}
if (accessibleExitMap.containsKey(exit.SOUTH)){
result[index] = "s";
index++;
}
if (accessibleExitMap.containsKey(exit.NORTH)){
result[index] = "n";
index++;
}
if (accessibleExitMap.containsKey(exit.UP)){
result[index] = "u";
index++;
}
if (accessibleExitMap.containsKey(exit.DOWN)){
result[index] = "d";
index++;
}
}
return result;
}
private static String displaySingleExit(ConcurrentHashMap<CExit.exit, Neighbor> map, exit way){
if (map.get(way) != null){
Neighbor nei = map.get(way);
if (nei.getDoor() == null || nei.getDoor().getDoorStatus() == doorStatus.OPENED)
return " " + way.chineseName;
}
return "";
}
}