#include "supertux/sector.hpp"
Physic::Physic() :
- ax(0), ay(0),
- vx(0), vy(0),
- gravity_enabled_flag(true),
+ ax(0), ay(0),
+ vx(0), vy(0),
+ gravity_enabled_flag(true),
gravity_modifier(1.0f)
{
}
}
void
-Physic::enable_gravity(bool enable_gravity)
+Physic::enable_gravity(bool enable_gravity_)
{
- gravity_enabled_flag = enable_gravity;
+ gravity_enabled_flag = enable_gravity_;
}
bool
}
void
-Physic::set_gravity_modifier(float gravity_modifier)
+Physic::set_gravity_modifier(float gravity_modifier_)
{
- this->gravity_modifier = gravity_modifier;
+ this->gravity_modifier = gravity_modifier_;
}
Vector
{
float grav = gravity_enabled_flag ? (Sector::current()->get_gravity() * gravity_modifier * 100.0f) : 0;
+ // Semi-implicit Euler integration
+ // with constant acceleration, this will result in a position delta of
+ // v t + .5 a t (t+elapsed_time) at total time t
vx += ax * elapsed_time;
vy += (ay + grav) * elapsed_time;
Vector result(vx * elapsed_time, vy * elapsed_time);