// Y direction is ignored
void Player::accelerate(v3f target_speed, f32 max_increase)
{
+ v3f d_wanted = target_speed - m_speed;
+ d_wanted.Y = 0;
+ f32 dl_wanted = d_wanted.getLength();
+ f32 dl = dl_wanted;
+ if(dl > max_increase)
+ dl = max_increase;
+
+ v3f d = d_wanted.normalize() * dl;
+
+ m_speed.X += d.X;
+ m_speed.Z += d.Z;
+ //m_speed += d;
+
+#if 0 // old code
if(m_speed.X < target_speed.X - max_increase)
m_speed.X += max_increase;
else if(m_speed.X > target_speed.X + max_increase)
m_speed.Z = target_speed.Z;
else if(m_speed.Z > target_speed.Z)
m_speed.Z = target_speed.Z;
+#endif
}
/*
position += m_speed * dtime;
+ bool haxmode = g_settings.getBool("haxmode");
+
// Skip collision detection if player is non-local
- if(isLocal() == false)
+ if(isLocal() == false || haxmode)
{
setPosition(position);
return;
v3f speed = v3f(0,0,0);
+ bool haxmode = g_settings.getBool("haxmode");
+
+ if(haxmode)
+ {
+ v3f speed = getSpeed();
+ speed.Y = 0;
+ setSpeed(speed);
+ }
+
// Superspeed mode
bool superspeed = false;
if(control.superspeed)
{
- speed += move_direction;
- superspeed = true;
+ if(haxmode)
+ {
+ v3f speed = getSpeed();
+ speed.Y = -20*BS;
+ setSpeed(speed);
+ }
+ else
+ {
+ // "Turbo button"
+ /*speed += move_direction;
+ superspeed = true;*/
+ }
}
+ if(haxmode)
+ superspeed = true;
+
if(control.up)
{
speed += move_direction;
}
if(control.jump)
{
- if(touching_ground)
+ if(haxmode)
+ {
+ v3f speed = getSpeed();
+ /*speed.Y += 20.*BS * dtime * 2;
+ if(speed.Y < 0)
+ speed.Y = 0;*/
+ speed.Y = 20*BS;
+ setSpeed(speed);
+ }
+ else if(touching_ground)
{
v3f speed = getSpeed();
speed.Y = 6.5*BS;
speed = speed.normalize() * walkspeed_max;
f32 inc = walk_acceleration * BS * dtime;
-
+
+ if(haxmode)
+ inc = walk_acceleration * BS * dtime * 10;
+
// Accelerate to target speed with maximum increment
accelerate(speed, inc);
}