//------------------------------------------------------------------------------------------------------- /** * @brief 查找地图间连接点 * @param srcMapID 源地图 * @param destMapID 目标地图 * @return 地图中连接传送点位置 */ public bool FindMapLinkPoint(uint srcMapID, uint destMapID, out Vector3 pos) { pos = Vector3.zero; // 查找路径 MapConnex connex = null; if (!m_dicMapConnex.TryGetValue(srcMapID, out connex)) { return(false); } MapPath mp = null; if (!connex.connex.TryGetValue(destMapID, out mp)) { return(false); } if (mp.links.Count < 2) { return(false); } // 根据路径上的点,查找传送点坐标 List <MapDeliverPoint> lstPoint = null; if (!m_dicMapDeliver.TryGetValue(srcMapID, out lstPoint)) { return(false); } for (int i = 0; i < lstPoint.Count; ++i) { if (lstPoint[i].destmapid == mp.links[1]) { pos.x = lstPoint[i].pos.x; pos.y = 0; pos.z = lstPoint[i].pos.y; return(true); } } return(false); }
//------------------------------------------------------------------------------------------------------- /** * @brief 是否有缓存的路径 * @param */ MapPath IsCachePath(uint srcMapID, uint descMapID) { MapConnex mc = null; if (!m_dicMapConnex.TryGetValue(srcMapID, out mc)) { return(null); } MapPath mp = null; if (!mc.connex.TryGetValue(descMapID, out mp)) { return(null); } return(mp); }
//------------------------------------------------------------------------------------------------------- void AddMapPath(uint srcMapID, uint descMapID, float fDistance, List <uint> mapPaths) { MapConnex connex = null; if (!m_dicMapConnex.TryGetValue(srcMapID, out connex)) // 添加已经找到的路径 { connex = new MapConnex(); m_dicMapConnex.Add(srcMapID, connex); } connex.mapid = srcMapID; if (!connex.connex.ContainsKey(descMapID)) { MapPath mapPath = new MapPath(); mapPath.fDistance = fDistance; mapPath.links = mapPaths; connex.connex.Add(descMapID, mapPath); } }
///////////////////////////////////////////////////////////////////////////////////////////////////////// void BuildMapConnex() { // 创建地图传送点 BuildMapDeliverPoint(); uint[] mapids = m_dicMapDeliver.Keys.ToArray(); for (int i = 0; i < mapids.Length; ++i) { MapConnex connex = new MapConnex(); connex.mapid = mapids[i]; for (int j = 0; j < mapids.Length; ++j) { if (j == i) { continue; } List <uint> map = null; float fDistance = 0.0f; if (!FindMapConnex(mapids[i], mapids[j], ref fDistance, out map)) { //Engine.Utility.Log.Error("找不到地图{0}到{1}通路", mapids[i], mapids[j]); continue; } MapPath mp = new MapPath(); mp.fDistance = fDistance; mp.links = map; connex.mapid = mapids[j]; connex.connex.Add(mapids[j], mp); } m_dicMapConnex.Add(mapids[i], connex); } }