Example #1
0
        private void Collider_BeginCollision(ICollisionInfo2D contact)
        {
            WaveForegroundTask.Run(() =>
            {
                var colliderA = contact.ColliderA; // Obstacle
                var colliderB = contact.ColliderB; // Arrow

                if (colliderA != null && colliderB != null && colliderA.CollisionCategories == ColliderCategory2D.Cat2)
                {
                    var physicBodyA = colliderA.RigidBody.UserData as RigidBody2D;
                    var physicBodyB = colliderB.RigidBody.UserData as RigidBody2D;

                    Entity obstacle = physicBodyA.Owner;
                    Entity arrow    = physicBodyB.Owner;
                    Transform2D obstacleTransform = obstacle.FindComponent <Transform2D>();
                    Transform2D arrowTransform    = arrow.FindComponent <Transform2D>();

                    Vector2 arrowHeadLocalPosition = Vector2.UnitX * 178;
                    Vector2 arrowHeadWorldPosition = Vector2.Transform(arrowHeadLocalPosition, arrowTransform.WorldTransform);
                    Vector2 obstacleLocalPosition  = Vector2.Transform(arrowHeadWorldPosition, obstacleTransform.WorldInverseTransform);


                    WeldJoint2D distance = new WeldJoint2D()
                    {
                        ConnectedEntityPath = obstacle.EntityPath,
                        Anchor          = arrowHeadLocalPosition,
                        ConnectedAnchor = obstacleLocalPosition,
                        ReferenceAngle  = obstacleTransform.LocalRotation - arrowTransform.LocalRotation,
                    };
                    arrow.AddComponent(distance);
                }
            });
        }
Example #2
0
        private void Collider_BeginCollision(ICollisionInfo2D contact)
        {
            WaveServices.Dispatcher.RunOnWaveThread(() =>
            {
                var colliderA = contact.ColliderA; // Obstacle
                var colliderB = contact.ColliderB; // Arrow

                if (colliderA != null && colliderB != null && colliderA.CollisionCategories == ColliderCategory2D.Cat2)
                {
                    var physicBodyA = colliderA.RigidBody.UserData as RigidBody2D;
                    var physicBodyB = colliderB.RigidBody.UserData as RigidBody2D;
                    //if (physicBodyB.LinearVelocity.Length() > 250.0f)
                    //{
                        Entity obstacle = physicBodyA.Owner;
                        Entity arrow = physicBodyB.Owner;
                        Transform2D obstacleTransform = obstacle.FindComponent<Transform2D>();
                        Transform2D arrowTransform = arrow.FindComponent<Transform2D>();

                        Vector2 arrowHeadLocalPosition = Vector2.UnitX * 178;
                        Vector2 arrowHeadWorldPosition = Vector2.Transform(arrowHeadLocalPosition, arrowTransform.WorldTransform);
                        Vector2 obstacleLocalPosition = Vector2.Transform(arrowHeadWorldPosition, obstacleTransform.WorldInverseTransform);

                        WeldJoint2D distance = new WeldJoint2D()
                        {
                            ConnectedEntityPath = obstacle.EntityPath,
                            Anchor = arrowHeadLocalPosition,
                            ConnectedAnchor = obstacleLocalPosition,
                            ReferenceAngle = obstacleTransform.LocalRotation - arrowTransform.LocalRotation,
                        };
                        arrow.AddComponent(distance);
                    //}
                }
            });
        }