Add TempScale enum

This commit is contained in:
Tamás Bálint Misius
2025-06-07 20:36:49 +02:00
parent e7cc43e689
commit 611be5b94e
13 changed files with 56 additions and 36 deletions

View File

@@ -339,14 +339,14 @@ ByteString format::URLDecode(ByteString source)
return result; return result;
} }
void format::RenderTemperature(StringBuilder &sb, float temp, int scale) void format::RenderTemperature(StringBuilder &sb, float temp, TempScale scale)
{ {
switch (scale) switch (scale)
{ {
case 1: case TEMPSCALE_CELSIUS:
sb << (temp - 273.15f) << "C"; sb << (temp - 273.15f) << "C";
break; break;
case 2: case TEMPSCALE_FAHRENHEIT:
sb << (temp - 273.15f) * 1.8f + 32.0f << "F"; sb << (temp - 273.15f) * 1.8f + 32.0f << "F";
break; break;
default: default:
@@ -355,24 +355,24 @@ void format::RenderTemperature(StringBuilder &sb, float temp, int scale)
} }
} }
float format::StringToTemperature(String str, int defaultScale) float format::StringToTemperature(String str, TempScale defaultScale)
{ {
auto scale = defaultScale; auto scale = defaultScale;
if (str.size()) if (str.size())
{ {
if (str.EndsWith("K")) if (str.EndsWith("K"))
{ {
scale = 0; scale = TEMPSCALE_KELVIN;
str = str.SubstrFromEnd(1); str = str.SubstrFromEnd(1);
} }
else if (str.EndsWith("C")) else if (str.EndsWith("C"))
{ {
scale = 1; scale = TEMPSCALE_CELSIUS;
str = str.SubstrFromEnd(1); str = str.SubstrFromEnd(1);
} }
else if (str.EndsWith("F")) else if (str.EndsWith("F"))
{ {
scale = 2; scale = TEMPSCALE_FAHRENHEIT;
str = str.SubstrFromEnd(1); str = str.SubstrFromEnd(1);
} }
} }
@@ -383,12 +383,14 @@ float format::StringToTemperature(String str, int defaultScale)
auto out = str.ToNumber<float>(); auto out = str.ToNumber<float>();
switch (scale) switch (scale)
{ {
case 1: case TEMPSCALE_CELSIUS:
out = out + 273.15; out = out + 273.15;
break; break;
case 2: case TEMPSCALE_FAHRENHEIT:
out = (out - 32.0f) / 1.8f + 273.15f; out = (out - 32.0f) / 1.8f + 273.15f;
break; break;
default:
break;
} }
return out; return out;
} }

View File

@@ -5,6 +5,7 @@
#include "common/String.h" #include "common/String.h"
#include "common/Plane.h" #include "common/Plane.h"
#include "graphics/Pixel.h" #include "graphics/Pixel.h"
#include "simulation/SimulationSettings.h"
class VideoBuffer; class VideoBuffer;
@@ -19,6 +20,6 @@ namespace format
std::unique_ptr<std::vector<char>> PixelsToPNG(PlaneAdapter<std::vector<pixel>> const &); std::unique_ptr<std::vector<char>> PixelsToPNG(PlaneAdapter<std::vector<pixel>> const &);
std::unique_ptr<PlaneAdapter<std::vector<pixel_rgba>>> PixelsFromPNG(std::span<const char> data); std::unique_ptr<PlaneAdapter<std::vector<pixel_rgba>>> PixelsFromPNG(std::span<const char> data);
std::unique_ptr<PlaneAdapter<std::vector<pixel>>> PixelsFromPNG(std::span<const char> data, RGB background); std::unique_ptr<PlaneAdapter<std::vector<pixel>>> PixelsFromPNG(std::span<const char> data, RGB background);
void RenderTemperature(StringBuilder &sb, float temp, int scale); void RenderTemperature(StringBuilder &sb, float temp, TempScale scale);
float StringToTemperature(String str, int defaultScale); float StringToTemperature(String str, TempScale defaultScale);
} }

View File

@@ -1033,12 +1033,12 @@ bool GameController::GetDebugHUD()
return gameView->GetDebugHUD(); return gameView->GetDebugHUD();
} }
void GameController::SetTemperatureScale(int temperatureScale) void GameController::SetTemperatureScale(TempScale temperatureScale)
{ {
gameModel->SetTemperatureScale(temperatureScale); gameModel->SetTemperatureScale(temperatureScale);
} }
int GameController::GetTemperatureScale() TempScale GameController::GetTemperatureScale()
{ {
return gameModel->GetTemperatureScale(); return gameModel->GetTemperatureScale();
} }

View File

@@ -8,6 +8,7 @@
#include "gui/SavePreviewType.h" #include "gui/SavePreviewType.h"
#include "simulation/Sign.h" #include "simulation/Sign.h"
#include "simulation/Particle.h" #include "simulation/Particle.h"
#include "simulation/SimulationSettings.h"
#include "Misc.h" #include "Misc.h"
#include <vector> #include <vector>
#include <utility> #include <utility>
@@ -129,8 +130,8 @@ public:
bool GetBrushEnable(); bool GetBrushEnable();
void SetDebugHUD(bool hudState); void SetDebugHUD(bool hudState);
bool GetDebugHUD(); bool GetDebugHUD();
void SetTemperatureScale(int temperatureScale); void SetTemperatureScale(TempScale temperatureScale);
int GetTemperatureScale(); TempScale GetTemperatureScale();
int GetEdgeMode(); int GetEdgeMode();
void SetEdgeMode(int edgeMode); void SetEdgeMode(int edgeMode);
void SetDebugFlags(unsigned int flags) { debugFlags = flags; } void SetDebugFlags(unsigned int flags) { debugFlags = flags; }

View File

@@ -167,7 +167,7 @@ GameModel::GameModel(GameView *newView):
mouseClickRequired = prefs.Get("MouseClickRequired", false); mouseClickRequired = prefs.Get("MouseClickRequired", false);
includePressure = prefs.Get("Simulation.IncludePressure", true); includePressure = prefs.Get("Simulation.IncludePressure", true);
temperatureScale = prefs.Get("Renderer.TemperatureScale", 1); // TODO: TemperatureScale enum temperatureScale = prefs.Get("Renderer.TemperatureScale", NUM_TEMPSCALES, TEMPSCALE_CELSIUS);
ClearSimulation(); ClearSimulation();
} }
@@ -287,7 +287,7 @@ int GameModel::GetEdgeMode()
return this->edgeMode; return this->edgeMode;
} }
void GameModel::SetTemperatureScale(int temperatureScale) void GameModel::SetTemperatureScale(TempScale temperatureScale)
{ {
this->temperatureScale = temperatureScale; this->temperatureScale = temperatureScale;
} }

View File

@@ -4,6 +4,7 @@
#include "gui/interface/Point.h" #include "gui/interface/Point.h"
#include "graphics/RendererSettings.h" #include "graphics/RendererSettings.h"
#include "simulation/CustomGOLData.h" #include "simulation/CustomGOLData.h"
#include "simulation/SimulationSettings.h"
#include <vector> #include <vector>
#include <deque> #include <deque>
#include <memory> #include <memory>
@@ -95,7 +96,7 @@ private:
bool mouseClickRequired; bool mouseClickRequired;
bool includePressure; bool includePressure;
bool perfectCircle = true; bool perfectCircle = true;
int temperatureScale; TempScale temperatureScale;
size_t activeColourPreset; size_t activeColourPreset;
std::vector<ui::Colour> colourPresets; std::vector<ui::Colour> colourPresets;
@@ -150,8 +151,8 @@ public:
void SetEdgeMode(int edgeMode); void SetEdgeMode(int edgeMode);
int GetEdgeMode(); int GetEdgeMode();
void SetTemperatureScale(int temperatureScale); void SetTemperatureScale(TempScale temperatureScale);
inline int GetTemperatureScale() const inline TempScale GetTemperatureScale() const
{ {
return temperatureScale; return temperatureScale;
} }

View File

@@ -67,7 +67,7 @@ void OptionsController::SetEdgeMode(int edgeMode)
model->SetEdgeMode(edgeMode); model->SetEdgeMode(edgeMode);
} }
void OptionsController::SetTemperatureScale(int temperatureScale) void OptionsController::SetTemperatureScale(TempScale temperatureScale)
{ {
model->SetTemperatureScale(temperatureScale); model->SetTemperatureScale(temperatureScale);
} }

View File

@@ -1,5 +1,6 @@
#pragma once #pragma once
#include <functional> #include <functional>
#include "simulation/SimulationSettings.h"
class GameModel; class GameModel;
class OptionsModel; class OptionsModel;
@@ -23,7 +24,7 @@ public:
void SetAirMode(int airMode); void SetAirMode(int airMode);
void SetAmbientAirTemperature(float ambientAirTemp); void SetAmbientAirTemperature(float ambientAirTemp);
void SetEdgeMode(int edgeMode); void SetEdgeMode(int edgeMode);
void SetTemperatureScale(int temperatureScale); void SetTemperatureScale(TempScale temperatureScale);
void SetThreadedRendering(bool newThreadedRendering); void SetThreadedRendering(bool newThreadedRendering);
void SetFullscreen(bool fullscreen); void SetFullscreen(bool fullscreen);
void SetChangeResolution(bool newChangeResolution); void SetChangeResolution(bool newChangeResolution);

View File

@@ -85,13 +85,13 @@ void OptionsModel::SetEdgeMode(int edgeMode)
notifySettingsChanged(); notifySettingsChanged();
} }
int OptionsModel::GetTemperatureScale() TempScale OptionsModel::GetTemperatureScale()
{ {
return gModel->GetTemperatureScale(); return gModel->GetTemperatureScale();
} }
void OptionsModel::SetTemperatureScale(int temperatureScale) void OptionsModel::SetTemperatureScale(TempScale temperatureScale)
{ {
GlobalPrefs::Ref().Set("Renderer.TemperatureScale", temperatureScale); GlobalPrefs::Ref().Set("Renderer.TemperatureScale", int(temperatureScale));
gModel->SetTemperatureScale(temperatureScale); gModel->SetTemperatureScale(temperatureScale);
notifySettingsChanged(); notifySettingsChanged();
} }

View File

@@ -1,5 +1,6 @@
#pragma once #pragma once
#include <vector> #include <vector>
#include "simulation/SimulationSettings.h"
class GameModel; class GameModel;
class Simulation; class Simulation;
@@ -29,8 +30,8 @@ public:
void SetAmbientAirTemperature(float ambientAirTemp); void SetAmbientAirTemperature(float ambientAirTemp);
int GetEdgeMode(); int GetEdgeMode();
void SetEdgeMode(int edgeMode); void SetEdgeMode(int edgeMode);
int GetTemperatureScale(); TempScale GetTemperatureScale();
void SetTemperatureScale(int temperatureScale); void SetTemperatureScale(TempScale temperatureScale);
int GetThreadedRendering(); int GetThreadedRendering();
void SetThreadedRendering(bool newThreadedRendering); void SetThreadedRendering(bool newThreadedRendering);
int GetGravityMode(); int GetGravityMode();

View File

@@ -222,11 +222,11 @@ OptionsView::OptionsView() : ui::Window(ui::Point(-1, -1), ui::Point(320, 340))
c->SetEdgeMode(edgeMode->GetOption().second); c->SetEdgeMode(edgeMode->GetOption().second);
}); });
temperatureScale = addDropDown("Temperature scale", { temperatureScale = addDropDown("Temperature scale", {
{ "Kelvin", 0 }, { "Kelvin", TEMPSCALE_KELVIN },
{ "Celsius", 1 }, { "Celsius", TEMPSCALE_CELSIUS },
{ "Fahrenheit", 2 }, { "Fahrenheit", TEMPSCALE_FAHRENHEIT },
}, [this] { }, [this] {
c->SetTemperatureScale(temperatureScale->GetOption().second); c->SetTemperatureScale(TempScale(temperatureScale->GetOption().second));
}); });
if (FORCE_WINDOW_FRAME_OPS != forceWindowFrameOpsHandheld) if (FORCE_WINDOW_FRAME_OPS != forceWindowFrameOpsHandheld)
{ {
@@ -426,7 +426,7 @@ void OptionsView::AmbientAirTempToTextBox(float airTemp)
{ {
StringBuilder sb; StringBuilder sb;
sb << Format::Precision(2); sb << Format::Precision(2);
format::RenderTemperature(sb, airTemp, temperatureScale->GetOption().second); format::RenderTemperature(sb, airTemp, TempScale(temperatureScale->GetOption().second));
ambientAirTemp->SetText(sb.Build()); ambientAirTemp->SetText(sb.Build());
} }
@@ -466,7 +466,7 @@ void OptionsView::UpdateAirTemp(String temp, bool isDefocus)
bool isValid; bool isValid;
try try
{ {
airTemp = format::StringToTemperature(temp, temperatureScale->GetOption().second); airTemp = format::StringToTemperature(temp, TempScale(temperatureScale->GetOption().second));
isValid = true; isValid = true;
} }
catch (const std::exception &ex) catch (const std::exception &ex)

View File

@@ -1701,13 +1701,13 @@ static int temperatureScale(lua_State *L)
lsi->AssertInterfaceEvent(); lsi->AssertInterfaceEvent();
if (lua_gettop(L) == 0) if (lua_gettop(L) == 0)
{ {
lua_pushinteger(L, lsi->gameModel->GetTemperatureScale()); lua_pushinteger(L, int(lsi->gameModel->GetTemperatureScale()));
return 1; return 1;
} }
int temperatureScale = luaL_checkinteger(L, 1); int temperatureScale = luaL_checkinteger(L, 1);
if (temperatureScale < 0 || temperatureScale > 2) if (temperatureScale < 0 || temperatureScale >= NUM_TEMPSCALES)
return luaL_error(L, "Invalid temperature scale"); return luaL_error(L, "Invalid temperature scale");
lsi->gameModel->SetTemperatureScale(temperatureScale); lsi->gameModel->SetTemperatureScale(TempScale(temperatureScale));
return 0; return 0;
} }
@@ -2129,6 +2129,11 @@ void LuaSimulation::Open(lua_State *L)
LCONST(DECOSPACE_GAMMA18); LCONST(DECOSPACE_GAMMA18);
LCONST(NUM_DECOSPACES); LCONST(NUM_DECOSPACES);
LCONST(TEMPSCALE_KELVIN);
LCONST(TEMPSCALE_CELSIUS);
LCONST(TEMPSCALE_FAHRENHEIT);
LCONST(NUM_TEMPSCALES);
LCONSTAS("CANMOVE_BOUNCE", 0); LCONSTAS("CANMOVE_BOUNCE", 0);
LCONSTAS("CANMOVE_SWAP", 1); LCONSTAS("CANMOVE_SWAP", 1);
LCONSTAS("CANMOVE_ENTER", 2); LCONSTAS("CANMOVE_ENTER", 2);

View File

@@ -35,3 +35,11 @@ enum DecoSpace
DECOSPACE_GAMMA18, DECOSPACE_GAMMA18,
NUM_DECOSPACES, NUM_DECOSPACES,
}; };
enum TempScale
{
TEMPSCALE_KELVIN,
TEMPSCALE_CELSIUS,
TEMPSCALE_FAHRENHEIT,
NUM_TEMPSCALES,
};