Added FOV and mouse sensitivity settings

This commit is contained in:
MihailRis
2023-12-05 14:47:46 +03:00
parent af2786164a
commit 1d73c0bd9f
10 changed files with 66 additions and 10 deletions
+1 -1
View File
@@ -147,7 +147,7 @@ void WorldRenderer::draw(const GfxContext& pctx, Camera* camera){
Shader* backShader = assets->getShader("background");
backShader->use();
backShader->uniformMatrix("u_view", camera->getView(false));
backShader->uniform1f("u_zoom", camera->zoom);
backShader->uniform1f("u_zoom", camera->zoom*camera->getFov()/(3.141592*0.5f));
backShader->uniform1f("u_ar", (float)Window::width/(float)Window::height);
skybox->draw(backShader);
+1 -1
View File
@@ -120,7 +120,7 @@ void GUI::act(float delta) {
void GUI::draw(Batch2D* batch, Assets* assets) {
menu->setCoord((Window::size() - menu->size()) / 2.0f);
uicamera->fov = Window::height;
uicamera->setFov(Window::height);
Shader* uishader = assets->getShader("ui");
uishader->use();
+2 -2
View File
@@ -303,7 +303,7 @@ void HudRenderer::draw(const GfxContext& ctx){
debugPanel->visible(level->player->debug);
uicamera->fov = height;
uicamera->setFov(height);
Shader* uishader = assets->getShader("ui");
uishader->use();
@@ -337,7 +337,7 @@ void HudRenderer::draw(const GfxContext& ctx){
Block* cblock = contentIds->getBlockDef(player->choosenBlock);
assert(cblock != nullptr);
blocksPreview->draw(cblock, width - 56, uicamera->fov - 56, 48, vec4(1.0f));
blocksPreview->draw(cblock, width - 56, uicamera->getFov() - 56, 48, vec4(1.0f));
//drawBlockPreview(cblock, width - 56, uicamera->fov - 56, 48, 48, vec4(1.0f));
}
uishader->use();
+34
View File
@@ -200,6 +200,7 @@ Panel* create_settings_panel(Engine* engine, PagesControl* menu) {
Panel* panel = new Panel(vec2(400, 200), vec4(5.0f), 1.0f);
panel->color(vec4(0.0f));
// TODO: simplify repeating code for trackbars
/* Load Distance setting track bar */{
panel->add((new Label(L""))->textSupplier([=]() {
return L"Load Distance: " +
@@ -250,6 +251,39 @@ Panel* create_settings_panel(Engine* engine, PagesControl* menu) {
panel->add(trackbar);
}
/* Fov setting track bar */{
panel->add((new Label(L""))->textSupplier([=]() {
int fov = (int)engine->getSettings().camera.fov;
return L"FOV: "+std::to_wstring(fov)+L"°";
}));
TrackBar* trackbar = new TrackBar(30.0, 120.0, 90, 1, 4);
trackbar->supplier([=]() {
return engine->getSettings().camera.fov;
});
trackbar->consumer([=](double value) {
engine->getSettings().camera.fov = value;
});
panel->add(trackbar);
}
/* Camera sensitivity setting track bar */{
panel->add((new Label(L""))->textSupplier([=]() {
std::wstringstream ss;
ss << std::fixed << std::setprecision(1);
ss << engine->getSettings().camera.sensitivity;
return L"Sensitivity: "+ss.str();
}));
TrackBar* trackbar = new TrackBar(0.1, 10.0, 2.0, 0.1, 4);
trackbar->supplier([=]() {
return engine->getSettings().camera.sensitivity;
});
trackbar->consumer([=](double value) {
engine->getSettings().camera.sensitivity = value;
});
panel->add(trackbar);
}
/* V-Sync checkbox */{
Panel* checkpanel = new Panel(vec2(400, 32), vec4(5.0f), 1.0f);
checkpanel->color(vec4(0.0f));
+4 -1
View File
@@ -73,7 +73,7 @@ void MenuScreen::draw(float delta) {
Window::clear();
Window::setBgColor(vec3(0.2f));
uicamera->fov = Window::height;
uicamera->setFov(Window::height);
Shader* uishader = engine->getAssets()->getShader("ui");
uishader->use();
uishader->uniformMatrix("u_projview", uicamera->getProjView());
@@ -136,12 +136,15 @@ void LevelScreen::update(float delta) {
if (!gui->isFocusCaught()) {
updateHotkeys();
}
// TODO: subscribe for setting change
EngineSettings& settings = engine->getSettings();
level->player->camera->setFov(glm::radians(settings.camera.fov));
if (settings.graphics.backlight != backlight) {
level->chunks->saveAndClear();
backlight = settings.graphics.backlight;
}
if (!hud->isPause()) {
level->world->updateTimers(delta);
}