VoxelEngine/src/settings.hpp
2024-11-11 03:50:00 +03:00

97 lines
3.0 KiB
C++

#pragma once
#include <string>
#include <unordered_map>
#include "data/setting.hpp"
#include "constants.hpp"
#include "typedefs.hpp"
struct AudioSettings {
/// @brief try to initialize AL backend
FlagSetting enabled {true};
NumberSetting volumeMaster {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeRegular {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeUI {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeAmbient {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeMusic {1.0f, 0.0f, 1.0f, setting_format::percent};
};
struct DisplaySettings {
/// @brief Is window in full screen mode
FlagSetting fullscreen {false};
/// @brief Window width (pixels)
IntegerSetting width {1280};
/// @brief Window height (pixels)
IntegerSetting height {720};
/// @brief Anti-aliasing samples
IntegerSetting samples {0};
/// @brief Framerate limit
IntegerSetting framerate {-1, -1, 120};
/// @brief Limit framerate when window is iconified
FlagSetting limitFpsIconified {false};
};
struct ChunksSettings {
/// @brief Max milliseconds that engine uses for chunks loading only
IntegerSetting loadSpeed {4, 1, 32};
/// @brief Radius of chunks loading zone (chunk is unit)
IntegerSetting loadDistance {22, 3, 80};
/// @brief Buffer zone where chunks are not unloading (chunk is unit)
IntegerSetting padding {2, 1, 8};
};
struct CameraSettings {
/// @brief Camera dynamic field of view effects
FlagSetting fovEffects {true};
/// @brief Camera movement shake
FlagSetting shaking {true};
/// @brief Camera movement inertia effect
FlagSetting inertia {true};
/// @brief Camera field of view
NumberSetting fov {90.0f, 10, 120};
/// @brief Camera sensitivity
NumberSetting sensitivity {2.0f, 0.1f, 10.0f};
};
struct GraphicsSettings {
/// @brief Fog opacity is calculated as `pow(depth*k, fogCurve)` where k depends on chunksLoadDistance.
/// 1.0 is linear, 2.0 is quadratic
NumberSetting fogCurve {1.0f, 1.0f, 6.0f};
/// @brief Lighting gamma
NumberSetting gamma {1.0f, 0.4f, 1.0f};
/// @brief Enable blocks backlight to prevent complete darkness
FlagSetting backlight {true};
/// @brief Enable chunks frustum culling
FlagSetting frustumCulling {true};
IntegerSetting skyboxResolution {64 + 32, 64, 128};
IntegerSetting chunkMaxVertices {200'000, 0, 4'000'000};
IntegerSetting chunkMaxRenderers {6, -4, 32};
};
struct DebugSettings {
/// @brief Turns off chunks saving/loading
FlagSetting generatorTestMode {false};
FlagSetting doWriteLights {true};
};
struct UiSettings {
StringSetting language {"auto"};
IntegerSetting worldPreviewSize {64, 1, 512};
};
struct NetworkSettings {
};
struct EngineSettings {
AudioSettings audio;
DisplaySettings display;
ChunksSettings chunks;
CameraSettings camera;
GraphicsSettings graphics;
DebugSettings debug;
UiSettings ui;
NetworkSettings network;
};