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) { }
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; }
private void Collider_RightBeginCollision(ICollisionInfo2D contact) { this.rightCollided = true; }