Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public void AddQuery(PFQuery qr, bool bClear)
 {
     lock (this)
     {
         if (bClear)
         {
             Querys.Clear();
         }
         Querys.Enqueue(qr);
     }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }