summaryrefslogtreecommitdiff
path: root/src/environment.cpp
diff options
context:
space:
mode:
authorsapier <sapier at gmx dot net>2012-02-07 21:37:42 +0100
committersapier <sapier at gmx dot net>2012-02-07 21:37:42 +0100
commit52996cd5eb8939686b8a3eb9f075043c67d1355c (patch)
tree1489a64b177f77020de9510ff5568bda885ffb20 /src/environment.cpp
parent61ae136431bebd88796ea0789842611a36b7c424 (diff)
downloadminetest-sapier-20120207.tar.xz
maualy merged object linking interface from cao_sao_split patchsapier-20120207
Diffstat (limited to 'src/environment.cpp')
-rw-r--r--src/environment.cpp130
1 files changed, 66 insertions, 64 deletions
diff --git a/src/environment.cpp b/src/environment.cpp
index 05e56bfb5..1f8dfb7cc 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -1908,6 +1908,7 @@ void ClientEnvironment::step(float dtime)
Get the speed the player is going
*/
bool is_climbing = lplayer->is_climbing;
+ bool linked = lplayer->m_linked;
f32 player_speed = lplayer->getSpeed().getLength();
@@ -1936,90 +1937,91 @@ void ClientEnvironment::step(float dtime)
/*
Stuff that has a maximum time increment
*/
+ if (!linked) {
+ u32 loopcount = 0;
+ do
+ {
+ loopcount++;
- u32 loopcount = 0;
- do
- {
- loopcount++;
+ f32 dtime_part;
+ if(dtime_downcount > dtime_max_increment)
+ {
+ dtime_part = dtime_max_increment;
+ dtime_downcount -= dtime_part;
+ }
+ else
+ {
+ dtime_part = dtime_downcount;
+ /*
+ Setting this to 0 (no -=dtime_part) disables an infinite loop
+ when dtime_part is so small that dtime_downcount -= dtime_part
+ does nothing
+ */
+ dtime_downcount = 0;
+ }
- f32 dtime_part;
- if(dtime_downcount > dtime_max_increment)
- {
- dtime_part = dtime_max_increment;
- dtime_downcount -= dtime_part;
- }
- else
- {
- dtime_part = dtime_downcount;
/*
- Setting this to 0 (no -=dtime_part) disables an infinite loop
- when dtime_part is so small that dtime_downcount -= dtime_part
- does nothing
+ Handle local player
*/
- dtime_downcount = 0;
- }
-
- /*
- Handle local player
- */
-
- {
- v3f lplayerpos = lplayer->getPosition();
- // Apply physics
- if(free_move == false && is_climbing == false)
{
- // Gravity
- v3f speed = lplayer->getSpeed();
- if(lplayer->swimming_up == false)
- speed.Y -= 9.81 * BS * dtime_part * 2;
+ v3f lplayerpos = lplayer->getPosition();
- // Water resistance
- if(lplayer->in_water_stable || lplayer->in_water)
+ // Apply physics
+ if(free_move == false && is_climbing == false)
{
- f32 max_down = 2.0*BS;
- if(speed.Y < -max_down) speed.Y = -max_down;
+ // Gravity
+ v3f speed = lplayer->getSpeed();
+ if(lplayer->swimming_up == false)
+ speed.Y -= 9.81 * BS * dtime_part * 2;
- f32 max = 2.5*BS;
- if(speed.getLength() > max)
+ // Water resistance
+ if(lplayer->in_water_stable || lplayer->in_water)
{
- speed = speed / speed.getLength() * max;
+ f32 max_down = 2.0*BS;
+ if(speed.Y < -max_down) speed.Y = -max_down;
+
+ f32 max = 2.5*BS;
+ if(speed.getLength() > max)
+ {
+ speed = speed / speed.getLength() * max;
+ }
}
+
+ lplayer->setSpeed(speed);
}
- lplayer->setSpeed(speed);
+ /*
+ Move the lplayer.
+ This also does collision detection.
+ */
+ lplayer->move(dtime_part, this, position_max_increment,
+ &player_collisions);
}
-
- /*
- Move the lplayer.
- This also does collision detection.
- */
- lplayer->move(dtime_part, this, position_max_increment,
- &player_collisions);
}
- }
- while(dtime_downcount > 0.001);
+ while(dtime_downcount > 0.001);
+
+ //std::cout<<"Looped "<<loopcount<<" times."<<std::endl;
- //std::cout<<"Looped "<<loopcount<<" times."<<std::endl;
-
- for(core::list<CollisionInfo>::Iterator
- i = player_collisions.begin();
- i != player_collisions.end(); i++)
- {
- CollisionInfo &info = *i;
- if(info.t == COLLISION_FALL)
+ for(core::list<CollisionInfo>::Iterator
+ i = player_collisions.begin();
+ i != player_collisions.end(); i++)
{
- //f32 tolerance = BS*10; // 2 without damage
- f32 tolerance = BS*12; // 3 without damage
- f32 factor = 1;
- if(info.speed > tolerance)
+ CollisionInfo &info = *i;
+ if(info.t == COLLISION_FALL)
{
- f32 damage_f = (info.speed - tolerance)/BS*factor;
- u16 damage = (u16)(damage_f+0.5);
- damageLocalPlayer(damage, true);
+ //f32 tolerance = BS*10; // 2 without damage
+ f32 tolerance = BS*12; // 3 without damage
+ f32 factor = 1;
+ if(info.speed > tolerance)
+ {
+ f32 damage_f = (info.speed - tolerance)/BS*factor;
+ u16 damage = (u16)(damage_f+0.5);
+ damageLocalPlayer(damage, true);
+ }
}
}
- }
+ }
/*
A quick draft of lava damage