package mapmaker; import java.util.*; import javax.swing.*; import java.io.*; import util.*; /** used to convert a map into a OLC file */ public class OlcConverter implements MapConverter { private static final String[] olcDirNames = { "north", "east", "south", "west", "northeast", "southeast", "southwest", "northwest", "up", "down"}; private static final String[] olcSectorNames = { "inside", "city", "field", "forest", "hills", "mountain", "shallow", "deep", "underwater", "air", "desert" }; private static final String[] olcFlagNames = { "dark", "no_mob", "indoors", "private", "safe", "solitary", "pet_shop", "no_recall" }; protected String olcDirName(int dir) { return olcDirNames[dir]; } // olcDirName protected String olcSectorName(int sector) { return olcSectorNames[sector]; } // olcSectorName protected String olcFlagName(int flag) { return olcFlagNames[flag]; } // olcFlagName /** converts the given map into an array of strings that * represents the map in Rom format */ public Text mapToText(AreaMap map, int startVnum, String fileName) { Room[] rooms = map.getRooms(); NoEqualValuesMap roomVnums = RomConverterTool.assignVnums(rooms, startVnum); Text out = new Text(); // create rooms for (int i = 0; i < rooms.length; i++) if (!(rooms[i] instanceof VirtualRoom)) out.append("redit create " + roomVnums.get(rooms[i])); // for each room set the data for (int i = 0; i < rooms.length; i++) { Room room = rooms[i]; if (!(room instanceof VirtualRoom)) { // go to room out.append("goto " + roomVnums.get(room)); // create links for (int dir = 0; dir < Dir.DIRNR; dir++) if (room.exitLinked(dir) && !room.exitBlocked(dir)) { Room exitRoom = RomConverterTool.getExitRoom(room, room.getLink(dir)); if (exitRoom != null) out.append(olcDirName(dir) + " room " + roomVnums.get(exitRoom)); } // set room name String roomName = RomConverterTool.getRoomName(room); if (roomName.length() > 0) out.append("name " + roomName); // set room description Text roomDesc = RomConverterTool.getRoomDesc(room); if (roomDesc.getLineCount() > 0) { out.append("desc"); out.append(roomDesc); out.append(".q"); } // set room sector int sector = RomConverterTool.getRoomSector(room); if (sector != 0) out.append("sector " + olcSectorName(sector)); // set room flags boolean[] flags = RomConverterTool.getRoomFlags(room); for (int flag = 0; flag < olcFlagNames.length; flag++) if (flags[flag]) out.append("room " + olcFlagName(flag)); } } // save and exit olc out.append("asave area"); out.append("done"); return out; } // mapToText } // OlcConverter