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 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); //} } }); }