Ejemplo n.º 1
0
        public BroadPhaseTest()
        {
            BroadPhase.IsValidate = true;

            //srand(888);

            AABB worldAABB = new AABB();

            worldAABB.LowerBound.Set(-5.0f * k_extent, -5.0f * k_extent);
            worldAABB.UpperBound.Set(5.0f * k_extent, 5.0f * k_extent);

            _overlapCount      = 0;
            _overlapCountExact = 0;
            _callback._test    = this;

            _broadPhase = new BroadPhase(worldAABB, _callback);

            for (int i = 0; i < k_actorCount; i++)
            {
                _overlaps[i] = new bool[k_actorCount];
            }
            for (int i = 0; i < k_actorCount; i++)
            {
                for (int j = 0; j < k_actorCount; j++)
                {
                    _overlaps[i][j] = false;
                }
            }

            for (int i = 0; i < k_actorCount; i++)
            {
                _actors[i] = new Actor();
            }

            for (int i = 0; i < k_actorCount; ++i)
            {
                bool s = false;
                if (i == 91)
                {
                    s = true;
                }
                Actor actor = _actors[i];
                GetRandomAABB(ref actor.aabb);
                //actor->aabb.minVertex.Set(0.0f, 0.0f);
                //actor->aabb.maxVertex.Set(k_width, k_width);
                actor.proxyId      = _broadPhase.CreateProxy(actor.aabb, actor);
                actor.overlapCount = 0;
                _broadPhase.Validate();
            }

            _automated = true;
            _stepCount = 0;
        }
Ejemplo n.º 2
0
        // These support body activation/deactivation.
        public void CreateProxies(BroadPhase broadPhase, Transform xf)
        {
            Debug.Assert(ProxyCount == 0);

            // Create proxies in the broad-phase.
            ProxyCount = Shape.ChildCount;

            for (int i = 0; i < ProxyCount; ++i)
            {
                FixtureProxy proxy = Proxies[i];
                Shape.ComputeAABB(proxy.AABB, xf, i);
                proxy.ProxyId    = broadPhase.CreateProxy(proxy.AABB, proxy);
                proxy.Fixture    = this;
                proxy.ChildIndex = i;
            }
        }
Ejemplo n.º 3
0
        private void CreateProxy()
        {
            Random rnd = new Random(888);

            for (int i = 0; i < k_actorCount; ++i)
            {
                int   j     = (rnd.Next() % k_actorCount);
                Actor actor = _actors[j];
                if (actor.proxyId == PairManager.NullProxy)
                {
                    actor.overlapCount = 0;
                    GetRandomAABB(ref actor.aabb);
                    actor.proxyId = _broadPhase.CreateProxy(actor.aabb, actor);
                    return;
                }
            }
        }
Ejemplo n.º 4
0
        internal void RefilterProxy(BroadPhase broadPhase, XForm transform)
        {
            if (_proxyId == PairManager.NullProxy)
            {
                return;
            }

            broadPhase.DestroyProxy(_proxyId);

            AABB aabb;

            _shape.ComputeAABB(out aabb, transform);

            bool inRange = broadPhase.InRange(aabb);

            _proxyId = inRange ? broadPhase.CreateProxy(aabb, this) : PairManager.NullProxy;
        }
Ejemplo n.º 5
0
        // These support body activation/deactivation.
        internal void CreateProxies(BroadPhase broadPhase, ref Transform xf)
        {
            Debug.Assert(ProxyCount == 0);

            // Create proxies in the broad-phase.
            ProxyCount = Shape.ChildCount;

            for (int i = 0; i < ProxyCount; ++i)
            {
                FixtureProxy proxy = Proxies[i];
                Shape.ComputeAABB(out proxy.AABB, ref xf, i);
                proxy.Fixture    = this;
                proxy.ChildIndex = i;
                proxy.ProxyId    = broadPhase.CreateProxy(ref proxy.AABB, ref proxy);

                Proxies[i] = proxy;
            }
        }
Ejemplo n.º 6
0
        // We need separation create/destroy functions from the constructor/destructor because
        // the destructor cannot access the allocator or broad-phase (no destructor arguments allowed by C++).
        public void Create(BroadPhase broadPhase, Body body, Transform xf, FixtureDef def)
        {
            UserData    = def.UserData;
            Friction    = def.Friction;
            Restitution = def.Restitution;

            Body  = body;
            _next = null;

            Filter = def.Filter;

            IsSensor = def.IsSensor;

            Shape = def.Shape.Clone();

            Shape.ComputeMass(out _massData, def.Density);

            // Create proxy in the broad-phase.
            Shape.ComputeAABB(out Aabb, ref xf);

            ProxyId = broadPhase.CreateProxy(Aabb, this);
        }
Ejemplo n.º 7
0
        internal void RefilterProxy(BroadPhase broadPhase, Transform Transform)
        {
            if (_proxyId == PairManager.NullProxy)
            {
                return;
            }

            broadPhase.DestroyProxy(_proxyId);

            AABB aabb;

            _shape.ComputeAABB(out aabb, Transform);

            bool inRange = broadPhase.InRange(aabb);

            if (inRange)
            {
                _proxyId = broadPhase.CreateProxy(aabb, this);
            }
            else
            {
                _proxyId = PairManager.NullProxy;
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        ///     Refilters the proxy using the specified broad phase
        /// </summary>
        /// <param name="broadPhase">The broad phase</param>
        /// <param name="transform">The transform</param>
        internal void RefilterProxy(BroadPhase broadPhase, XForm transform)
        {
            if (ProxyId == PairManager.NullProxy)
            {
                return;
            }

            broadPhase.DestroyProxy(ProxyId);

            Aabb aabb;

            Shape.ComputeAabb(out aabb, transform);

            bool inRange = broadPhase.InRange(aabb);

            if (inRange)
            {
                ProxyId = broadPhase.CreateProxy(aabb, this);
            }
            else
            {
                ProxyId = PairManager.NullProxy;
            }
        }
Ejemplo n.º 9
0
        public void Create(BroadPhase broadPhase, Body body, Transform xf, FixtureDef def)
        {
            UserData    = def.UserData;
            Friction    = def.Friction;
            Restitution = def.Restitution;
            Density     = def.Density;

            _body = body;
            _next = null;

            Filter = def.Filter;

            _isSensor = def.IsSensor;

            _type = def.Type;

            // Allocate and initialize the child shape.
            switch (_type)
            {
            case ShapeType.CircleShape:
            {
                CircleShape circle    = new CircleShape();
                CircleDef   circleDef = (CircleDef)def;
                circle._position = circleDef.LocalPosition;
                circle._radius   = circleDef.Radius;
                _shape           = circle;
            }
            break;

            case ShapeType.PolygonShape:
            {
                PolygonShape polygon    = new PolygonShape();
                PolygonDef   polygonDef = (PolygonDef)def;
                polygon.Set(polygonDef.Vertices, polygonDef.VertexCount);
                _shape = polygon;
            }
            break;

            case ShapeType.EdgeShape:
            {
                EdgeShape edge    = new EdgeShape();
                EdgeDef   edgeDef = (EdgeDef)def;
                edge.Set(edgeDef.Vertex1, edgeDef.Vertex2);
                _shape = edge;
            }
            break;

            default:
                Box2DNetDebug.Assert(false);
                break;
            }

            // Create proxy in the broad-phase.
            AABB aabb;

            _shape.ComputeAABB(out aabb, xf);

            bool inRange = broadPhase.InRange(aabb);

            // You are creating a shape outside the world box.
            Box2DNetDebug.Assert(inRange);

            if (inRange)
            {
                _proxyId = broadPhase.CreateProxy(aabb, this);
            }
            else
            {
                _proxyId = PairManager.NullProxy;
            }
        }
Ejemplo n.º 10
0
        // We need separation create/destroy functions from the ructor/destructor because
        // the destructor cannot access the allocator or broad-phase (no destructor arguments allowed by C++).
        internal void Create(BroadPhase broadPhase, Body body, ref XForm xf, FixtureDef def)
        {
            _userData = def.userData;
            _friction = def.friction;
            _restitution = def.restitution;
            _density = def.density;

            _body = body;
            _next = null;

            _filter = def.filter;

            _isSensor = def.isSensor;

            _shape = def.shape.Clone();

            // Create proxy in the broad-phase.
            AABB aabb;
            _shape.ComputeAABB(out aabb, ref xf);

            _proxyId = broadPhase.CreateProxy(ref aabb, this);
        }
        // These support body activation/deactivation.
        internal void CreateProxies(BroadPhase broadPhase, ref Transform xf)
        {
            Debug.Assert(ProxyCount == 0);

            // Create proxies in the broad-phase.
            ProxyCount = Shape.ChildCount;

            for (int i = 0; i < ProxyCount; ++i)
            {
                FixtureProxy proxy = Proxies[i];
                Shape.ComputeAABB(out proxy.AABB, ref xf, i);
                proxy.Fixture = this;
                proxy.ChildIndex = i;
                proxy.ProxyId = broadPhase.CreateProxy(ref proxy.AABB, ref proxy);

                Proxies[i] = proxy;
            }
        }
Ejemplo n.º 12
0
        // These support body activation/deactivation.
	    internal void CreateProxies(BroadPhase broadPhase, ref Transform xf)
        {
            Debug.Assert(_proxyCount == 0);

            // Create proxies in the broad-phase.
            _proxyCount = _shape.GetChildCount();

            for (int i = 0; i < _proxyCount; ++i)
            {
                FixtureProxy proxy = _proxies[i];
                _shape.ComputeAABB(out proxy.aabb, ref xf, i);
                proxy.fixture = this;
                proxy.childIndex = i;
                proxy.proxyId = broadPhase.CreateProxy(ref proxy.aabb, proxy);

                _proxies[i] = proxy;
            }
        }
Ejemplo n.º 13
0
		// These support body activation/deactivation.
		internal void CreateProxies(BroadPhase broadPhase, Transform xf){ //broadPhase was pointer
			Utilities.Assert(m_proxies.Count() == 0);

			// Create proxies in the broad-phase.
			int m_proxyCount = m_shape.GetChildCount();

			for (int i = 0; i < m_proxyCount; ++i) {
				FixtureProxy proxy = new FixtureProxy();
				m_shape.ComputeAABB(out proxy.aabb, xf, i);
				proxy.proxyId = broadPhase.CreateProxy(proxy.aabb, proxy);
				proxy.fixture = this;
				proxy.childIndex = i;
				m_proxies.Add(proxy);
			}
		}
Ejemplo n.º 14
0
        // These support body activation/deactivation.
        internal void CreateProxy(BroadPhase broadPhase, ref Transform xf)
        {
            Debug.Assert(_proxyId == BroadPhase.NullProxy);

            // Create proxy in the broad-phase.
            _shape.ComputeAABB(out _aabb, ref xf);
            _proxyId = broadPhase.CreateProxy(ref _aabb, this);
        }