public class PointQuadTree<T extends CollisionObject> extends java.lang.Object implements QuadTree<T>
| Modifier and Type | Field and Description |
|---|---|
static Color |
BOUNDS_COLOR |
static float |
DEFAULT_MINIMUM_QUAD_SIZE |
static Color |
ELEMENT_COLOR |
protected int |
elementLimitPerQuad |
protected org.mini2Dx.gdx.utils.IntIntMap |
elementsToQuads |
static int |
INITIAL_QUAD_ELEMENTS_POOL_SIZE |
protected org.mini2Dx.gdx.utils.Array<Quad> |
leaves |
protected float |
minimumQuadHeight |
protected float |
minimumQuadWidth |
protected org.mini2Dx.gdx.utils.Array<Quad> |
processQueue |
static Color |
QUAD_COLOR |
protected FreeArray<QuadElements<T>> |
quadElements |
protected org.mini2Dx.gdx.utils.Queue<QuadElements<T>> |
quadElementsPool |
protected FreeArray<Quad> |
quads |
protected Quad |
rootQuad |
| Constructor and Description |
|---|
PointQuadTree(float minimumQuadWidth,
float minimumQuadHeight,
int elementLimitPerQuad,
float x,
float y,
float width,
float height)
Constructs a
PointQuadTree with a specified minimum quad size,
element limit and watermark |
PointQuadTree(int elementLimitPerQuad,
float x,
float y,
float width,
float height)
Constructs a
PointQuadTree with a specified element limit and no
merging watermark. |
| Modifier and Type | Method and Description |
|---|---|
boolean |
add(T element)
Adds an element to this
QuadTree |
void |
addAll(org.mini2Dx.gdx.utils.Array<T> elementsToAdd)
Adds all element to this
QuadTree. |
protected void |
addElementsContainedInArea(Quad quad,
org.mini2Dx.gdx.utils.Array<T> result,
Rectangle area,
boolean allElements) |
protected void |
addElementsContainingPoint(Quad quad,
org.mini2Dx.gdx.utils.Array<T> result,
Point point) |
protected void |
addElementsIntersectingLineSegment(Quad quad,
org.mini2Dx.gdx.utils.Array<T> result,
LineSegment lineSegment) |
protected void |
addElementsOverlappingArea(Quad quad,
org.mini2Dx.gdx.utils.Array<T> result,
Rectangle area,
boolean allElements) |
protected void |
addElementsOverlappingAreaIgnoringEdges(Quad quad,
org.mini2Dx.gdx.utils.Array<T> result,
Rectangle area,
boolean allElements) |
protected boolean |
addToQuad(Quad quad,
T element) |
protected QuadElements<T> |
allocateQuadElements() |
protected boolean |
belongsToQuad(Quad quad,
T element) |
boolean |
cleanup() |
void |
clear()
Same a
CollisionDetection.removeAll(Array) except the results are not stored |
boolean |
contains(T element)
Checks if an element is added to the quad tree
|
void |
debugRender(Graphics g) |
protected void |
debugRender(Graphics g,
Quad quad) |
protected Quad |
findQuad(Quad startQuad,
T element,
boolean updateBounds) |
protected Quad |
findQuad(Quad startQuad,
T element,
float x,
float y,
boolean updateBounds) |
protected Quad |
findQuad(T element,
float x,
float y,
boolean updateBounds) |
int |
getElementLimitPerQuad() |
org.mini2Dx.gdx.utils.Array<T> |
getElements() |
void |
getElements(org.mini2Dx.gdx.utils.Array<T> result) |
void |
getElements(QuadTreeInspector<T> inspector) |
void |
getElementsContainedInArea(org.mini2Dx.gdx.utils.Array<T> result,
Rectangle area) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsContainedInArea(Rectangle area) |
void |
getElementsContainingArea(org.mini2Dx.gdx.utils.Array<T> result,
Rectangle area) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsContainingArea(Rectangle area) |
void |
getElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result,
Point point) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsContainingPoint(Point point) |
void |
getElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result,
LineSegment lineSegment) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsIntersectingLineSegment(LineSegment lineSegment) |
void |
getElementsOverlappingArea(org.mini2Dx.gdx.utils.Array<T> result,
Circle area) |
void |
getElementsOverlappingArea(org.mini2Dx.gdx.utils.Array<T> result,
Rectangle area) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsOverlappingArea(Circle area) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsOverlappingArea(Rectangle area) |
void |
getElementsOverlappingAreaIgnoringEdges(org.mini2Dx.gdx.utils.Array<T> result,
Rectangle area) |
org.mini2Dx.gdx.utils.Array<T> |
getElementsOverlappingAreaIgnoringEdges(Rectangle area) |
float |
getMinimumQuadHeight() |
float |
getMinimumQuadWidth() |
Quad |
getQuad(T element)
Returns the Quad that the specified element belongs to
|
int |
getTotalElements() |
int |
getTotalQuads() |
protected void |
initBounds(Quad quad,
T element) |
void |
positionChanged(T moved) |
protected void |
releaseQuadElements(QuadElements<T> elements) |
boolean |
remove(T element)
Removes an element from this
QuadTree |
void |
removeAll(org.mini2Dx.gdx.utils.Array<T> elementsToRemove)
Removes all elements in this
QuadTree and stores them in an Array |
protected boolean |
removeFromQuad(Quad quad,
T element) |
protected boolean |
updateBounds(Quad quad,
T element) |
public static int INITIAL_QUAD_ELEMENTS_POOL_SIZE
public static float DEFAULT_MINIMUM_QUAD_SIZE
public static Color QUAD_COLOR
public static Color BOUNDS_COLOR
public static Color ELEMENT_COLOR
protected final org.mini2Dx.gdx.utils.Queue<QuadElements<T extends CollisionObject>> quadElementsPool
protected final org.mini2Dx.gdx.utils.IntIntMap elementsToQuads
protected final FreeArray<QuadElements<T extends CollisionObject>> quadElements
protected final Quad rootQuad
protected final int elementLimitPerQuad
protected final float minimumQuadWidth
protected final float minimumQuadHeight
protected final org.mini2Dx.gdx.utils.Array<Quad> processQueue
protected final org.mini2Dx.gdx.utils.Array<Quad> leaves
public PointQuadTree(int elementLimitPerQuad,
float x,
float y,
float width,
float height)
PointQuadTree with a specified element limit and no
merging watermark. As elements are removed, small sized child
PointQuadTrees will not be merged back together.elementLimitPerQuad - The maximum number of elements in a quad before it is split
into 4 child PointQuadTreesx - The x coordinate of the PointQuadTreey - The y coordiante of the PointQuadTreewidth - The width of the PointQuadTreeheight - The height of the PointQuadTreepublic PointQuadTree(float minimumQuadWidth,
float minimumQuadHeight,
int elementLimitPerQuad,
float x,
float y,
float width,
float height)
PointQuadTree with a specified minimum quad size,
element limit and watermarkminimumQuadWidth - The minimum width of quads. Quads will not subdivide smaller
than this width.minimumQuadHeight - The minimum height of quads. Quads will not subdivide smaller
than this height.elementLimitPerQuad - The maximum number of elements in a quad before it is split
into 4 child PointQuadTreesx - The x coordinate of the PointQuadTreey - The y coordiante of the PointQuadTreewidth - The width of the PointQuadTreeheight - The height of the PointQuadTreeprotected QuadElements<T> allocateQuadElements()
protected void releaseQuadElements(QuadElements<T> elements)
public boolean cleanup()
public void debugRender(Graphics g)
debugRender in interface CollisionDetection<T extends CollisionObject>public void addAll(org.mini2Dx.gdx.utils.Array<T> elementsToAdd)
CollisionDetectionQuadTree. Note that if an element exists outside of this QuadTree's bounds, it will not be addedaddAll in interface CollisionDetection<T extends CollisionObject>elementsToAdd - The elements to addpublic boolean add(T element)
CollisionDetectionQuadTreeadd in interface CollisionDetection<T extends CollisionObject>element - The element to addpublic void removeAll(org.mini2Dx.gdx.utils.Array<T> elementsToRemove)
CollisionDetectionQuadTree and stores them in an ArrayremoveAll in interface CollisionDetection<T extends CollisionObject>elementsToRemove - After executing, this Array will contain all the removed elementspublic boolean remove(T element)
CollisionDetectionQuadTreeremove in interface CollisionDetection<T extends CollisionObject>element - The element to removepublic void clear()
CollisionDetectionCollisionDetection.removeAll(Array) except the results are not storedclear in interface CollisionDetection<T extends CollisionObject>protected void addElementsOverlappingArea(Quad quad, org.mini2Dx.gdx.utils.Array<T> result, Rectangle area, boolean allElements)
protected void addElementsOverlappingAreaIgnoringEdges(Quad quad, org.mini2Dx.gdx.utils.Array<T> result, Rectangle area, boolean allElements)
protected void addElementsContainedInArea(Quad quad, org.mini2Dx.gdx.utils.Array<T> result, Rectangle area, boolean allElements)
protected void addElementsIntersectingLineSegment(Quad quad, org.mini2Dx.gdx.utils.Array<T> result, LineSegment lineSegment)
protected void addElementsContainingPoint(Quad quad, org.mini2Dx.gdx.utils.Array<T> result, Point point)
public org.mini2Dx.gdx.utils.Array<T> getElementsOverlappingArea(Rectangle area)
getElementsOverlappingArea in interface CollisionDetection<T extends CollisionObject>getElementsOverlappingArea in interface QuadTree<T extends CollisionObject>public void getElementsOverlappingArea(org.mini2Dx.gdx.utils.Array<T> result, Rectangle area)
getElementsOverlappingArea in interface CollisionDetection<T extends CollisionObject>getElementsOverlappingArea in interface QuadTree<T extends CollisionObject>public org.mini2Dx.gdx.utils.Array<T> getElementsOverlappingArea(Circle area)
getElementsOverlappingArea in interface CollisionDetection<T extends CollisionObject>public void getElementsOverlappingArea(org.mini2Dx.gdx.utils.Array<T> result, Circle area)
getElementsOverlappingArea in interface CollisionDetection<T extends CollisionObject>public org.mini2Dx.gdx.utils.Array<T> getElementsOverlappingAreaIgnoringEdges(Rectangle area)
getElementsOverlappingAreaIgnoringEdges in interface CollisionDetection<T extends CollisionObject>getElementsOverlappingAreaIgnoringEdges in interface QuadTree<T extends CollisionObject>public void getElementsOverlappingAreaIgnoringEdges(org.mini2Dx.gdx.utils.Array<T> result, Rectangle area)
getElementsOverlappingAreaIgnoringEdges in interface CollisionDetection<T extends CollisionObject>getElementsOverlappingAreaIgnoringEdges in interface QuadTree<T extends CollisionObject>public org.mini2Dx.gdx.utils.Array<T> getElementsContainedInArea(Rectangle area)
getElementsContainedInArea in interface CollisionDetection<T extends CollisionObject>public void getElementsContainedInArea(org.mini2Dx.gdx.utils.Array<T> result, Rectangle area)
getElementsContainedInArea in interface CollisionDetection<T extends CollisionObject>public void getElements(QuadTreeInspector<T> inspector)
getElements in interface QuadTree<T extends CollisionObject>public org.mini2Dx.gdx.utils.Array<T> getElementsContainingArea(Rectangle area)
getElementsContainingArea in interface CollisionDetection<T extends CollisionObject>getElementsContainingArea in interface QuadTree<T extends CollisionObject>public void getElementsContainingArea(org.mini2Dx.gdx.utils.Array<T> result, Rectangle area)
getElementsContainingArea in interface CollisionDetection<T extends CollisionObject>getElementsContainingArea in interface QuadTree<T extends CollisionObject>public org.mini2Dx.gdx.utils.Array<T> getElementsIntersectingLineSegment(LineSegment lineSegment)
getElementsIntersectingLineSegment in interface CollisionDetection<T extends CollisionObject>getElementsIntersectingLineSegment in interface QuadTree<T extends CollisionObject>public void getElementsIntersectingLineSegment(org.mini2Dx.gdx.utils.Array<T> result, LineSegment lineSegment)
getElementsIntersectingLineSegment in interface CollisionDetection<T extends CollisionObject>getElementsIntersectingLineSegment in interface QuadTree<T extends CollisionObject>public org.mini2Dx.gdx.utils.Array<T> getElementsContainingPoint(Point point)
getElementsContainingPoint in interface CollisionDetection<T extends CollisionObject>getElementsContainingPoint in interface QuadTree<T extends CollisionObject>public void getElementsContainingPoint(org.mini2Dx.gdx.utils.Array<T> result, Point point)
getElementsContainingPoint in interface CollisionDetection<T extends CollisionObject>getElementsContainingPoint in interface QuadTree<T extends CollisionObject>public org.mini2Dx.gdx.utils.Array<T> getElements()
getElements in interface CollisionDetection<T extends CollisionObject>public void getElements(org.mini2Dx.gdx.utils.Array<T> result)
getElements in interface CollisionDetection<T extends CollisionObject>public void positionChanged(T moved)
positionChanged in interface PositionChangeListener<T extends CollisionObject>public Quad getQuad(T element)
element - The element to search forpublic boolean contains(T element)
element - The element to checkpublic int getElementLimitPerQuad()
getElementLimitPerQuad in interface QuadTree<T extends CollisionObject>public float getMinimumQuadWidth()
getMinimumQuadWidth in interface QuadTree<T extends CollisionObject>public float getMinimumQuadHeight()
getMinimumQuadHeight in interface QuadTree<T extends CollisionObject>public int getTotalQuads()
getTotalQuads in interface QuadTree<T extends CollisionObject>public int getTotalElements()
getTotalElements in interface CollisionDetection<T extends CollisionObject>getTotalElements in interface QuadTree<T extends CollisionObject>