2022-10-22 13:21:48 +00:00
|
|
|
#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 <imgui.h>
|
2022-10-22 12:58:55 +00:00
|
|
|
|
2022-10-22 13:21:48 +00:00
|
|
|
/*
|
|
|
|
* Define globals
|
|
|
|
*/
|
|
|
|
Shader* shader;
|
2022-10-22 12:58:55 +00:00
|
|
|
|
2022-10-22 13:21:48 +00:00
|
|
|
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()
|
2022-10-22 12:58:55 +00:00
|
|
|
{
|
2022-10-22 13:21:48 +00:00
|
|
|
// glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->GetId());
|
|
|
|
|
|
|
|
renderer.Render(*framebuffer);
|
2022-10-22 12:58:55 +00:00
|
|
|
|
2022-10-22 13:21:48 +00:00
|
|
|
// glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Runs at the end of the program
|
|
|
|
* - Meant for cleanup
|
|
|
|
*/
|
|
|
|
void Stop()
|
|
|
|
{
|
|
|
|
delete framebuffer;
|
|
|
|
delete MI;
|
|
|
|
delete shader;
|
2022-10-22 12:58:55 +00:00
|
|
|
}
|