Sandbox App is no longer an editor, Editor setup has moved to the editor project
This commit is contained in:
		@ -1,8 +1,138 @@
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#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>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
* Define globals
 | 
			
		||||
*/
 | 
			
		||||
Shader* shader;
 | 
			
		||||
 | 
			
		||||
int main() 
 | 
			
		||||
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()
 | 
			
		||||
{
 | 
			
		||||
	std::cout << "Welcome to the Editor!" << std::endl;
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user