// 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); }
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); } } }