Author: Murii
function QuadTree:createCell(p, r, x, y, s)
Creates new cell
function QuadTree:destroyCell(c)
Destroys existing cell
function QuadTree:getChildCount(c)
Returns number of child cells
function QuadTree:hasChildren(c)
Returns true if cell has child cells
function QuadTree:fitsInCell(c, x, y, s)
Returns true if object fits entirely inside cell
function QuadTree:getDirection(c, x, y)
Returns child cell direction and offset
function QuadTree:getCell(c, x, y, s)
Returns cell which fits an object of given size
creates the cell if necessary
function QuadTree:selectCellAll(root, dest)
Select all objects in a cell
function QuadTree:selectCell(root, dest, x, y, hw, hh)
Select objects in range
function QuadTree:trimBottom(c)
Trim empty cells from bottom up
function QuadTree:trimTop()
Trim the top of the quadtree deleting
root nodes if they only have a single child
function QuadTree:insert(object, x, y, hw, hh)
Insert new object
function QuadTree:remove(object)
Remove object
function QuadTree:select(dest, x, y, hw, hh)
Select objects in range
function QuadTree:selectAABB(dest, l, t, r, b)
Select objects in range
function QuadTree:selectAll(dest, x, y, hw, hh)
Selects all objects