private void AddItem(GridMapItem item, ref GridMapItem head) { item.next = head; if (head != null) head.prev = item; head = item; }
private void RemoveItem(GridMapItem item) { if (item.bin > 0) { RemoveItem(item, ref bins[item.bin]); } else { RemoveItem(item, ref outBin); } }
private void AddItem(GridMapItem item) { if (item.bin > 0) { AddItem(item, ref bins[item.bin]); } else { AddItem(item, ref outBin); } }
public GridMapItem CreateItem(Vector2 position, object obj) { int bin = GetBinIndex(position); GridMapItem item = new GridMapItem(); item.obj = obj; item.position = position; item.bin = bin; item.next = item.prev = null; AddItem(item); return item; }
public GridMap(Vector2 _min, Vector2 _max, float _gridSize) { min = _min; max = _max; gridSize = _gridSize; Vector2 size = max - min; w = Mathf.CeilToInt(size.x / gridSize); h = Mathf.CeilToInt(size.y / gridSize); numBins = w * h; bins = new GridMapItem[numBins]; for (int i = 0; i < numBins; i++) bins[i] = null; outBin = null; }
public virtual void Reset() { gridMapItem = gridMap.CreateItem(position, this); speed = 0.0f; radius = 0.5f; maxSpeed = 2.0f; maxForce = 8.0f; smoothedAcceleration = Vector2.zero; }
public void RemoveItem(GridMapItem item, ref GridMapItem head) { if (item == head) head = item.next; else item.prev.next = item.next; if (item.next != null) item.next.prev = item.prev; }
public void UpdateItemPosition(GridMapItem item, Vector2 position) { item.position = position; int newBin = GetBinIndex(position); if (newBin != item.bin) { RemoveItem(item); item.bin = newBin; item.prev = item.next = null; AddItem(item); } }