Add tiny Y offset in collisionMoveSimple() to tweak performance
Another small general problem: the player is always standing exactly on the bondary between 2 nodes e.g. Y=1.5 is exactly between nodes Y=1 and Y=2. floatToInt() and myround() will round +/-n.5 always 'outwards' to +/-(n+1), which means they behave differently depending on where you are: they round upwards above sea level and downwards when underground. This inconsistency comes from the way the coordinates are calculated, independent of the specific C++ code. The result is a tiny bit of lost performance when moving underground, because 1 node level more than necessary is checked for collisions. This can be amended by adding a tiny offset to minpos_f.Y, like @paramat suggested. This is not an elegant solution, but still better than wasting CPU.
This commit is contained in:
parent
90a9e4e69f
commit
b3ffe675c3
|
@ -261,7 +261,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
|
||||||
v3f newpos_f = *pos_f + *speed_f * dtime;
|
v3f newpos_f = *pos_f + *speed_f * dtime;
|
||||||
v3f minpos_f(
|
v3f minpos_f(
|
||||||
MYMIN(pos_f->X, newpos_f.X),
|
MYMIN(pos_f->X, newpos_f.X),
|
||||||
MYMIN(pos_f->Y, newpos_f.Y),
|
MYMIN(pos_f->Y, newpos_f.Y) + 0.01 * BS, // bias rounding, player often at +/-n.5
|
||||||
MYMIN(pos_f->Z, newpos_f.Z)
|
MYMIN(pos_f->Z, newpos_f.Z)
|
||||||
);
|
);
|
||||||
v3f maxpos_f(
|
v3f maxpos_f(
|
||||||
|
|
Loading…
Reference in New Issue