Beispiel #1
0
	private void AddItem(GridMapItem item, ref GridMapItem head)
	{
		item.next = head;
		if (head != null) head.prev = item;

		head = item;
	}
Beispiel #2
0
	private void RemoveItem(GridMapItem item)
	{
		if (item.bin > 0)
		{
			RemoveItem(item, ref bins[item.bin]);
		}
		else 
		{
			RemoveItem(item, ref outBin);
		}
	}
Beispiel #3
0
	private void AddItem(GridMapItem item)
	{
		if (item.bin > 0)
		{
			AddItem(item, ref bins[item.bin]);
		}
		else 
		{
			AddItem(item, ref outBin);
		}
	}
Beispiel #4
0
	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;
	}
Beispiel #5
0
	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;
	}
Beispiel #6
0
	public virtual void Reset()
	{
		gridMapItem = gridMap.CreateItem(position, this);

		speed = 0.0f;
		radius = 0.5f;

		maxSpeed = 2.0f;
		maxForce = 8.0f;

		smoothedAcceleration = Vector2.zero;
	}
Beispiel #7
0
	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;
	}
Beispiel #8
0
	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);
		}
	}