예제 #1
0
 //
 public MPAStarPath(PillarData data)
 {
     mData        = data;
     mDetail      = 1 << data.setting.subdivision;
     mMaxDeatailX = data.setting.maxX * mDetail;
     mMaxDeatailZ = data.setting.maxZ * mDetail;
     mVolumeSizeX = data.setting.maxX * GridX;
     mVolumeSizeZ = data.setting.maxZ * GridZ;
     mDetailGridX = GridX / mDetail;
     mDetailGridZ = GridZ / mDetail;
     //each pillar height slice max to 64
     mNeighbourCache = new MPNeigbours((mDetail + 1) * 4 * SliceAccessor.MaxHeightSliceCount);
     MPPathNodePool.AllocatePool(128);
 }
예제 #2
0
        public void Add(uint header, int dx, int dz, uint ih, int sub, int maxSub, float centerx, float centerz, ulong val)
        {
            uint uid = header + ih;

            if (PathNodeCache != null && PathNodeCache.ContainsKey(uid))
            {
                Add(PathNodeCache[uid]);
            }
            else
            {
                MPPathNode node = MPPathNodePool.Pop(header, dx, dz, ih, sub, maxSub, centerx, centerz, val);
                Add(node);
                //add to mem pool
                if (PathNodeCache != null)
                {
                    PathNodeCache.Add(node.UID, node);
                }
            }
        }