1
0
Fork 0

Codechange: Replace macros in TGP. (#13346)

Remove use of Amplitude as a percentage.
pull/13354/head
Peter Nelson 2025-01-22 07:27:41 +00:00 committed by GitHub
parent 73daacde3a
commit 3a50b24a8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 20 additions and 12 deletions

View File

@ -153,7 +153,7 @@
using Height = int16_t; using Height = int16_t;
static const int HEIGHT_DECIMAL_BITS = 4; static const int HEIGHT_DECIMAL_BITS = 4;
/** Fixed point array for amplitudes (and percent values) */ /** Fixed point array for amplitudes */
using Amplitude = int; using Amplitude = int;
static const int AMPLITUDE_DECIMAL_BITS = 10; static const int AMPLITUDE_DECIMAL_BITS = 10;
@ -183,21 +183,30 @@ struct HeightMap
static HeightMap _height_map = { {}, 0, 0, 0 }; static HeightMap _height_map = { {}, 0, 0, 0 };
/** Conversion: int to Height */ /** Conversion: int to Height */
#define I2H(i) ((i) << HEIGHT_DECIMAL_BITS) static Height I2H(int i)
/** Conversion: Height to int */ {
#define H2I(i) ((i) >> HEIGHT_DECIMAL_BITS) return i << HEIGHT_DECIMAL_BITS;
}
/** Conversion: Amplitude to int */ /** Conversion: Height to int */
#define A2I(i) ((i) >> AMPLITUDE_DECIMAL_BITS) static int H2I(Height i)
{
return i >> HEIGHT_DECIMAL_BITS;
}
/** Conversion: Amplitude to Height */ /** Conversion: Amplitude to Height */
#define A2H(a) ((a) >> (AMPLITUDE_DECIMAL_BITS - HEIGHT_DECIMAL_BITS)) static Height A2H(Amplitude i)
{
return i >> (AMPLITUDE_DECIMAL_BITS - HEIGHT_DECIMAL_BITS);
}
/** Maximum number of TGP noise frequencies. */ /** Maximum number of TGP noise frequencies. */
static const int MAX_TGP_FREQUENCIES = 10; static const int MAX_TGP_FREQUENCIES = 10;
static constexpr int WATER_PERCENT_FACTOR = 1024;
/** Desired water percentage (100% == 1024) - indexed by _settings_game.difficulty.quantity_sea_lakes */ /** Desired water percentage (100% == 1024) - indexed by _settings_game.difficulty.quantity_sea_lakes */
static const Amplitude _water_percent[4] = {70, 170, 270, 420}; static const int64_t _water_percent[4] = {70, 170, 270, 420};
/** /**
* Gets the maximum allowed height while generating a map based on * Gets the maximum allowed height while generating a map based on
@ -659,7 +668,7 @@ static void HeightMapCurves(uint level)
} }
/** Adjusts heights in height map to contain required amount of water tiles */ /** Adjusts heights in height map to contain required amount of water tiles */
static void HeightMapAdjustWaterLevel(Amplitude water_percent, Height h_max_new) static void HeightMapAdjustWaterLevel(int64_t water_percent, Height h_max_new)
{ {
Height h_min, h_max, h_avg, h_water_level; Height h_min, h_max, h_avg, h_water_level;
int64_t water_tiles, desired_water_tiles; int64_t water_tiles, desired_water_tiles;
@ -673,7 +682,7 @@ static void HeightMapAdjustWaterLevel(Amplitude water_percent, Height h_max_new)
hist = HeightMapMakeHistogram(h_min, h_max, hist_buf.data()); hist = HeightMapMakeHistogram(h_min, h_max, hist_buf.data());
/* How many water tiles do we want? */ /* How many water tiles do we want? */
desired_water_tiles = A2I(((int64_t)water_percent) * (int64_t)(_height_map.size_x * _height_map.size_y)); desired_water_tiles = water_percent * _height_map.size_x * _height_map.size_y / WATER_PERCENT_FACTOR;
/* Raise water_level and accumulate values from histogram until we reach required number of water tiles */ /* Raise water_level and accumulate values from histogram until we reach required number of water tiles */
for (h_water_level = h_min, water_tiles = 0; h_water_level < h_max; h_water_level++) { for (h_water_level = h_min, water_tiles = 0; h_water_level < h_max; h_water_level++) {
@ -858,8 +867,7 @@ static void HeightMapSmoothSlopes(Height dh_max)
*/ */
static void HeightMapNormalize() static void HeightMapNormalize()
{ {
int sea_level_setting = _settings_game.difficulty.quantity_sea_lakes; const int64_t water_percent = _settings_game.difficulty.quantity_sea_lakes != CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY ? _water_percent[_settings_game.difficulty.quantity_sea_lakes] : _settings_game.game_creation.custom_sea_level * WATER_PERCENT_FACTOR / 100;
const Amplitude water_percent = sea_level_setting != (int)CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY ? _water_percent[sea_level_setting] : _settings_game.game_creation.custom_sea_level * 1024 / 100;
const Height h_max_new = TGPGetMaxHeight(); const Height h_max_new = TGPGetMaxHeight();
const Height roughness = 7 + 3 * _settings_game.game_creation.tgen_smoothness; const Height roughness = 7 + 3 * _settings_game.game_creation.tgen_smoothness;