From 0c90ab4f6c8f0e4ddb1e674736bec5165278327d Mon Sep 17 00:00:00 2001 From: Jozef Behran Date: Sun, 7 Apr 2019 12:08:27 -0500 Subject: [PATCH] Optimize random turns in dungeongen (#8129) 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 | 21 ++++++++++----------- src/mapgen/dungeongen.h | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/mapgen/dungeongen.cpp b/src/mapgen/dungeongen.cpp index 3acd22877..1aa3317cf 100644 --- a/src/mapgen/dungeongen.cpp +++ b/src/mapgen/dungeongen.cpp @@ -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); + } } diff --git a/src/mapgen/dungeongen.h b/src/mapgen/dungeongen.h index 2748524c5..7d04a6254 100644 --- a/src/mapgen/dungeongen.h +++ b/src/mapgen/dungeongen.h @@ -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);