Пример #1
0
        private CollisionManager()
        {
            this.currentDrawType = DRAW_TYPE.DRAW_ALL;
            this.bodyGlobalSet = new XboxHashSet<CollisionBody>();
            this.bodyGroupList = new List<CollisionBody>();
            this.bodyGroupHashSet = new XboxHashSet<CollisionBody>();
            this.primitiveBatch = new PrimitiveBatch(Program.GAME.GraphicsDevice);
            font = Program.GAME.Content.Load<SpriteFont>("MenuFont");

            int poolSize = (int)Math.Pow(4, nodeDepth - 2);

            this.nodeArrayPool = new List<QuadTreeNode[]>(poolSize);
            for (int i = 0; i < poolSize; i++)
            {
                QuadTreeNode[] array = new QuadTreeNode[4];
                array[0] = new QuadTreeNode();
                array[1] = new QuadTreeNode();
                array[2] = new QuadTreeNode();
                array[3] = new QuadTreeNode();
                this.nodeArrayPool.Add(array);
            }

            this.bodySetPool = new List<XboxHashSet<CollisionBody>>(poolSize);
            for (int i = 0; i < poolSize; i++)
            {
                this.bodySetPool.Add(new XboxHashSet<CollisionBody>(maxNodeCapacity + 1));
            }
        }
Пример #2
0
        public QuadTreeNode[] obtainNodeArray()
        {
            if (this.nodeArrayPool.Count > 0)
            {
                QuadTreeNode[] array = this.nodeArrayPool[0];
                nodeArrayPool.RemoveAt(0);
                return array;
            }
            else
            {
                QuadTreeNode[] array = null;
                for (int i = 0; i < 10; i++)
                {
                    array = new QuadTreeNode[4];
                    array[0] = new QuadTreeNode();
                    array[1] = new QuadTreeNode();
                    array[2] = new QuadTreeNode();
                    array[3] = new QuadTreeNode();

                    if (i < 9) nodeArrayPool.Add(array);
                }
                return array;
            }
        }
Пример #3
0
 public void redeemNodeArray(QuadTreeNode[] array)
 {
     this.nodeArrayPool.Add(array);
 }
Пример #4
0
        /// <summary>
        /// Agrega un CollisionBody tanto a la lista global de bodies
        /// como a su capa respectiva
        /// </summary>
        /// <param name="body">CollisionBody a agregar</param>
        public void addContainer(CollisionBody body)
        {
            if (!this.layersRoots.ContainsKey(body.Layer))
            {
                QuadTreeNode root = new QuadTreeNode();
                root.reset(/*null, */layerX, layerY, layerWidth, layerHeight, 1, this.maxNodeCapacity, this.nodeDepth);
                this.layersRoots.Add(body.Layer, root);
            }

            float minX = 0, minY = 0, maxX = 0, maxY = 0;
            body.BuildAABB(out minX, out minY, out maxX, out maxY);

            this.layersRoots[body.Layer].AddObject(body, minX, minY, maxX, maxY);
            this.bodyGlobalSet.Add(body);
        }