#include "../../BarinkEngine/src/BarinkEngine.h" #include "../../BarinkEngine/src/Scene/SceneManager.h" #include "../../BarinkEngine/src/Scene/SceneNodeTypes.h" #include "../../BarinkEngine/src/AssetManager/ModelImporter.h" #include "../../BarinkEngine/src/Graphics/Framebuffer.h" #include /* * Define globals */ Shader* shader; char* code = new char[254]; const std::string vertexShaderSource = "build/Debug/test.vs"; const std::string fragmentShaderSource = "build/Debug/test.fs"; BarinkEngine::ModelImporter* MI = new BarinkEngine::ModelImporter(); Framebuffer* framebuffer; Scene* Level1; BarinkEngine::SceneObject* cube; /* * Runs once at startup * - USe to initialize the game/sandbox/demo */ void Start() { // Build a basic test scene // NOTE: This will later be done through an editor // Create a level and load it as the current level std::string levelName("Test Level"); Level1 = SceneManager::CreateScene(levelName); SceneManager::LoadScene(*Level1); shader = new Shader(vertexShaderSource, fragmentShaderSource); // Create a cube node cube = MI->Import("build/Debug/Models/cube.obj"); cube->renderable->material = new Material(*shader); cube->renderable->material->Color = glm::vec3(1.0f, 0.0f, 0.0f); // What is in cube now ?? std::cout << "mesh vertices: " << cube->renderable->mesh->vertices.size() << std::endl; std::cout << "mesh elements: " << cube->renderable->mesh->elements.size() << std::endl; Level1->GetRoot().addChild(*cube); memset(code, '\0', 254); framebuffer = new Framebuffer(); std::cout << "Colour attachment id; " << framebuffer->GetColourAttachment() << std::endl; // TODO: Move to runtime/ Engine // NOTE: Submits should later be done through walking the sceneTree renderer.Submit(cube->renderable); } /* * 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("Exit")) { // TODO: Exit application } ImGui::EndMenu(); } ImGui::EndMainMenuBar(); // Show internal BarinkEngine stats ShowStats(); ImGui::Begin("Viewport"); ImGui::Image((void*)(intptr_t)framebuffer->GetColourAttachment(), ImVec2{ 800,600 }); ImGui::End(); static float Zoom = 90; static glm::vec3 Position = glm::vec3(0.0f, 0.0f, 0.0f); static glm::vec3 Rotation = glm::vec3(0.0f, 0.0f, 0.0f); ImGui::Begin("Camera"); ImGui::SliderFloat("Zoom", &Zoom, 10, 190); ImGui::InputFloat3("Position:", &Position[0]); ImGui::InputFloat3("Rotation:", &Rotation[0]); ImGui::End(); ImGui::Begin("Scripting"); ImGui::Text("Lua Code"); ImGui::InputTextMultiline("##", code, 255); bool runCode = ImGui::Button("Run"); ImGui::End(); ImGui::Begin("Scene Explorer"); ImGui::End(); } /* * Runs every frame * - Meant for game logic ( non-physics related) */ void Update() { // glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->GetId()); renderer.Render(*framebuffer); // glBindFramebuffer(GL_FRAMEBUFFER, 0); } /* * Runs at the end of the program * - Meant for cleanup */ void Stop() { delete framebuffer; delete MI; delete shader; }