#include "DarkRP2D.h" #ifndef NDEBUG #include "imgui.h" #include "imgui_impl_sdl_gl3.h" #endif #include #include #include DarkRP2D::~DarkRP2D() { std::cout << "Game got destroyed!" << std::endl; #ifndef NDEBUG ImGui_ImplSdlGL3_Shutdown(); ImGui::DestroyContext(); #endif delete assets; delete obj; delete inputHandler; delete camera; delete renderer; } void DarkRP2D::create () { std::cout << "Hello World!" << std::endl; assets = new Assets(); assets->loadTexture("police_officer.png",true,"police_officer"); assets->loadShader("vert.shader","frag.shader",nullptr,"defaultShader"); assets->loadShader("bitmapvert.shader","bitmapfrag.shader",nullptr,"bitmapShader"); renderer = new Renderer(); std::vector vertices({ Vertex2D{glm::vec2(-0.5f,-0.5f), glm::vec2(0.0f,1.0f)}, Vertex2D{glm::vec2(0.5f,-0.5f), glm::vec2(1.0f,1.0f)}, Vertex2D{glm::vec2(0.5f,0.5f), glm::vec2(1.0f,0.0f)}, Vertex2D{glm::vec2(-0.5f,0.5f), glm::vec2(0.0f,0.0f)} }); std::vector indices({ 0,1,3, 1,2,3 }); obj = new Mesh(vertices,indices,assets->getTexture("police_officer")); inputHandler = new InputHandler(); font = new BitmapFont("arial.ttf"); camera = new OrtographicCamera(); entityx::EntityX ex; entityx::Entity charakter = ex.entities.create(); charakter.assign(); #ifndef NDEBUG //Setup IMGUI debugging ImGui::CreateContext(); ImGui_ImplSdlGL3_Init(this->gWindow); ImGui::StyleColorsDark(); #endif } void DarkRP2D::loop(unsigned int delta) { static unsigned int accumulator = 0, ups = 0, fps = 0, acc = 0; accumulator += delta; acc += delta; while(accumulator >= 17) { accumulator -= 17; update(delta); ups++; } if(acc >= 1000) { std::cout << "Updates per second: " << ups << " Frames per Second: " << fps << std::endl; acc -= 1000; ups = 0; fps = 0; } render(delta); fps++; } void DarkRP2D::update(unsigned int delta) { SDL_Event event; while(SDL_PollEvent(&event) != 0) { Command* command = inputHandler->handleInput(&event); if (command) { command->execute(); } } //camera update } #ifndef NDEBUG bool show_demo_window = true; bool show_another_window = false; ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); #endif void DarkRP2D::render(unsigned int delta) { renderer->clear(); #ifndef NDEBUG ImGui_ImplSdlGL3_NewFrame(gWindow); #endif //Drawing Shader defaultShader = assets->getShader("defaultShader"); defaultShader.SetMatrix4("MVP",camera->getCombinedMatrix(),true); //Draw Mesh renderer->draw(*obj,defaultShader); //texttest Shader bitmapShader = assets->getShader("bitmapShader"); font->drawText(bitmapShader, "Hallo du noob", 25.0f, 25.0f, 1.f, glm::vec3(0.5f,0.8f,0.2f)); #ifndef NDEBUG // 1. Show a simple window. // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". { static float f = 0.0f; static int counter = 0; ImGui::Text("-------------------OpenGL Info-------------------------"); ImGui::Text("GLEW Version: %s\n", glewGetString(GLEW_VERSION)); ImGui::Text(" Version: %s\n", glGetString(GL_VERSION)); ImGui::Text(" Vendor: %s\n", glGetString(GL_VENDOR)); ImGui::Text(" Renderer: %s\n", glGetString(GL_RENDERER)); ImGui::Text(" Shading: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); ImGui::Text("----------------------------------------------------------"); ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); } ImGui::Render(); ImGui_ImplSdlGL3_RenderDrawData(ImGui::GetDrawData()); #endif SDL_GL_SwapWindow(gWindow); } void DarkRP2D::resize(int width, int height){ }