toggle fullscreen, toggle ui, invert mouse panning
This commit is contained in:
parent
4a0117af36
commit
fb3441f5d3
1 changed files with 24 additions and 7 deletions
|
@ -1,4 +1,5 @@
|
||||||
#include <nng/nng.h>
|
#include <nng/nng.h>
|
||||||
|
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
#include <backends/imgui_impl_sdl.h>
|
#include <backends/imgui_impl_sdl.h>
|
||||||
#include <backends/imgui_impl_sdlrenderer.h>
|
#include <backends/imgui_impl_sdlrenderer.h>
|
||||||
|
@ -46,7 +47,7 @@ struct DoomState
|
||||||
// So easy to get this wrong and destroy the texture by accident. Cleanup is
|
// So easy to get this wrong and destroy the texture by accident. Cleanup is
|
||||||
// now done in check_on_dooms() before erasing the state. Enabling this code
|
// now done in check_on_dooms() before erasing the state. Enabling this code
|
||||||
// still works though.
|
// still works though.
|
||||||
#if 1
|
#if 0
|
||||||
DoomState() = default;
|
DoomState() = default;
|
||||||
~DoomState()
|
~DoomState()
|
||||||
{
|
{
|
||||||
|
@ -93,6 +94,8 @@ struct ControllerContext
|
||||||
s32 offsetX = 0;
|
s32 offsetX = 0;
|
||||||
s32 offsetY = 0;
|
s32 offsetY = 0;
|
||||||
bool isMousePanning = false;
|
bool isMousePanning = false;
|
||||||
|
bool isFullscreen = false;
|
||||||
|
bool uiVisible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ControllerActions
|
struct ControllerActions
|
||||||
|
@ -579,7 +582,7 @@ ControllerActions run_ui(ControllerContext &ctx)
|
||||||
// Window contents
|
// Window contents
|
||||||
|
|
||||||
ControllerActions result = {};
|
ControllerActions result = {};
|
||||||
static int doomsToSpawn = 1;
|
static int doomsToSpawn = 4;
|
||||||
|
|
||||||
ImGui::PushItemWidth(ImGui::GetFontSize() * -16); // affects stuff like slider widths
|
ImGui::PushItemWidth(ImGui::GetFontSize() * -16); // affects stuff like slider widths
|
||||||
|
|
||||||
|
@ -641,6 +644,7 @@ int doom_controller_loop(ControllerContext &ctx)
|
||||||
if (io.KeyCtrl && ImGui::IsKeyDown(ImGuiKey_Q))
|
if (io.KeyCtrl && ImGui::IsKeyDown(ImGuiKey_Q))
|
||||||
ctx.quit = true;
|
ctx.quit = true;
|
||||||
|
|
||||||
|
// keyboard zoom with - and =, reset with 0
|
||||||
if (ImGui::IsKeyDown(ImGuiKey_Equal))
|
if (ImGui::IsKeyDown(ImGuiKey_Equal))
|
||||||
ctx.scaleFactor += ScaleStep;
|
ctx.scaleFactor += ScaleStep;
|
||||||
if (ImGui::IsKeyDown(ImGuiKey_Minus))
|
if (ImGui::IsKeyDown(ImGuiKey_Minus))
|
||||||
|
@ -648,6 +652,7 @@ int doom_controller_loop(ControllerContext &ctx)
|
||||||
if (ImGui::IsKeyDown(ImGuiKey_0))
|
if (ImGui::IsKeyDown(ImGuiKey_0))
|
||||||
ctx.scaleFactor = 1.0;
|
ctx.scaleFactor = 1.0;
|
||||||
|
|
||||||
|
// hjkl scrolling and reset with g
|
||||||
if (ImGui::IsKeyDown(ImGuiKey_H))
|
if (ImGui::IsKeyDown(ImGuiKey_H))
|
||||||
ctx.offsetX -= PanStep;
|
ctx.offsetX -= PanStep;
|
||||||
if (ImGui::IsKeyDown(ImGuiKey_J))
|
if (ImGui::IsKeyDown(ImGuiKey_J))
|
||||||
|
@ -656,9 +661,19 @@ int doom_controller_loop(ControllerContext &ctx)
|
||||||
ctx.offsetY -= PanStep;
|
ctx.offsetY -= PanStep;
|
||||||
if (ImGui::IsKeyDown(ImGuiKey_L))
|
if (ImGui::IsKeyDown(ImGuiKey_L))
|
||||||
ctx.offsetX += PanStep;
|
ctx.offsetX += PanStep;
|
||||||
|
|
||||||
if (ImGui::IsKeyDown(ImGuiKey_G))
|
if (ImGui::IsKeyDown(ImGuiKey_G))
|
||||||
ctx.offsetX = ctx.offsetY = 0;
|
ctx.offsetX = ctx.offsetY = 0;
|
||||||
|
|
||||||
|
// fullscreen toggle
|
||||||
|
if (io.KeyAlt && ImGui::IsKeyPressed(ImGuiKey_Enter, false))
|
||||||
|
{
|
||||||
|
u32 flag = (ctx.isFullscreen ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP);
|
||||||
|
SDL_SetWindowFullscreen(ctx.window, flag);
|
||||||
|
ctx.isFullscreen = !ctx.isFullscreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::IsKeyPressed(ImGuiKey_F10, false))
|
||||||
|
ctx.uiVisible = !ctx.uiVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImVec2 panStartPos;
|
static ImVec2 panStartPos;
|
||||||
|
@ -682,8 +697,8 @@ int doom_controller_loop(ControllerContext &ctx)
|
||||||
auto curPos = io.MousePos;
|
auto curPos = io.MousePos;
|
||||||
auto dx = curPos.x - panStartPos.x;
|
auto dx = curPos.x - panStartPos.x;
|
||||||
auto dy = curPos.y - panStartPos.y;
|
auto dy = curPos.y - panStartPos.y;
|
||||||
ctx.offsetX += dx;
|
ctx.offsetX -= dx;
|
||||||
ctx.offsetY += dy;
|
ctx.offsetY -= dy;
|
||||||
panStartPos = curPos;
|
panStartPos = curPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -698,7 +713,9 @@ int doom_controller_loop(ControllerContext &ctx)
|
||||||
ImGui_ImplSDL2_NewFrame();
|
ImGui_ImplSDL2_NewFrame();
|
||||||
ImGui::NewFrame();
|
ImGui::NewFrame();
|
||||||
|
|
||||||
actions = run_ui(ctx);
|
actions = {};
|
||||||
|
if (ctx.uiVisible)
|
||||||
|
actions = run_ui(ctx);
|
||||||
|
|
||||||
// Rendering
|
// Rendering
|
||||||
const auto [r, g, b, a] = imvec4_to_rgba(clear_color);
|
const auto [r, g, b, a] = imvec4_to_rgba(clear_color);
|
||||||
|
@ -744,7 +761,7 @@ int main(int argc, char *argv[])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const auto windowFlags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL;
|
const auto windowFlags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL;
|
||||||
auto window = SDL_CreateWindow("doompanning", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, windowFlags);
|
auto window = SDL_CreateWindow("doompanning", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 960, windowFlags);
|
||||||
if (!window)
|
if (!window)
|
||||||
dp_sdl_fatal("SDL_CreateWindow");
|
dp_sdl_fatal("SDL_CreateWindow");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue