|
@@ -21,7 +21,7 @@ void Object2D::explosion( Vertex worldPos, float intensity )
|
|
|
speed += ( position - worldPos ) * intensity;
|
|
|
}
|
|
|
|
|
|
-void Object2D::impuls( Vertex start, Vertex speed )
|
|
|
+void Object2D::impuls( Vertex start, Vertex speed, float strength )
|
|
|
{}
|
|
|
|
|
|
void Object2D::setSpeed( Vertex speed )
|
|
@@ -85,30 +85,32 @@ void Object2D::setCollision( bool handle )
|
|
|
bool Object2D::handleCollision( Object2D *obj )
|
|
|
{
|
|
|
Vertex hp;
|
|
|
- if( istModelInnen( obj, &hp ) )
|
|
|
+ if( istModelInnen( obj, &hp ) ) // hp wird auf den aufprallpunkt gesetzt
|
|
|
{
|
|
|
+ // Geschwindigkeit von diesem objekt mit rotation
|
|
|
Vertex v1 = getSpeed() + getWorldDir( getObjectPos( hp ).rotation( rSpeed ) - getObjectPos( hp ) );
|
|
|
+ // Geschwindigkeit des anderen Objektes mit rotation
|
|
|
Vertex v2 = obj->getSpeed() + getWorldDir( obj->getObjectPos( hp ).rotation( obj->getDrehungSpeed() ) - obj->getObjectPos( hp ) );
|
|
|
if( ( position - obj->getPosition() ).getLengthSq() > ( position + v1 * 0.03f - obj->getPosition() - v2 * 0.03f ).getLengthSq() )
|
|
|
- {
|
|
|
- //float m1 = getMasse();
|
|
|
- //float m2 = obj->getMasse();
|
|
|
- //if( m1 == 0 || m2 == 0 )
|
|
|
- // return 0;
|
|
|
- //float nm1 = m1 / ( m1 + m2 );
|
|
|
- //float nm2 = m2 / ( m1 + m2 );
|
|
|
- //rSpeed *= nm2;
|
|
|
- //speed *= nm2;
|
|
|
- //obj->setDrehungSpeed( obj->getDrehungSpeed() * nm1 );
|
|
|
- //obj->setSpeed( obj->getSpeed() * nm1 );
|
|
|
+ { // nur wenn sie sich aufeinander zu bewegen
|
|
|
+ float m1 = getMasse(); // fläche von Objekt 1
|
|
|
+ float m2 = obj->getMasse(); // fläche von Objekt 2
|
|
|
+ if( m1 == 0 || m2 == 0 )
|
|
|
+ return 0; // falls ein objekt keine masse hat ignoriere die kollision
|
|
|
+ float nm1 = m1 / ( m1 + m2 ); // koeffizient für objekt 2
|
|
|
+ float nm2 = m2 / ( m1 + m2 ); // koeffizient für Objekt 1
|
|
|
+ //rSpeed *= nm2; // Drehgeschwindigkeit anpassen (objekt 1)
|
|
|
+ //speed *= nm2; // Bewegungsgeschwindigkeit anpassen (objekt 1)
|
|
|
+ //obj->setDrehungSpeed( obj->getDrehungSpeed() * nm1 ); // Drehgeschwindigkeit anpassen (objekt 2)
|
|
|
+ //obj->setSpeed( obj->getSpeed() * nm1 ); // Bewegungsgeschwindigkeit anpassen (objekt 2)
|
|
|
rSpeed = 0;
|
|
|
speed = Vertex();
|
|
|
obj->setDrehungSpeed( 0 );
|
|
|
obj->setSpeed( Vertex() );
|
|
|
if( v2.x || v2.y )
|
|
|
- impuls( hp - v2, v2 );
|
|
|
+ impuls( hp - v2, v2, nm2 );
|
|
|
if( v1.x || v1.y )
|
|
|
- obj->impuls( hp - v1, v1 );
|
|
|
+ obj->impuls( hp - v1, v1, nm1 );
|
|
|
return 1;
|
|
|
}
|
|
|
}
|