A 2D tile-based sandbox game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.cc 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <vector>
  2. #include <time.h>
  3. #include <unistd.h>
  4. #include "common.h"
  5. #include "Player.h"
  6. #include "Game.h"
  7. double getTime() {
  8. struct timespec ts;
  9. clock_gettime(CLOCK_MONOTONIC, &ts);
  10. return (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000.0;
  11. }
  12. template<typename T>
  13. void draw_ents(std::vector<T> ents) {
  14. for (auto &ent: ents)
  15. ent.draw();
  16. }
  17. int main() {
  18. sf::RenderWindow window(sf::VideoMode(800, 600), "good gaem");
  19. window.setVerticalSyncEnabled(true);
  20. sf::Transform transform;
  21. transform.scale(UNIT_SIZE, UNIT_SIZE);
  22. Win win = { window, transform };
  23. Game game;
  24. game.player_ = new Player(Vec2(1, 1));
  25. game.current_plane_ = new WorldPlane();
  26. game.planes_.push_back(game.current_plane_);
  27. double prevtime = getTime();
  28. double fpsAcc = 0;
  29. double tickAcc = 0;
  30. int fcount = 0;
  31. while (window.isOpen()) {
  32. sf::Event event;
  33. while (window.pollEvent(event)) {
  34. if (event.type == sf::Event::Closed) {
  35. window.close();
  36. } else if (event.type == sf::Event::Resized) {
  37. sf::FloatRect visibleArea(0, 0, event.size.width, event.size.height);
  38. window.setView(sf::View(visibleArea));
  39. }
  40. }
  41. // Display FPS
  42. double now = getTime();
  43. double dt = now - prevtime;
  44. prevtime = now;
  45. fpsAcc += dt;
  46. fcount += 1;
  47. if (fpsAcc >= 1) {
  48. fprintf(stderr, "FPS: %i\n", fcount);
  49. fpsAcc -= 1;
  50. fcount = 0;
  51. }
  52. game.update(dt);
  53. // Call tick TICK_RATE times per second
  54. tickAcc += dt;
  55. while (tickAcc >= 1.0 / TICK_RATE) {
  56. tickAcc -= 1.0 / TICK_RATE;
  57. game.tick();
  58. }
  59. window.clear(sf::Color(135, 206, 250));
  60. game.draw(win);
  61. window.display();
  62. }
  63. return 0;
  64. }