Main.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <iostream>
  2. #include <getopt.h>
  3. #include "Game.h"
  4. #include "gaming-core/rendering/Shader.h"
  5. #include "gaming-core/rendering/Window.h"
  6. #include "gaming-core/rendering/WindowOptions.h"
  7. #include "gaming-core/utils/Clock.h"
  8. #include "gaming-core/wrapper/GL.h"
  9. #include "rendering/Renderer.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. TextInput* input = nullptr;
  27. Window w(input, options);
  28. if(w.getError().has()) {
  29. std::cout << w.getError().message << '\n';
  30. return 0;
  31. }
  32. Shader shader("resources/shader/vertex.vs", "resources/shader/fragment.fs");
  33. if(shader.hasError()) {
  34. return 0;
  35. }
  36. Controller controller(w.getButtons());
  37. static Game game(controller, w.getFrameClock(), w.getTickClock(), size);
  38. struct GameBase {
  39. Window& window;
  40. Game& game;
  41. Shader& shader;
  42. Renderer renderer;
  43. GameBase(Window& w, Game& g, Shader& s)
  44. : window(w), game(g), shader(s), renderer(s) {
  45. }
  46. void tick() {
  47. game.tick();
  48. }
  49. void render(float lag) {
  50. GL::clear();
  51. const Size& size = window.getSize();
  52. GL::setViewport(size.width, size.height);
  53. Matrix view;
  54. view.scale(Vector3(2.0f / size.width, -2.0f / size.height, 1.0f));
  55. view.translate(Vector3(-1.0f, 1.0f, 0.0f));
  56. shader.setMatrix("view", view.getValues());
  57. game.render(lag, renderer);
  58. GL::printError("GL-Error");
  59. }
  60. bool isRunning() const {
  61. return game.isRunning();
  62. }
  63. };
  64. GameBase base(w, game, shader);
  65. w.run(base, 10'000'000);
  66. return 0;
  67. }