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