summaryrefslogtreecommitdiff
path: root/src/collision.cpp
diff options
context:
space:
mode:
authorJens Rottmann <30634967+JRottm@users.noreply.github.com>2017-08-05 01:42:39 +0200
committersfan5 <sfan5@live.de>2017-08-05 12:38:11 +0200
commit248a1a8d65c483edcab328d898cc570071d6a182 (patch)
tree64a491330e6d1b5fb1afe7935899376466db77cf /src/collision.cpp
parent0c893ea1232c96f43d6934bdce8f954ae05b1203 (diff)
downloadminetest-248a1a8d65c483edcab328d898cc570071d6a182.tar.gz
minetest-248a1a8d65c483edcab328d898cc570071d6a182.tar.bz2
minetest-248a1a8d65c483edcab328d898cc570071d6a182.zip
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.
Diffstat (limited to 'src/collision.cpp')
-rw-r--r--src/collision.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/collision.cpp b/src/collision.cpp
index 9bd758995..9d0e8b361 100644
--- a/src/collision.cpp
+++ b/src/collision.cpp
@@ -260,7 +260,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef,
v3f newpos_f = *pos_f + *speed_f * dtime;
v3f minpos_f(
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)
);
v3f maxpos_f(