コード例 #1
0
ファイル: ShipTest.cpp プロジェクト: EnacheB/Gravity
//Checks that ships take damage when a projectile hits them
void shipTakesDamage() {
    Ship myShip = Ship(Tuple(2,2));
    ASSERT_LESS(0.9 , myShip.getShieldFraction());
    myShip.Damage(20);
    ASSERT_GREATER(0.9 , myShip.getShieldFraction());
    myShip.Damage(9001);
    ASSERT_EQUAL_DELTA(0.0, myShip.getMass(), 0.01);
}
コード例 #2
0
ファイル: System.cpp プロジェクト: EnacheB/Gravity
/**
 * Handles collision logic between a ship and a projectile
 */
void System::Collide(Ship& ship, Projectile& proj) {
    if(proj.getMass() == 0 || ship.getMass() == 0) return;

    double dx = proj.getPosition().x-ship.getPosition().x;
    double dy = proj.getPosition().y-ship.getPosition().y;
    double separationSquared = dx*dx+dy*dy;
    //May be inaccurate with verlet
    double totalDamageRange = proj.getCollisionRange() + ship.getCollisionRange();
    if(separationSquared < (totalDamageRange * totalDamageRange))
    {
        ship.Damage(proj.getDamage());
        proj.Destroy();
    }

}