Explorar o código

Added collision point in world space to 2D physics

Ivan Safrin %!s(int64=14) %!d(string=hai) anos
pai
achega
b92961be84

+ 7 - 1
Modules/Contents/2DPhysics/Include/PolyPhysicsScreen.h

@@ -76,9 +76,15 @@ class _PolyExport PhysicsScreenEvent : public Event {
 		Vector2 worldCollisionNormal;
 		Vector2 worldCollisionNormal;
 		
 		
 		/**
 		/**
-		* Collision point
+		* Collision point in local space
 		*/			
 		*/			
 		Vector2 localCollisionPoint;
 		Vector2 localCollisionPoint;
+
+		/**
+		* Collision point in world space
+		*/			
+		Vector2 worldCollisionPoint;
+
 			
 			
 		/**
 		/**
 		* Strength of the collision impact.
 		* Strength of the collision impact.

+ 10 - 4
Modules/Contents/2DPhysics/Source/PolyPhysicsScreen.cpp

@@ -68,8 +68,11 @@ void PhysicsScreen::BeginContact (b2Contact *contact) {
 	newEvent->worldCollisionNormal.x = w_nor.x;
 	newEvent->worldCollisionNormal.x = w_nor.x;
 	newEvent->worldCollisionNormal.y = w_nor.y;	
 	newEvent->worldCollisionNormal.y = w_nor.y;	
 
 
-	newEvent->localCollisionPoint.x = point.x;
-	newEvent->localCollisionPoint.y = point.y;	
+	newEvent->localCollisionPoint.x = point.x * worldScale;
+	newEvent->localCollisionPoint.y = point.y * worldScale;	
+	
+	newEvent->worldCollisionPoint.x = w_manifold.points[0].x * worldScale;
+	newEvent->worldCollisionPoint.y = w_manifold.points[0].y * worldScale;
 	
 	
 	newEvent->impactStrength = 0;
 	newEvent->impactStrength = 0;
 	newEvent->frictionStrength = 0;
 	newEvent->frictionStrength = 0;
@@ -96,8 +99,11 @@ void PhysicsScreen::PostSolve(b2Contact* contact, const b2ContactImpulse* impuls
 	newEvent->worldCollisionNormal.x = w_nor.x;
 	newEvent->worldCollisionNormal.x = w_nor.x;
 	newEvent->worldCollisionNormal.y = w_nor.y;	
 	newEvent->worldCollisionNormal.y = w_nor.y;	
 
 
-	newEvent->localCollisionPoint.x = point.x;
-	newEvent->localCollisionPoint.y = point.y;	
+	newEvent->localCollisionPoint.x = point.x * worldScale;
+	newEvent->localCollisionPoint.y = point.y * worldScale;	
+	newEvent->worldCollisionPoint.x = w_manifold.points[0].x * worldScale;
+	newEvent->worldCollisionPoint.y = w_manifold.points[0].y * worldScale;
+	
 	
 	
 	newEvent->impactStrength = 0;
 	newEvent->impactStrength = 0;
 	newEvent->frictionStrength = 0;
 	newEvent->frictionStrength = 0;