Exemplo n.º 1
0
        /// <summary>
        /// Pairs of objects that require narrow phase testing.
        /// </summary>
        /// <returns></returns>
        public void CalculateCollisionPairs()
        {
            GridCell        cell;
            BroadphaseProxy proxyA, proxyB;

            _pairs.ClearCache();
            CollisionGlobals.ProxiesInCells = 0;
            for (int i = 0; i < _cells.Length; i++)
            {
                CollisionGlobals.ProxiesInCells += _cells[i].Proxies.Count;
                for (int n = 4; n < neighbourOffset.Length; n++)
                {
                    int ii = neighbourOffset[n] + i;
                    if (ii < 0 || ii > _cells.Length - 1)
                    {
                        continue;
                    }

                    cell = _cells[ii];

                    for (int j = 0; j < cell.Proxies.Count; j++)
                    {
                        proxyA = cell.Proxies[j];
                        for (int k = j + 1; k < cell.Proxies.Count; k++)
                        {
                            proxyB = cell.Proxies[k];
                            if (AABB.TestOverlap(ref proxyA.AABB, ref proxyB.AABB))
                            {
                                _pairs.AddOverlappingPair(proxyA, proxyB);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void CalculateCollisionPairs()
        {
            _pairs.ClearCache();
            for (int i = 0; i < _proxies.Count; i++)
            {
                BroadphaseProxy proxyA = _proxies[i];
                for (int j = i + 1; j < _proxies.Count; j++)
                {
                    BroadphaseProxy proxyB = _proxies[j];

                    if (AABB.TestOverlap(ref proxyA.AABB, ref proxyB.AABB))
                    {
                        _pairs.AddOverlappingPair(proxyA, proxyB);
                    }
                }
            }
        }