mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
Add text input event to remaining numerical fields
This commit is contained in:
@@ -3762,6 +3762,21 @@ STR_6687 :Tree to land ratio:
|
||||
STR_6688 :Min. tree altitude:
|
||||
STR_6689 :Max. tree altitude:
|
||||
STR_6690 :{UINT16}%
|
||||
STR_6691 :Minimum land height
|
||||
STR_6692 :Enter min. land height between {COMMA16} and {COMMA16}
|
||||
STR_6693 :Maximum land height
|
||||
STR_6694 :Enter max. land height between {COMMA16} and {COMMA16}
|
||||
STR_6695 :Minimum tree altitude
|
||||
STR_6696 :Enter min. tree altitude between {COMMA16} and {COMMA16}
|
||||
STR_6697 :Maximum tree altitude
|
||||
STR_6698 :Enter max. tree altitude between {COMMA16} and {COMMA16}
|
||||
STR_6699 :Tree to land ratio
|
||||
STR_6700 :Enter tree to land ratio between {COMMA16} and {COMMA16}
|
||||
STR_6701 :Simplex Base Frequency
|
||||
STR_6702 :Enter Base Frequency between {COMMA2DP32} and {COMMA2DP32}
|
||||
STR_6703 :Simplex Octaves
|
||||
STR_6704 :Enter Octaves between {COMMA16} and {COMMA16}
|
||||
STR_6705 :{COMMA2DP32}
|
||||
|
||||
#############
|
||||
# Scenarios #
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace OpenRCT2
|
||||
STR_ENTER_PARK_NAME = 1719,
|
||||
STR_ENTER_SELECTION_SIZE = 5129,
|
||||
STR_ERROR_INVALID_CHARACTERS = 5243,
|
||||
STR_FORMAT_COMMA2DP32 = 6705,
|
||||
STR_FORMAT_INTEGER = 5182,
|
||||
STR_GRAPH_LABEL = 2222,
|
||||
STR_LIGHTPINK_STRINGID = 5299,
|
||||
@@ -896,10 +897,17 @@ namespace OpenRCT2
|
||||
STR_SHOW_RIDES_STALLS_ON_MAP_TIP = 3144,
|
||||
|
||||
// Window: MapGen
|
||||
STR_BEACHES_WATER_BODIES = 6677,
|
||||
STR_BASE_HEIGHT = 5183,
|
||||
STR_BASE_HEIGHT_LABEL = 2691,
|
||||
STR_BEACHES_WATER_BODIES = 6677,
|
||||
STR_ENTER_BASE_FREQUENCY = 6702,
|
||||
STR_ENTER_BASE_HEIGHT = 5184,
|
||||
STR_ENTER_MAX_LAND = 6694,
|
||||
STR_ENTER_MAX_TREE_ALTITUDE = 6698,
|
||||
STR_ENTER_MIN_LAND = 6692,
|
||||
STR_ENTER_MIN_TREE_ALTITUDE = 6696,
|
||||
STR_ENTER_OCTAVES = 6704,
|
||||
STR_ENTER_TREE_TO_LAND_RATIO = 6700,
|
||||
STR_ENTER_WATER_LEVEL = 5186,
|
||||
STR_HEIGHTMAP_FILE = 6682,
|
||||
STR_HEIGHTMAP_FLATLAND = 6679,
|
||||
@@ -911,14 +919,14 @@ namespace OpenRCT2
|
||||
STR_MAPGEN_CAPTION_GENERATOR = 6683,
|
||||
STR_MAPGEN_CAPTION_TERRAIN = 6684,
|
||||
STR_MAPGEN_CAPTION_WATER = 6685,
|
||||
STR_MAPGEN_MAX_LAND_HEIGHT = 2687,
|
||||
STR_MAPGEN_MIN_LAND_HEIGHT = 2686,
|
||||
STR_MAPGEN_NORMALIZE = 6046,
|
||||
STR_MAPGEN_OPTION_PLACE_TREES = 2696,
|
||||
STR_MAPGEN_OPTION_RANDOM_TERRAIN = 2695,
|
||||
STR_MAPGEN_SELECT_HEIGHTMAP = 6043,
|
||||
STR_MAPGEN_SIMPLEX_NOISE = 2685,
|
||||
STR_MAPGEN_SIMPLEX_NOISE_BASE_FREQUENCY = 2688,
|
||||
STR_MAPGEN_MAX_LAND_HEIGHT = 2687,
|
||||
STR_MAPGEN_MIN_LAND_HEIGHT = 2686,
|
||||
STR_MAPGEN_SIMPLEX_NOISE_OCTAVES = 2689,
|
||||
STR_MAPGEN_SMOOTH_HEIGHTMAP = 6044,
|
||||
STR_MAPGEN_SMOOTH_STRENGTH = 6045,
|
||||
@@ -927,7 +935,14 @@ namespace OpenRCT2
|
||||
STR_MAPGEN_TREE_MIN_ALTITUDE = 6688,
|
||||
STR_MAPGEN_TREE_TO_LAND_RATIO = 6687,
|
||||
STR_MAPGEN_TREE_TO_LAND_RATIO_PCT = 6690,
|
||||
STR_MAX_LAND_HEIGHT = 6693,
|
||||
STR_MAX_TREE_ALTITUDE = 6697,
|
||||
STR_MIN_LAND_HEIGHT = 6691,
|
||||
STR_MIN_TREE_ALTITUDE = 6695,
|
||||
STR_SIMPLEX_BASE_FREQUENCY = 6701,
|
||||
STR_SIMPLEX_OCTAVES = 6703,
|
||||
STR_TERRAIN_LABEL = 2693,
|
||||
STR_TREE_TO_LAND_RATIO = 6695,
|
||||
STR_WATER_LEVEL = 5185,
|
||||
STR_WATER_LEVEL_LABEL = 2692,
|
||||
|
||||
|
||||
@@ -454,7 +454,9 @@ namespace OpenRCT2::Ui::Windows
|
||||
{
|
||||
SharedMouseUp(widgetIndex);
|
||||
|
||||
if (_settings.algorithm == MapGenAlgorithm::heightmapImage)
|
||||
if (_settings.algorithm == MapGenAlgorithm::simplexNoise)
|
||||
SimplexMouseUp(widgetIndex);
|
||||
else if (_settings.algorithm == MapGenAlgorithm::heightmapImage)
|
||||
HeightmapMouseUp(widgetIndex);
|
||||
|
||||
switch (widgetIndex)
|
||||
@@ -549,18 +551,10 @@ namespace OpenRCT2::Ui::Windows
|
||||
}
|
||||
}
|
||||
|
||||
void BaseTextInput(WidgetIndex widgetIndex, std::string_view text)
|
||||
void BaseTextInput(WidgetIndex widgetIndex, int32_t value)
|
||||
{
|
||||
int32_t value;
|
||||
char* end;
|
||||
|
||||
const auto strText = u8string(text);
|
||||
value = strtol(strText.c_str(), &end, 10);
|
||||
|
||||
if (*end != '\0')
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (_settings.algorithm == MapGenAlgorithm::simplexNoise)
|
||||
SimplexTextInput(widgetIndex, value);
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
@@ -687,6 +681,39 @@ namespace OpenRCT2::Ui::Windows
|
||||
case WIDX_FORESTS_PLACE_TREES:
|
||||
_settings.trees ^= true;
|
||||
break;
|
||||
|
||||
case WIDX_TREE_LAND_RATIO:
|
||||
{
|
||||
Formatter ft;
|
||||
ft.Add<int16_t>(1);
|
||||
ft.Add<int16_t>(50);
|
||||
WindowTextInputOpen(
|
||||
this, widgetIndex, STR_TREE_TO_LAND_RATIO, STR_ENTER_TREE_TO_LAND_RATIO, ft, STR_FORMAT_INTEGER,
|
||||
_settings.treeToLandRatio, 2);
|
||||
break;
|
||||
}
|
||||
|
||||
case WIDX_TREE_ALTITUDE_MIN:
|
||||
{
|
||||
Formatter ft;
|
||||
ft.Add<int16_t>(BaseZToMetres(kMinimumLandHeight));
|
||||
ft.Add<int16_t>(BaseZToMetres(kMaximumLandHeight));
|
||||
WindowTextInputOpen(
|
||||
this, widgetIndex, STR_MIN_TREE_ALTITUDE, STR_ENTER_MIN_TREE_ALTITUDE, ft, STR_FORMAT_INTEGER,
|
||||
BaseZToMetres(_settings.minTreeAltitude), 6);
|
||||
break;
|
||||
}
|
||||
|
||||
case WIDX_TREE_ALTITUDE_MAX:
|
||||
{
|
||||
Formatter ft;
|
||||
ft.Add<int16_t>(BaseZToMetres(kMinimumLandHeight));
|
||||
ft.Add<int16_t>(BaseZToMetres(kMaximumLandHeight));
|
||||
WindowTextInputOpen(
|
||||
this, widgetIndex, STR_MAX_TREE_ALTITUDE, STR_ENTER_MAX_TREE_ALTITUDE, ft, STR_FORMAT_INTEGER,
|
||||
BaseZToMetres(_settings.maxTreeAltitude), 6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -731,6 +758,28 @@ namespace OpenRCT2::Ui::Windows
|
||||
InvalidateWidget(WIDX_TAB_2);
|
||||
}
|
||||
|
||||
void ForestsTextInput(WidgetIndex widgetIndex, int32_t rawValue, int32_t value)
|
||||
{
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_TREE_LAND_RATIO:
|
||||
_settings.treeToLandRatio = std::clamp(rawValue, 1, 50);
|
||||
break;
|
||||
|
||||
case WIDX_TREE_ALTITUDE_MIN:
|
||||
_settings.minTreeAltitude = value;
|
||||
_settings.maxTreeAltitude = std::max(_settings.minTreeAltitude, _settings.maxTreeAltitude);
|
||||
break;
|
||||
|
||||
case WIDX_TREE_ALTITUDE_MAX:
|
||||
_settings.maxTreeAltitude = value;
|
||||
_settings.minTreeAltitude = std::min(_settings.minTreeAltitude, _settings.maxTreeAltitude);
|
||||
break;
|
||||
}
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
void ForestsPrepareDraw()
|
||||
{
|
||||
if (widgets != PageWidgets[WINDOW_MAPGEN_PAGE_FORESTS])
|
||||
@@ -794,6 +843,34 @@ namespace OpenRCT2::Ui::Windows
|
||||
|
||||
#pragma region Simplex settings, part of generator tab
|
||||
|
||||
void SimplexMouseUp(WidgetIndex widgetIndex)
|
||||
{
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_SIMPLEX_BASE_FREQ:
|
||||
{
|
||||
Formatter ft;
|
||||
ft.Add<int32_t>(0);
|
||||
ft.Add<int32_t>(1000);
|
||||
WindowTextInputOpen(
|
||||
this, widgetIndex, STR_SIMPLEX_BASE_FREQUENCY, STR_ENTER_BASE_FREQUENCY, ft, STR_FORMAT_COMMA2DP32,
|
||||
_settings.simplex_base_freq, 4);
|
||||
break;
|
||||
}
|
||||
|
||||
case WIDX_SIMPLEX_OCTAVES:
|
||||
{
|
||||
Formatter ft;
|
||||
ft.Add<int16_t>(1);
|
||||
ft.Add<int16_t>(10);
|
||||
WindowTextInputOpen(
|
||||
this, widgetIndex, STR_SIMPLEX_OCTAVES, STR_ENTER_OCTAVES, ft, STR_FORMAT_INTEGER,
|
||||
_settings.simplex_octaves, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SimplexMouseDown(WidgetIndex widgetIndex, Widget* widget)
|
||||
{
|
||||
switch (widgetIndex)
|
||||
@@ -846,6 +923,20 @@ namespace OpenRCT2::Ui::Windows
|
||||
STR_COMMA16, ft, { textColour });
|
||||
}
|
||||
|
||||
void SimplexTextInput(WidgetIndex widgetIndex, int32_t value)
|
||||
{
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_SIMPLEX_BASE_FREQ:
|
||||
_settings.simplex_base_freq = std::clamp(value, 0, 1000);
|
||||
break;
|
||||
|
||||
case WIDX_SIMPLEX_OCTAVES:
|
||||
_settings.simplex_octaves = std::clamp(value, 1, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Heightmap settings, part of generator tab
|
||||
@@ -941,6 +1032,29 @@ namespace OpenRCT2::Ui::Windows
|
||||
BaseZToMetres(_settings.baseHeight), 6);
|
||||
break;
|
||||
}
|
||||
|
||||
case WIDX_HEIGHTMAP_LOW:
|
||||
{
|
||||
Formatter ft;
|
||||
ft.Add<int16_t>(BaseZToMetres(kMinimumLandHeight));
|
||||
ft.Add<int16_t>(BaseZToMetres(kMaximumLandHeight));
|
||||
WindowTextInputOpen(
|
||||
this, widgetIndex, STR_MIN_LAND_HEIGHT, STR_ENTER_MIN_LAND, ft, STR_FORMAT_INTEGER,
|
||||
BaseZToMetres(_settings.heightmapLow), 6);
|
||||
break;
|
||||
}
|
||||
|
||||
case WIDX_HEIGHTMAP_HIGH:
|
||||
{
|
||||
Formatter ft;
|
||||
ft.Add<int16_t>(BaseZToMetres(kMinimumLandHeight));
|
||||
ft.Add<int16_t>(BaseZToMetres(kMaximumLandHeight));
|
||||
WindowTextInputOpen(
|
||||
this, widgetIndex, STR_MAX_LAND_HEIGHT, STR_ENTER_MAX_LAND, ft, STR_FORMAT_INTEGER,
|
||||
BaseZToMetres(_settings.heightmapHigh), 6);
|
||||
break;
|
||||
}
|
||||
|
||||
case WIDX_HEIGHTMAP_SMOOTH_TILE_EDGES:
|
||||
_settings.smoothTileEdges = !_settings.smoothTileEdges;
|
||||
SetCheckboxValue(WIDX_HEIGHTMAP_SMOOTH_TILE_EDGES, _settings.smoothTileEdges);
|
||||
@@ -1000,32 +1114,22 @@ namespace OpenRCT2::Ui::Windows
|
||||
InvalidateWidget(WIDX_TAB_3);
|
||||
}
|
||||
|
||||
void TerrainTextInput(WidgetIndex widgetIndex, std::string_view text)
|
||||
void TerrainTextInput(WidgetIndex widgetIndex, int32_t value)
|
||||
{
|
||||
const auto strText = u8string(text);
|
||||
char* end;
|
||||
int32_t value = strtol(strText.c_str(), &end, 10);
|
||||
if (*end != '\0')
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (Config::Get().general.MeasurementFormat)
|
||||
{
|
||||
case MeasurementFormat::Imperial:
|
||||
value = FeetToMetres(value);
|
||||
[[fallthrough]];
|
||||
|
||||
default:
|
||||
value = std::clamp(MetresToBaseZ(value), kMinimumLandHeight, kMaximumLandHeight);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_BASE_HEIGHT:
|
||||
_settings.baseHeight = value;
|
||||
break;
|
||||
|
||||
case WIDX_HEIGHTMAP_LOW:
|
||||
_settings.heightmapLow = value;
|
||||
_settings.heightmapHigh = std::max(_settings.heightmapLow, _settings.heightmapHigh);
|
||||
break;
|
||||
|
||||
case WIDX_HEIGHTMAP_HIGH:
|
||||
_settings.heightmapHigh = value;
|
||||
_settings.heightmapLow = std::min(_settings.heightmapLow, _settings.heightmapHigh);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1250,30 +1354,8 @@ namespace OpenRCT2::Ui::Windows
|
||||
InvalidateWidget(WIDX_TAB_4);
|
||||
}
|
||||
|
||||
void WaterTextInput(WidgetIndex widgetIndex, std::string_view text)
|
||||
void WaterTextInput(WidgetIndex widgetIndex, int32_t value)
|
||||
{
|
||||
int32_t value;
|
||||
char* end;
|
||||
|
||||
const auto strText = u8string(text);
|
||||
value = strtol(strText.c_str(), &end, 10);
|
||||
|
||||
if (*end != '\0')
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (Config::Get().general.MeasurementFormat)
|
||||
{
|
||||
case MeasurementFormat::Imperial:
|
||||
value = FeetToMetres(value);
|
||||
[[fallthrough]];
|
||||
|
||||
default:
|
||||
value = std::clamp(MetresToBaseZ(value), kMinimumWaterHeight, kMaximumWaterHeight);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (widgetIndex)
|
||||
{
|
||||
case WIDX_WATER_LEVEL:
|
||||
@@ -1428,14 +1510,46 @@ namespace OpenRCT2::Ui::Windows
|
||||
|
||||
void OnTextInput(WidgetIndex widgetIndex, std::string_view text) override
|
||||
{
|
||||
auto strText = std::string(text);
|
||||
char* end;
|
||||
|
||||
// Convert text to integer value
|
||||
int32_t value{};
|
||||
if (page == WINDOW_MAPGEN_PAGE_BASE && widgetIndex == WIDX_SIMPLEX_BASE_FREQ)
|
||||
value = 100 * strtof(strText.c_str(), &end);
|
||||
else
|
||||
value = strtol(strText.c_str(), &end, 10);
|
||||
|
||||
if (*end != '\0')
|
||||
return;
|
||||
|
||||
// Take care of unit conversion
|
||||
int32_t rawValue = value;
|
||||
if (page != WINDOW_MAPGEN_PAGE_BASE)
|
||||
{
|
||||
switch (Config::Get().general.MeasurementFormat)
|
||||
{
|
||||
case MeasurementFormat::Imperial:
|
||||
value = FeetToMetres(value);
|
||||
[[fallthrough]];
|
||||
|
||||
default:
|
||||
value = std::clamp(MetresToBaseZ(value), kMinimumLandHeight, kMaximumLandHeight);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Pass on to the actual properties
|
||||
switch (page)
|
||||
{
|
||||
case WINDOW_MAPGEN_PAGE_BASE:
|
||||
return BaseTextInput(widgetIndex, text);
|
||||
return BaseTextInput(widgetIndex, value);
|
||||
case WINDOW_MAPGEN_PAGE_TERRAIN:
|
||||
return TerrainTextInput(widgetIndex, text);
|
||||
return TerrainTextInput(widgetIndex, value);
|
||||
case WINDOW_MAPGEN_PAGE_WATER:
|
||||
return WaterTextInput(widgetIndex, text);
|
||||
return WaterTextInput(widgetIndex, value);
|
||||
case WINDOW_MAPGEN_PAGE_FORESTS:
|
||||
return ForestsTextInput(widgetIndex, rawValue, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user