ConfigReader(二)—— MapLoadConfig

目录为Assets/Scripts/ConfigReader目录下
MapLoadConfig.cs

这个文件主要是从config中读取并持有地图信息。
先来看看这个config文件长什么样:
Assets/Resources/Config/MapLoadCfg.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MapLoadCfg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <info MapID="1001">
        <LoadScene>pvp_001</LoadScene>
        <MiniMap>MiniMap_001</MiniMap>
        <NameCn>圣光营地</NameCn>
        <ACameraPos>1</ACameraPos>
        <BCameraPos>6</BCameraPos>
        <ShowPic>135</ShowPic>
        <PlayerNum>6</PlayerNum>
        <PlayerMode>3V3</PlayerMode>
        <ShopID>1001</ShopID>
        <CameraType>2</CameraType>
        <IsAI>1</IsAI>
        <IsNormal>1</IsNormal>
        <IsRank>1</IsRank>
        <IsTrain>0</IsTrain>
        <IsDungeon>0</IsDungeon>
    </info>
    <info MapID="1002">
        <LoadScene>pvp_002</LoadScene>
        <MiniMap>MiniMap_002</MiniMap>
        <NameCn>奥斯深渊</NameCn>
        <ACameraPos>15</ACameraPos>
        <BCameraPos>20</BCameraPos>
        <ShowPic>133</ShowPic>
        <PlayerNum>6</PlayerNum>
        <PlayerMode>3V3</PlayerMode>
        <ShopID>1001</ShopID>
        <CameraType>1</CameraType>
        <IsAI>1</IsAI>
        <IsNormal>1</IsNormal>
        <IsRank>1</IsRank>
        <IsTrain>0</IsTrain>
        <IsDungeon>0</IsDungeon>
    </info>
    <info MapID="1000">
        <LoadScene>pvp_000</LoadScene>
        <MiniMap>MiniMap_002</MiniMap>
        <NameCn>奥斯深渊新手</NameCn>
        <ACameraPos>100</ACameraPos>
        <BCameraPos>105</BCameraPos>
        <ShowPic>133</ShowPic>
        <PlayerNum>6</PlayerNum>
        <PlayerMode>3V3</PlayerMode>
        <ShopID>1001</ShopID>
        <CameraType>1</CameraType>
        <IsAI>0</IsAI>
        <IsNormal>0</IsNormal>
        <IsRank>0</IsRank>
        <IsTrain>1</IsTrain>
        <IsDungeon>0</IsDungeon>
    </info>
</MapLoadCfg>

然后是代码:

using System;
using UnityEngine;
using System.Xml;
using System.Collections.Generic;

public enum EBattleMatchType
{
    EBMT_NONE,
    //人机
    EBMT_Ai,
    //普通
    EBMT_Normal,
    //天梯
    EBMT_Rank,
    //新手
    EBMT_Train,
    //副本
    EBMT_Dungeon,
}

//主要是从config中读取并持有地图信息
//继承单例
public class MapLoadConfig: Singleton<MapLoadConfig>
{
    //uint:mapID
    //MapInfo:MapInfo
    //目前来说,这个项目里面有三个Map
    private Dictionary<uint, MapInfo> mMapList = new Dictionary<uint, MapInfo>();

    private XmlDocument mXmlDoc = null;

    //构造函数
    public MapLoadConfig()
    {
        //编辑器内的目录为Assets/Resources/Config
        ReadConfig ("Config/MapLoadCfg");
    }

    //根据MapId来取得Map信息
    public MapInfo GetMapInfo(uint id)
    {
        if (mMapList.ContainsKey(id))
        {
            return mMapList [id];
        }

        return null;
    }

    //根据地图名称来获取Map信息
    public MapInfo GetMapInfo(string name)
    {
        foreach (MapInfo info in mMapList.Values)
        {
            if (info.mLoadScene == name)
            {
                return info;
            }
        }

        return null;
    }

    //通过匹配模式找地图
    //把类型是type的地图全部返回
    //这里说明每一个匹配模式可以从多张地图中选择一张来玩
    public List<MapInfo> GetMapList(EBattleMatchType type)
    {
        List<MapInfo> mapList = new List<MapInfo> ();

        foreach (MapInfo info in mMapList.Values)
        {
            bool bIs = false;
            switch(type)
            {
            case EBattleMatchType.EBMT_Normal:
                bIs = info.mIsNormal;
                break;

            case EBattleMatchType.EBMT_Ai:
                bIs = info.mIsAI;
                break;

            case EBattleMatchType.EBMT_Rank:
                bIs = info.mIsRank;
                break;

            case EBattleMatchType.EBMT_Train:
                bIs = info.mIsTrain;
                break;

            case EBattleMatchType.EBMT_Dungeon:
                bIs = info.mIsDungeon;
                break;

            case EBattleMatchType.EBMT_NONE:
                bIs = true;
                break;
            }

            if (bIs)
            {
                mapList.Add (info);
            }
        }

        return mapList;
    }

    //载入配置表
    public void ReadConfig(string xmlFilePath)
    {
        //ResourcesManager部分的东西
        ResourceUnit xmlfileUnit = ResourcesManager.Instance.loadImmediate (xmlFilePath, ResourceType.ASSET);
        TextAsset xmlfile = xmlfileUnit.Asset as TextAsset;

        if (!xmlfile)
        {
            Debug.LogError ("error infos: 没有找到指定的xml文件:" + xmlFilePath);
        }

        mXmlDoc = new XmlDocument ();
        //加载xml
        mXmlDoc.LoadXml (xmlfile.text);

        //这个文件里其实也只有这个MapLoadCfg节点
        XmlNodeList infoNodeList = mXmlDoc.SelectSingleNode ("MapLoadCfg").ChildNodes;

        //(XmlNode xNode in infoNodeList)
        for (int i = 0; i < infoNodeList.Count; i++)
        {
            if ((infoNodeList[i] as XmlElement).GetAttributeNode("MapID") == null)
            {
                continue;
            }

            //获取MapID
            string mapId = (infoNodeList [i] as XmlElement).GetAttributeNode ("MapID").InnerText;

            MapInfo mapInfo = new MapInfo ();
            mapInfo.mId = Convert.ToUInt32 (mapId);

            //读取信息到MapInfo
            foreach (XmlElement xEle in infoNodeList[i].ChildNodes)
            {
                #region 搜索
                switch (xEle.Name)
                {
                case "LoadScene":
                    mapInfo.mLoadScene = Convert.ToString(xEle.InnerText);
                    break;

                case "MiniMap":
                    mapInfo.mMiniMap = Convert.ToString(xEle.InnerText);
                    break;

                case "NameCn":
                    mapInfo.mName = Convert.ToString(xEle.InnerText);
                    break;

                case "ACameraPos":
                    mapInfo.mACameraPos = Convert.ToString(xEle.InnerText);
                    break;

                case "BCameraPos":
                    mapInfo.mBCameraPos = Convert.ToString(xEle.InnerText);
                    break;

                case "ShowPic":
                    mapInfo.mShowPic = Convert.ToString(xEle.InnerText);
                    break;

                case "PlayerNum":
                    mapInfo.mPlayerNum = Convert.ToInt32(xEle.InnerText);
                    break;

                case "PlayerMode":
                    mapInfo.mPlayerMode = Convert.ToString(xEle.InnerText);
                    break;

                case "CameraType":
                    mapInfo.mCameraType = Convert.ToInt32(xEle.InnerText);
                    break;

                case "IsAI":
                    mapInfo.mIsAI = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));
                    break;

                case "IsNormal":
                    mapInfo.mIsNormal = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));
                    break;

                case "IsRank":
                    mapInfo.mIsRank = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));
                    break;

                case "IsTrain":
                    mapInfo.mIsTrain = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));
                    break;

                case "IsDungeon":
                    mapInfo.mIsDungeon = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));
                    break;

                case "ShopID":
                    mapInfo.mShopID = Convert.ToInt32(xEle.InnerText);
                    break;
                }
                #endregion
            }

            mMapList.Add (mapInfo.mId, mapInfo);
        }
    }

}

//与MapLoadCfg配置文件里的数据对应
public class MapInfo
{
    public uint mId;    //地图ID
    public string mName;    //地图名
    public string mLoadScene;   //对应场景资源
    public string mMiniMap;     //对应小地图
    public string mACameraPos;      //基地爆炸相机移动目标点A
    public string mBCameraPos;      //基地爆炸相机移动目标点B
    public string mShowPic;     //UI地图
    public int mPlayerNum;      //总人数
    public string mPlayerMode;          //战争模式2v2
    public int mCameraType;         //相机类型: 1:斜45度    2:水平
    public bool mIsAI;      //是否人机
    public bool mIsNormal;      //是否普通
    public bool mIsRank;            //是否天梯
    public bool mIsTrain;   //是否新手
    public bool mIsDungeon;         //是否副本
    public int mShopID;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值