/
maps/
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