ConfigReader(一)—— MapConfig

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

这个类主要是加载之前CollisionDetection那部分内容里产生的碰撞信息文件。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//using GameDefine;
using System.IO;

//这个类主要用来读取碰撞(block)信息的
public static class MapConfig
{
    //从MapConfig文件读取信息
    private static EanFile ReadInfoFromFile(string path)
    {
        if (!File.Exists(path))
        {
            Debug.LogError ("wrong ean file path !" + path);

            return null;
        }

        //读取文件
        FileStream fs = new FileStream (path, FileMode.Open);
        BinaryReader br = new BinaryReader (fs);
        EanFile ean = new EanFile ();
        //把信息加载进去
        ean.Load (br, fs);
        fs.Close ();

        return ean;
    }

    private static Dictionary<int, EanFile> MapDataInfo = new Dictionary<int, EanFile> ();

    //获取Mapdata,没有就添加了然后再获取
    private static EanFile GetMapDataById(int mapId)
    {
        if (!MapDataInfo.ContainsKey(mapId))
        {
            string path = mapId.ToString() + ".map";

            //看来MapConfig文件都放在这个目录下面
            MapDataInfo.Add (mapId, ReadInfoFromFile ("Assets/Resources/Map/" + path));
        }

        return MapDataInfo [mapId];
    }

    //这个函数检测传进去的pos是否是block区域
    //就是检测pos地点能不能让角色行动
    public static bool IsMapBlock(int mapId, Vector3 pos)
    {
        int MapRowZ = (int)pos.z * 2;
        int MapRowX = (int)pos.x * 2;
        int MapIndex = MapRowZ * 400 + MapRowX;
        if (GetMapDataById(mapId).MapData.ContainsKey(MapIndex))
        {
            return true;
        }

        return false;
    }




    //这个类是用来读取地图的碰撞信息的,这个和前面的CollisionDetection那部分有联系
    public class EanFile
    {
        public int MapId;
        public int MapWidth;
        public int MapHeight;
        public int MapLength;

        public Dictionary<int, byte> MapData = new Dictionary<int, byte> ();

        public void Load(BinaryReader br, FileStream fs)
        {
            //读取MapId
            MapId = br.ReadInt32 ();
            //读取MapWidth
            MapWidth = br.ReadInt32 ();
            //读取MapHeight
            MapHeight = br.ReadInt32 ();
            //MapLength = Widht * Height
            MapLength = MapWidth * MapHeight;

            for (int index = 0; index < MapLength; index++)
            {
                byte info = br.ReadByte ();
                if (info == 1)
                {
                    MapData.Add (index, info);
                }
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值