public void QueryGlobalMapPath(Iocp.TcpConnect connect, UInt16 serialId, ulong planesId, ulong mapSourceId, ulong roleId, SlimDX.Vector3 from, SlimDX.Vector3 to, bool bClear) { PFPlanes planes; if (PlanesDic.TryGetValue(planesId, out planes) == false) { planes = new PFPlanes(); planes.PlanesId = planesId; PlanesDic.Add(planesId, planes); var thread = SelectPFThread(); thread.PushPlanes(planes); } PFMap map = planes.GetMap(mapSourceId); PFUnit unit = map.GetUnit(roleId); PFQuery query = new PFQuery(); query.FromPt = from; query.ToPt = to; query.Connect = connect; query.SerialId = serialId; unit.AddQuery(query, bClear); }
public void AddQuery(PFQuery qr, bool bClear) { lock (this) { if (bClear) { Querys.Clear(); } Querys.Enqueue(qr); } }
private void FindPath(PFMap map, PFQuery qr) { //这里找到的路径想办法通知给调用着,通常应该是一个RPC的return var pathPoints = new List <SlimDX.Vector2>(); //var pathFindResult = map.NavigationProcess.FindPath(qr.FromPt.X, qr.FromPt.Z, qr.ToPt.X, qr.ToPt.Z, 20, map.NavigationData, map.PathFindContext, ref pathPoints); RPC.PackageWriter retPkg = new RPC.PackageWriter(); //retPkg.Write((Byte)pathFindResult); retPkg.Write(pathPoints.Count); foreach (var pt in pathPoints) { retPkg.Write(pt); } retPkg.DoReturnCommand2(qr.Connect, qr.SerialId); }
public void Tick(PFMap map) { if (Querys.Count == 0) { return; } PFQuery qr = null; lock (this) { qr = Querys.Dequeue(); } if (qr == null) { return; } //这里做真正的寻路处理 FindPath(map, qr); }