Engine.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <getopt.h>
  2. #include "Engine.h"
  3. #include "Game.h"
  4. #include "input/Controller.h"
  5. #include "rendering/Shader.h"
  6. #include "rendering/Window.h"
  7. static Shader shader;
  8. static Renderer renderer{shader};
  9. static bool parseArgs(int argAmount, char* const* args,
  10. Window::Options& options) {
  11. while(true) {
  12. switch(getopt(argAmount, args, "fv")) {
  13. case '?': return true;
  14. case 'f': options.fullscreen = true; break;
  15. case 'v': options.vsync = true; break;
  16. case -1: return false;
  17. }
  18. }
  19. }
  20. bool Engine::init(int argAmount, char* const* args) {
  21. Window::Options options(3, 0, {800, 480}, true, "Pigine");
  22. if(parseArgs(argAmount, args, options)) {
  23. return true;
  24. }
  25. Error error = Window::open(options);
  26. if(error.has()) {
  27. error.message.printLine();
  28. return true;
  29. }
  30. error = shader.compile("resources/shader/vertex.vs",
  31. "resources/shader/fragment.fs");
  32. if(error.has()) {
  33. error.message.printLine();
  34. return true;
  35. }
  36. Controller::init();
  37. return false;
  38. }
  39. static void tick() {
  40. Game::tick();
  41. }
  42. static void render(float lag) {
  43. GL::clear();
  44. const IntVector2& size = Window::getSize();
  45. GL::setViewport(size[0], size[1]);
  46. Matrix view;
  47. view.scale(Vector3(2.0f / size[0], -2.0f / size[1], 1.0f));
  48. view.translate(Vector3(-1.0f, 1.0f, 0.0f));
  49. shader.setMatrix("view", view.getValues());
  50. Game::render(lag, renderer);
  51. GL::printError("GL-Error");
  52. }
  53. static bool isRunning() {
  54. return Game::isRunning();
  55. }
  56. void Engine::start() {
  57. renderer.init();
  58. Window::show();
  59. Window::run<isRunning, tick, render>(10'000'000);
  60. }
  61. const IntVector2& Engine::getSize() {
  62. return Window::getSize();
  63. }