#include "../../BarinkEngine/src/BarinkEngine.h" #include "../../BarinkEngine/src/AssetManager/ModelImporter.h" #include "../../BarinkEngine/src/Graphics/Memory/Framebuffer.h" #include #include "../../BarinkEngine/src/PerfCounter.cpp" #include "../../BarinkEngine/src/Scene/Entity.h" #include "stb_image.h" #include "../../libs/guizmo/ImGuizmo.h" #include "../../libs/glm/glm/gtc/type_ptr.hpp" #include #include "widgets/widgets.h" /* * Define globals */ Framebuffer* framebuffer; Scene Level1; BarinkEngine::SceneObject* Model; Entity cube; /* * Runs once at startup * - USe to initialize the game/sandbox/demo */ void Start() { auto io = ImGui::GetIO(); io.Fonts->AddFontFromFileTTF("build/Debug/Fonts/Roboto-Regular.ttf", 18); framebuffer = new Framebuffer(); // Build a basic test scene // NOTE: This will later be done through an editor // Create a level and load it as the current level auto importer = BarinkEngine::ModelImporter(); // Create a cube Model = importer.Import("build/Debug/Models/Cube.obj"); cube = Level1.AddEntity("cube"); auto& render3DComponent = cube.AddComponent(); render3DComponent.mesh = *(Model->renderable->mesh); cube.GetComponent().transform = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f, 0.0f, 5.0f)); renderer.Prepare(Level1); // create an ambient light source auto AmbientLight = Level1.AddEntity("AmbientLight"); AmbientLight.AddComponent(); std::cout << "Colour attachment id; " << framebuffer->GetColourAttachment() << std::endl; renderer.Prepare(Level1); } /* * Runs every frame * - Use to draw Immediate mode graphics (Not meant for HUD's ) */ void ImmediateGraphicsDraw() { ImGui::DockSpaceOverViewport(ImGui::GetMainViewport()); // Show a menu bar ImGui::BeginMainMenuBar(); if (ImGui::BeginMenu("Application")) { if (ImGui::MenuItem("Preferences")) { } if (ImGui::MenuItem("Exit")) { // TODO: Exit application } ImGui::EndMenu(); } ImGui::EndMainMenuBar(); // Show internal BarinkEngine stats //ShowStats(); Viewport(*framebuffer , Level1); Inspector(); SceneExplorer(Level1); Settings(); AssetsFinder(); Console(); ImGui::ShowMetricsWindow(); } void Render() { renderer.Render( *framebuffer, Level1); } /* * Runs every frame * - Meant for game logic ( non-physics related) */ void Update() { } /* * Runs every physics update */ void fixed_update() { } /* * Runs at the end of the program * - Meant for cleanup */ void Stop() { delete framebuffer; }