⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlmaploader.java.svn-base

📁 一个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 + -