Main.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <iostream>
  2. #include <getopt.h>
  3. #include "Game.h"
  4. #include "rendering/Renderer.h"
  5. #include "rendering/Shader.h"
  6. #include "rendering/Window.h"
  7. #include "rendering/WindowOptions.h"
  8. #include "utils/Clock.h"
  9. #include "wrapper/GL.h"
  10. bool parseArgs(int argAmount, char* const* args, WindowOptions& 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. int main(int argAmount, char* const* args) {
  21. Size size(800, 480);
  22. WindowOptions options(3, 0, size, true, "Pigine");
  23. if(parseArgs(argAmount, args, options)) {
  24. return 0;
  25. }
  26. Window w;
  27. Error error = w.open(options);
  28. if(error.has()) {
  29. error.message.printLine();
  30. return 0;
  31. }
  32. Shader cubeShader;
  33. error = cubeShader.compile("resources/shader/vertex.vs",
  34. "resources/shader/fragment.fs");
  35. if(error.has()) {
  36. error.message.printLine();
  37. return 0;
  38. }
  39. Controller controller(w.buttons);
  40. static Game game(controller, w.getFrameClock(), w.getTickClock(), size);
  41. struct GameBase {
  42. Window& window;
  43. Game& game;
  44. Shader& shader;
  45. Renderer renderer;
  46. GameBase(Window& w, Game& g, Shader& s)
  47. : window(w), game(g), shader(s), renderer(s) {
  48. }
  49. void tick() {
  50. game.tick();
  51. }
  52. void render(float lag) {
  53. GL::clear();
  54. const Size& size = window.getSize();
  55. GL::setViewport(size.width, size.height);
  56. Matrix view;
  57. view.scale(Vector3(2.0f / size.width, -2.0f / size.height, 1.0f));
  58. view.translate(Vector3(-1.0f, 1.0f, 0.0f));
  59. shader.setMatrix("view", view.getValues());
  60. game.render(lag, renderer);
  61. GL::printError("GL-Error");
  62. }
  63. bool isRunning() const {
  64. return game.isRunning();
  65. }
  66. };
  67. GameBase base(w, game, cubeShader);
  68. w.run(base, 10'000'000);
  69. return 0;
  70. }