Optimize random turns in dungeongen (#8129)
authorJozef Behran <jozuejozef@gmail.com>
Sun, 7 Apr 2019 17:08:27 +0000 (12:08 -0500)
committerSmallJoker <SmallJoker@users.noreply.github.com>
Sun, 7 Apr 2019 17:08:27 +0000 (19:08 +0200)
It turns out there is no need to return the new value and
preserve the old one in random_turn, the procedure can be
made to modify the value in-place. This saves quite a bunch
of parameter and return value copying.

src/mapgen/dungeongen.cpp
src/mapgen/dungeongen.h

index 3acd22877fd49d0efc04154994b8ad566e40d99b..1aa3317cf9ae6487c28e4b75f2a757907363b584 100644 (file)
@@ -494,7 +494,7 @@ void DungeonGen::makeCorridor(v3s16 doorplace, v3s16 doordir,
                if (partcount >= partlength) {
                        partcount = 0;
 
-                       dir = random_turn(random, dir);
+                       random_turn(random, dir);
 
                        partlength = random.range(1, length);
 
@@ -655,20 +655,19 @@ v3s16 turn_xz(v3s16 olddir, int t)
 }
 
 
-v3s16 random_turn(PseudoRandom &random, v3s16 olddir)
+void random_turn(PseudoRandom &random, v3s16 &dir)
 {
        int turn = random.range(0, 2);
-       v3s16 dir;
-       if (turn == 0)
-               // Go straight
-               dir = olddir;
-       else if (turn == 1)
+       if (turn == 0) {
+               // Go straight: nothing to do
+               return;
+       } else if (turn == 1) {
                // Turn right
-               dir = turn_xz(olddir, 0);
-       else
+               dir = turn_xz(dir, 0);
+       } else {
                // Turn left
-               dir = turn_xz(olddir, 1);
-       return dir;
+               dir = turn_xz(dir, 1);
+       }
 }
 
 
index 2748524c54bdbc24b12c3470919baeae9d4ad331..7d04a6254b94c6fc9d79e400c57158ccb58f8b1c 100644 (file)
@@ -34,7 +34,7 @@ class NodeDefManager;
 
 v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs);
 v3s16 turn_xz(v3s16 olddir, int t);
-v3s16 random_turn(PseudoRandom &random, v3s16 olddir);
+void random_turn(PseudoRandom &random, v3s16 &dir);
 int dir_to_facedir(v3s16 d);