示例#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);
                }
            });
        }
        private void OnBeginCollision(ICollisionInfo2D contact)
        {
            // Against floor
            if ((contact.ColliderB.CollisionCategories
                 & ColliderCategory2D.Cat3) == ColliderCategory2D.Cat3)
            {
                return;
            }
            else
            {
                var relativeVelocity  = contact.ColliderA.RigidBody.LinearVelocity - contact.ColliderB.RigidBody.LinearVelocity;
                var velocityMagnitude = relativeVelocity.Length();

                float damageMagnitude = 0;

                // Against other breakable
                if ((contact.ColliderB.CollisionCategories & ColliderCategory2D.Cat2) == ColliderCategory2D.Cat2)
                {
                    damageMagnitude = BREAKABLETOBREAKABLEDAMAGEMAGNITUDE;
                }
                // Against player
                else
                {
                    damageMagnitude = PLAYERTOBREAKABLEDAMAGEMAGNITUDE;
                }

                var totalDamage = velocityMagnitude * damageMagnitude;

                this.Hit(totalDamage);
            }
        }
        private void OnBeginCollision(ICollisionInfo2D contact)
        {
            // Against gem
            if ((contact.ColliderB.CollisionCategories
                 & ColliderCategory2D.Cat5) == ColliderCategory2D.Cat5)
            {
                return;
            }
            else
            {
                contact.IsEnabled = false;

                this.scene.EntityManager.Remove(this.Owner);

                this.scene.Score.Gems += 1;
            }
        }
 private void OnEndCollision(ICollisionInfo2D contact)
 {
 }
示例#5
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);
                    //}
                }
            });
        }
 private void Collider_LeftEndCollision(ICollisionInfo2D contact)
 {
     this.leftCollided = false;
 }
 private void Collider_LeftBeginCollision(ICollisionInfo2D contact)
 {
     this.leftCollided = true;
 }
 private void Collider_BodyBeginCollision(ICollisionInfo2D contact)
 {
     this.gameOver = true;
 }
 private void Collider_RightEndCollision(ICollisionInfo2D contact)
 {
     this.rightCollided = false;
 }
示例#10
0
 private void Collider_RightBeginCollision(ICollisionInfo2D contact)
 {
     this.rightCollided = true;
 }