Edit example UI features
This commit is contained in:
26
src/main.cpp
26
src/main.cpp
@@ -12,6 +12,7 @@ using namespace Fan;
|
||||
|
||||
struct UserData
|
||||
{
|
||||
Window& window;
|
||||
Camera& camera;
|
||||
float delta_time{};
|
||||
bool mouse_grab{};
|
||||
@@ -22,6 +23,7 @@ struct UserData
|
||||
float last_mouse_y{};
|
||||
bool first_mouse{true};
|
||||
|
||||
bool vsync{true};
|
||||
bool show_debug{};
|
||||
|
||||
std::vector<Rc<Scene>> scenes{};
|
||||
@@ -31,8 +33,8 @@ struct UserData
|
||||
void process_input(Window& window, Camera& camera, UserData& user_data);
|
||||
void mouse_callback(double pos_x, double pos_y, void* user_data);
|
||||
void setup_dockspace();
|
||||
void draw_panel_window(Camera& camera, UserData& user_data);
|
||||
void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& user_data);
|
||||
void draw_panel_window(UserData& user_data);
|
||||
void draw_viewport_window(FrameBuffer& framebuffer, UserData& user_data);
|
||||
std::vector<Vertex> get_cube_vertices();
|
||||
|
||||
template <typename... Args>
|
||||
@@ -62,7 +64,7 @@ int main()
|
||||
Camera camera{{5.0f, 5.0f, 5.0f}};
|
||||
camera.look_at({0.0f, 0.0f, 0.0f});
|
||||
|
||||
UserData user_data{camera};
|
||||
UserData user_data{*window, camera};
|
||||
window->set_callback_user_data(&user_data);
|
||||
window->set_mouse_callback(mouse_callback);
|
||||
|
||||
@@ -176,8 +178,8 @@ int main()
|
||||
|
||||
// UI Layer
|
||||
setup_dockspace();
|
||||
draw_panel_window(camera, user_data);
|
||||
draw_viewport_window(*framebuffer, *window, user_data);
|
||||
draw_panel_window(user_data);
|
||||
draw_viewport_window(*framebuffer, user_data);
|
||||
|
||||
// Scene Rendering Layer
|
||||
const Scene& scene = *user_data.scenes[user_data.selected_scene_index];
|
||||
@@ -273,7 +275,7 @@ void setup_dockspace()
|
||||
ImGui::DockSpaceOverViewport(dockspace_id, viewport, ImGuiDockNodeFlags_None);
|
||||
}
|
||||
|
||||
void draw_panel_window(Camera& camera, UserData& user_data)
|
||||
void draw_panel_window(UserData& user_data)
|
||||
{
|
||||
static auto logo = Texture::create("assets/logo/logo.png");
|
||||
|
||||
@@ -286,11 +288,11 @@ void draw_panel_window(Camera& camera, UserData& user_data)
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Text("Press INSERT to toggle camera controls");
|
||||
ImGui::SliderFloat("Camera X", &camera.position.x, -10.0f, 10.0f);
|
||||
ImGui::SliderFloat("Camera Y", &camera.position.y, -10.0f, 10.0f);
|
||||
ImGui::SliderFloat("Camera Z", &camera.position.z, -10.0f, 10.0f);
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::Checkbox("VSync", &user_data.vsync)) {
|
||||
user_data.window.set_vsync(user_data.vsync);
|
||||
}
|
||||
ImGui::Checkbox("Show Debug Wireframes", &user_data.show_debug);
|
||||
ImGui::Separator();
|
||||
|
||||
@@ -306,7 +308,7 @@ void draw_panel_window(Camera& camera, UserData& user_data)
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& user_data)
|
||||
void draw_viewport_window(FrameBuffer& framebuffer, UserData& user_data)
|
||||
{
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{0.0f, 0.0f});
|
||||
ImGui::Begin("Viewport");
|
||||
@@ -320,10 +322,10 @@ void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& us
|
||||
}
|
||||
|
||||
// Overlays
|
||||
float fps = window.get_delta_time() > 0.0f ? 1.0f / window.get_delta_time() : 0.0f;
|
||||
float fps = user_data.window.get_delta_time() > 0.0f ? 1.0f / user_data.window.get_delta_time() : 0.0f;
|
||||
overlay_text(20.0f, 35.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "%s", VERSION_STRING);
|
||||
overlay_text(20.0f, 52.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "FPS: %.1f", fps);
|
||||
overlay_text(20.0f, 69.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "Frame time: %.2f ms", window.get_delta_time());
|
||||
overlay_text(20.0f, 69.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "Frame time: %.2f ms", user_data.window.get_delta_time());
|
||||
if (user_data.mouse_grab) { overlay_text(20.0f, 86.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "%s", "INPUT LOCKED"); }
|
||||
|
||||
ImGui::End();
|
||||
|
||||
Reference in New Issue
Block a user