Beispiel #1
0
//==========================================================
// Force of gravity on this entity
// Calculated by F = mass * acceleration (gravity)
// Using that information creates an always downward force
//	to the Entity
//==========================================================
void Entity::gravityForce(float frameTime)
{
	if (!active)
		return;

	force = gravity * mass;
	VECTOR2 gravityV(getCenterX(), 0-getCenterY());

	Graphics::Vector2Normalize(&gravityV);

	gravityV *= force *frameTime;
	velocity += gravityV;
}
Beispiel #2
0
//=============================================================================
// Force of gravity on this entity from other entity
// Adds the gravitational force to the velocity vector of this entity
// force = GRAVITY * m1 * m2 / r*r
//                    2              2
//  r*r  =   (Ax - Bx)   +  (Ay - By)
//=============================================================================
void Entity::gravityForce(Entity *ent, float frameTime)
{
    // if either entity is not active then no gravity effect
    if (!active || !ent->getActive())
        return ;

    rr = pow((ent->getCenterX() - getCenterX()),2) + 
            pow((ent->getCenterY() - getCenterY()),2);
    force = gravity * ent->getMass() * mass/rr;

    // --- Using vector math to create gravity vector ---
    // Create vector between entities
    VECTOR2 gravityV(ent->getCenterX() - getCenterX(),
                        ent->getCenterY() - getCenterY());
    // Normalize the vector
    Graphics::Vector2Normalize(&gravityV);
    // Multipy by force of gravity to create gravity vector
    gravityV *= force * frameTime;
    // Add gravity vector to moving velocity vector to change direction
    velocity += gravityV;
}