Пример #1
0
        private void HandleCollisionEvent(CollisionEvent collisionEvent, Box2DX.Dynamics.ContactPoint point)
        {
            ContactListeners.ForEach(contactListener =>
            {
                var isShape1Me      = contactListener == point.Shape1.GetBody().GetUserData();
                var isShape2Me      = contactListener == point.Shape2.GetBody().GetUserData();
                var isNotMyBusiness = !isShape1Me && !isShape2Me;
                if (isNotMyBusiness)
                {
                    return;
                }

                var contactPoint = new ContactPoint
                {
                    Velocity      = point.Velocity,
                    Normal        = (isShape2Me ? -1 : 1) * point.Normal,
                    Position      = point.Position,
                    Restitution   = point.Restitution,
                    Friction      = point.Friction,
                    Id            = point.ID,
                    MyShape       = isShape1Me ? point.Shape1 : point.Shape2,
                    OppositeShape = isShape1Me ? point.Shape2 : point.Shape1,
                    Separation    = point.Separation,
                };

                switch (collisionEvent)
                {
                case CollisionEvent.Before:
                    contactListener.OnCollisionBefore(contactPoint);
                    break;

                case CollisionEvent.After:
                    contactListener.OnCollisionAfter(contactPoint);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(collisionEvent), collisionEvent, null);
                }
            });
        }
Пример #2
0
        public override void Remove(Box2DX.Dynamics.ContactPoint point)
        {
            base.Remove(point);

            HandleCollisionEvent(CollisionEvent.After, point);
        }
Пример #3
0
        public override void Add(Box2DX.Dynamics.ContactPoint point)
        {
            base.Add(point);

            HandleCollisionEvent(CollisionEvent.Before, point);
        }