QuadTree *AllocTree(LRect rect, QuadTree *tree) { var ptr = QuadTreeFactory.AllocQuadTree(); *ptr = new QuadTree(rect, tree); return(ptr); }
private void OnStart() { random = new System.Random(0); _quadTree = QuadTreeFactory.AllocQuadTree(); *_quadTree = new QuadTree(new LRect(LFloat.zero, LFloat.zero, WorldSize.x.ToLFloat(), WorldSize.y.ToLFloat()), BodiesPerNode, MaxSplits); _collisionSystem = new CollisionSystemQuadTree(_quadTree); var tempLst = new List <PhysicsBody>(); RandomMove.border = WorldSize; for (int i = 0; i < MaxBodies; i++) { var body = GameObject.Instantiate <PhysicsBody>(DemoPhysicsBody); body.transform.position = new Vector3( random.Next(0, (int)(WorldSize.x * 1000)) * 0.001f, 0, random.Next(0, (int)(WorldSize.y * 1000)) * 0.001f); if (i % (int)(1 / RandomMovePercent) == 0) { body.gameObject.AddComponent <RandomMove>(); } tempLst.Add(body); } GameObject.Destroy(DemoPhysicsBody.gameObject); //raw 35.43ms 38.52ms 39.05ms //LMath 40.7ms 38.9ms //UnsafeLMath 8.6ms 8.7ms Profiler.BeginSample("QuadInit"); foreach (var body in tempLst) { var config = body.ColliderConfig; foreach (var collider in config.allColliders) { var type = (EShape2D)collider.TypeId; switch (type) { case EShape2D.AABB: { AABB2D *boxPtr = CollisionFactory.AllocAABB(); var shape = ((ShapeWrapAABB)collider).shape; body.RefId = _collisionSystem.AddBody(body, boxPtr, shape.pos, shape.size); body.ColPtr = (Circle *)boxPtr; _quadTree->AddBody(boxPtr); // add body to QuadTree break; } } } } Profiler.EndSample(); }