private void PaintQuadtree <T> (IQuadtree <T> tree) { Vector2 center = new Vector2(tree.Region.center.x, tree.Region.center.y); if (tree.IsLeaf) { Gizmos.color = Color.green; Vector2 size = new Vector2( tree.Region.halfRegionSize.x * 2f, tree.Region.halfRegionSize.y * 2f ); if (paintQuadtreeDepths) { Handles.Label(center, tree.Depth.ToString()); } Gizmos.DrawWireCube(center, size); } else { for (QQuadrant quadrant = QQuadrant.NorthEast; quadrant < QQuadrant.NumberOfQuadrants; ++quadrant) { PaintQuadtree(tree.GetChild(quadrant)); } } }
/// <summary> /// Collision Detector /// </summary> /// <param name="_em">Reference to Entity Manager</param> /// <param name="_screenSize">Size of game viewport</param> public Collision_Manager(IEntity_Manager _em) { mCollidables = new Dictionary <int, ICollidable>(); mEntityManager = _em; mQuadtree = new Quadtree(0, new Rectangle(Global.Camera.Position.ToPoint(), new Point(Global.Camera.ViewPortWidth, Global.Camera.ViewPortHeight))); //mQuadtree = new Quadtree(0, new Rectangle(new Point (0,0), new Point(5000,5000))); }
private void CreateQuadtree() { QVector2D origin = new QVector2D(quadtreeOrigin.x, quadtreeOrigin.y); QVector2D halfSize = new QVector2D(quadtreeHalfSize.x, quadtreeHalfSize.y); QRegion region = new QRegion(origin, halfSize); switch (quadtreeType) { case QuadtreeType.RegionQuadtree: quadtree = new RegionQuadtree <byte> (quadtreeMaxDepth, region, RED); break; case QuadtreeType.PointQuadtree: quadtree = new PointQuadtree <byte> (quadtreeMaxDepth, region); break; case QuadtreeType.PointRegionQuadtree: quadtree = new PointRegionQuadtree <byte> (quadtreeMaxDepth, quadtreeBucketSize, region); break; } }