NumberSetting.observe
This commit is contained in:
parent
f8ec75b121
commit
7374013eeb
@ -3,8 +3,10 @@
|
||||
|
||||
#include <limits>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "../typedefs.h"
|
||||
#include "../delegates.h"
|
||||
|
||||
enum class setting_format {
|
||||
simple, percent
|
||||
@ -34,6 +36,7 @@ protected:
|
||||
number_t value;
|
||||
number_t min;
|
||||
number_t max;
|
||||
std::vector<consumer<number_t>> consumers;
|
||||
public:
|
||||
NumberSetting(
|
||||
number_t value,
|
||||
@ -56,7 +59,13 @@ public:
|
||||
}
|
||||
|
||||
void set(number_t value) {
|
||||
if (value == this->value) {
|
||||
return;
|
||||
}
|
||||
this->value = value;
|
||||
for (auto& callback : consumers) {
|
||||
callback(value);
|
||||
}
|
||||
}
|
||||
|
||||
number_t getMin() const {
|
||||
@ -71,6 +80,10 @@ public:
|
||||
return (value - min) / (max - min);
|
||||
}
|
||||
|
||||
void observe(consumer<number_t> callback) {
|
||||
consumers.push_back(callback);
|
||||
}
|
||||
|
||||
virtual void resetToDefault() override {
|
||||
value = initial;
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
|
||||
using runnable = std::function<void()>;
|
||||
template<class T> using supplier = std::function<T()>;
|
||||
template<class T> using consumer = std::function<void(T)>;
|
||||
|
||||
// data sources
|
||||
using wstringsupplier = std::function<std::wstring()>;
|
||||
|
||||
@ -63,6 +63,22 @@ Engine::Engine(EngineSettings& settings, EnginePaths* paths)
|
||||
audio::create_channel("ambient");
|
||||
audio::create_channel("ui");
|
||||
|
||||
settings.audio.volumeMaster.observe([=](auto value) {
|
||||
audio::get_channel("master")->setVolume(value*value);
|
||||
});
|
||||
settings.audio.volumeRegular.observe([=](auto value) {
|
||||
audio::get_channel("regular")->setVolume(value*value);
|
||||
});
|
||||
settings.audio.volumeUI.observe([=](auto value) {
|
||||
audio::get_channel("ui")->setVolume(value*value);
|
||||
});
|
||||
settings.audio.volumeAmbient.observe([=](auto value) {
|
||||
audio::get_channel("ambient")->setVolume(value*value);
|
||||
});
|
||||
settings.audio.volumeMusic.observe([=](auto value) {
|
||||
audio::get_channel("music")->setVolume(value*value);
|
||||
});
|
||||
|
||||
auto resdir = paths->getResources();
|
||||
std::cout << "-- loading assets" << std::endl;
|
||||
std::vector<fs::path> roots {resdir};
|
||||
@ -128,19 +144,6 @@ void Engine::updateHotkeys() {
|
||||
}
|
||||
}
|
||||
|
||||
inline constexpr float sqr(float x) {
|
||||
return x*x;
|
||||
}
|
||||
|
||||
static void updateAudio(double delta, const AudioSettings& settings) {
|
||||
audio::get_channel("master")->setVolume(sqr(settings.volumeMaster.get()));
|
||||
audio::get_channel("regular")->setVolume(sqr(settings.volumeRegular.get()));
|
||||
audio::get_channel("ui")->setVolume(sqr(settings.volumeUI.get()));
|
||||
audio::get_channel("ambient")->setVolume(sqr(settings.volumeAmbient.get()));
|
||||
audio::get_channel("music")->setVolume(sqr(settings.volumeMusic.get()));
|
||||
audio::update(delta);
|
||||
}
|
||||
|
||||
void Engine::mainloop() {
|
||||
setScreen(std::make_shared<MenuScreen>(this));
|
||||
|
||||
@ -152,7 +155,7 @@ void Engine::mainloop() {
|
||||
assert(screen != nullptr);
|
||||
updateTimers();
|
||||
updateHotkeys();
|
||||
updateAudio(delta, settings.audio);
|
||||
audio::update(delta);
|
||||
|
||||
gui->act(delta);
|
||||
screen->update(delta);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user