#ifndef SANDBOX2D_HPP #define SANDBOX2D_HPP #include #include #include "imgui.h" #include "open_engine/renderer/renderer2d.hpp" #include #include class Sandbox2DLayer : public OpenEngine::Layer { public: Sandbox2DLayer() : OpenEngine::Layer("sandbox_2d"), camera((float)OpenEngine::Application::Get().GetWindow().GetWidth() / OpenEngine::Application::Get().GetWindow().GetHeight(), 1.0f) { } ~Sandbox2DLayer() {}; void OnAttach() override { OE_PROFILE_FUNCTION(); bindings = { {"fwd/bckwd", 1}, {"right/left", 0}, {"yaw", 2} }; { OE_PROFILE_SCOPE("Texture2D Creation"); face = OpenEngine::Texture2D::Create("assets/textures/awesomeface.png"); } } void OnDetach() override { } void OnUpdate() override { OE_PROFILE_FUNCTION() { OE_PROFILE_SCOPE("Setting up Rendering"); OpenEngine::RenderCommand::SetClearColor({0.11f, 0.11f, 0.15f, 1.0f}); OpenEngine::RenderCommand::Clear(); OpenEngine::Renderer2D::BeginScene(camera.GetCamera()); } { OE_PROFILE_SCOPE("Drawing Quads"); OpenEngine::Transform tr1 = {glm::vec3(0.5f, 0.5f, 1.0f), glm::vec3(0.3f), 20.0f}; OpenEngine::Transform tr2 = {glm::vec3(-0.2f, -0.2f, 1.0f), glm::vec3(0.5f, 0.2f, 1.0f), 10.0f}; OpenEngine::Transform tr3 = {glm::vec3(0.0f, 0.0f, -0.1f), glm::vec3(1.0f, 1.0f, 1.0f), 45.0f}; OpenEngine::Renderer2D::DrawQuad({glm::vec3(0.5f, 0.5f, 1.0f), glm::vec3(0.3f), 20.0f}, glm::vec4(color[0], color[1], color[2], color[3])); OpenEngine::Renderer2D::DrawQuad(tr2, {0.5f, 0.3f, 0.8f, 1.0f}); OpenEngine::Renderer2D::DrawQuad(tr3, face); } OpenEngine::Renderer2D::EndScene(); } bool StopRunning(OpenEngine::KeyPressedEvent& event) { if (event.GetKeyCode() == OE_KEY_ESCAPE) { OpenEngine::Application::Get().StopRunning(); return true; } return false; } void OnEvent(OpenEngine::Event& event) override { OE_PROFILE_FUNCTION(); OpenEngine::EventDispatcher dispatcher(event); //dispatcher.Dispatch(BIND_EVENT_FN(Sandbox2DLayer::StopRunning)); { OE_PROFILE_SCOPE("Camera OnEvent"); camera.OnEvent(event); } } void OnImGuiRender() override { OE_PROFILE_FUNCTION(); ImGui::Begin("Square settings"); ImGui::ColorEdit4("Square color", color); for (auto& result : profiling_results) { char label[50]; strcpy(label, "%.3fms "); strcat(label, result.name); ImGui::Text(label, result.duration); } profiling_results.clear(); ImGui::End(); } private: //OpenEngine::ShaderLibrary shader_library; glm::vec3 square_pos = glm::vec3(0.0f); glm::vec4 square_color = glm::vec4(1.0f); float color[4] = {0.5f, 0.3f, 0.4f, 1.0f}; OpenEngine::Ref face; std::unordered_map bindings; OpenEngine::OrthographicCameraController camera; std::vector profiling_results; }; #endif // SANDBOX2D_HPP