📄 xmlmaploader.java.svn-base
字号:
/*
* XmlMapLoader.java
*
* Created on 3. Februar 2007, 13:54
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package kanjitori.map;
import com.jme.image.Image;
import com.jme.image.Texture;
import com.jme.scene.Skybox;
import com.jme.util.TextureManager;
import com.sun.org.apache.xerces.internal.parsers.SAXParser;
import java.awt.Dimension;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import kanjitori.graphics.tile.AbstractTile;
import kanjitori.graphics.tile.Tile;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author Pirx
*/
public class XmlMapLoader implements MapLoader {
/** Creates a new instance of XmlMapLoader */
public XmlMapLoader() {
}
public Map load(String mapFileName) {
try {
Map map = new DefaultMap();
XMLReader xmlReader = new SAXParser();
xmlReader.setContentHandler(new MapHandler(map));
InputSource is = new InputSource(new FileInputStream(mapFileName));
xmlReader.parse(is);
return map;
} catch(Exception ex) {
throw new IllegalArgumentException(ex);
}
}
private static class MapHandler extends DefaultHandler {
private Map map;
private List<Layer> layers = new ArrayList<Layer>();
private Layer layer;
private Tile tile;
private java.util.Map<String, String> params = new HashMap<String, String>();
MapHandler(Map map) {
this.map = map;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes){
if ("map".equals(qName)) {
map.setName(attributes.getValue("name"));
map.setBotCount(Integer.parseInt(attributes.getValue("startBots")));
map.setSize(new Dimension(Integer.parseInt(attributes.getValue("x")),
Integer.parseInt(attributes.getValue("y"))));
} else if ("tiledef".equals(qName)) {
try {
tile = (Tile) Class.forName(attributes.getValue("class")).newInstance();
tile.setName(attributes.getValue("name"));
} catch (Exception ex) {
ex.printStackTrace();
}
} else if ("param".equals(qName)) {
params.put(attributes.getValue("key"), attributes.getValue("value"));
} else if("layer".equals(qName)) {
layer = new DefaultLayer(attributes.getValue("name"), map.getSize(),
Float.parseFloat(attributes.getValue("height")));
layers.add(layer);
} else if ("tile".equals(qName)) {
layer.setTile(Integer.parseInt(attributes.getValue("x")),
Integer.parseInt(attributes.getValue("y")),
AbstractTile.getTile(attributes.getValue("name")));
} else if ("cont".equals(qName)) {
map.setContent(Integer.parseInt(attributes.getValue("x")),
Integer.parseInt(attributes.getValue("y")),
Content.SOLID);
} else if ("skybox".equals(qName)) {
map.setSkyboxTextures(attributes.getValue("north"),
attributes.getValue("south"),
attributes.getValue("east"),
attributes.getValue("west"),
attributes.getValue("up"),
attributes.getValue("down"));
}
}
@Override
public void endElement(String uri, String localName, String qName) {
if ("layers".equals(qName)) {
Layer[] layerArray = new Layer[layers.size()];
for (int i = 0; i < layers.size(); i++) {
layerArray[i] = layers.get(i);
}
map.setLayers(layerArray);
} else if ("tiledef".equals(qName)) {
tile.setParams(params);
params.clear();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -