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
|
struct UserData
|
||||||
{
|
{
|
||||||
|
Window& window;
|
||||||
Camera& camera;
|
Camera& camera;
|
||||||
float delta_time{};
|
float delta_time{};
|
||||||
bool mouse_grab{};
|
bool mouse_grab{};
|
||||||
@@ -22,6 +23,7 @@ struct UserData
|
|||||||
float last_mouse_y{};
|
float last_mouse_y{};
|
||||||
bool first_mouse{true};
|
bool first_mouse{true};
|
||||||
|
|
||||||
|
bool vsync{true};
|
||||||
bool show_debug{};
|
bool show_debug{};
|
||||||
|
|
||||||
std::vector<Rc<Scene>> scenes{};
|
std::vector<Rc<Scene>> scenes{};
|
||||||
@@ -31,8 +33,8 @@ struct UserData
|
|||||||
void process_input(Window& window, Camera& camera, UserData& user_data);
|
void process_input(Window& window, Camera& camera, UserData& user_data);
|
||||||
void mouse_callback(double pos_x, double pos_y, void* user_data);
|
void mouse_callback(double pos_x, double pos_y, void* user_data);
|
||||||
void setup_dockspace();
|
void setup_dockspace();
|
||||||
void draw_panel_window(Camera& camera, UserData& user_data);
|
void draw_panel_window(UserData& user_data);
|
||||||
void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& user_data);
|
void draw_viewport_window(FrameBuffer& framebuffer, UserData& user_data);
|
||||||
std::vector<Vertex> get_cube_vertices();
|
std::vector<Vertex> get_cube_vertices();
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
@@ -62,7 +64,7 @@ int main()
|
|||||||
Camera camera{{5.0f, 5.0f, 5.0f}};
|
Camera camera{{5.0f, 5.0f, 5.0f}};
|
||||||
camera.look_at({0.0f, 0.0f, 0.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_callback_user_data(&user_data);
|
||||||
window->set_mouse_callback(mouse_callback);
|
window->set_mouse_callback(mouse_callback);
|
||||||
|
|
||||||
@@ -176,8 +178,8 @@ int main()
|
|||||||
|
|
||||||
// UI Layer
|
// UI Layer
|
||||||
setup_dockspace();
|
setup_dockspace();
|
||||||
draw_panel_window(camera, user_data);
|
draw_panel_window(user_data);
|
||||||
draw_viewport_window(*framebuffer, *window, user_data);
|
draw_viewport_window(*framebuffer, user_data);
|
||||||
|
|
||||||
// Scene Rendering Layer
|
// Scene Rendering Layer
|
||||||
const Scene& scene = *user_data.scenes[user_data.selected_scene_index];
|
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);
|
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");
|
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::Separator();
|
||||||
|
|
||||||
ImGui::Text("Press INSERT to toggle camera controls");
|
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();
|
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::Checkbox("Show Debug Wireframes", &user_data.show_debug);
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
@@ -306,7 +308,7 @@ void draw_panel_window(Camera& camera, UserData& user_data)
|
|||||||
ImGui::End();
|
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::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{0.0f, 0.0f});
|
||||||
ImGui::Begin("Viewport");
|
ImGui::Begin("Viewport");
|
||||||
@@ -320,10 +322,10 @@ void draw_viewport_window(FrameBuffer& framebuffer, Window& window, UserData& us
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Overlays
|
// 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, 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, 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"); }
|
if (user_data.mouse_grab) { overlay_text(20.0f, 86.0f, {0.0f, 1.0f, 0.0f, 1.0f}, "%s", "INPUT LOCKED"); }
|
||||||
|
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
|||||||
Reference in New Issue
Block a user