A 2D tile-based sandbox game.
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include <vector>
  2. #include <time.h>
  3. #include <unistd.h>
  4. #include <swan/common.h>
  5. #include <swan/Player.h>
  6. #include <swan/World.h>
  7. #include <swan/Game.h>
  8. using namespace Swan;
  9. static double getTime() {
  10. struct timespec ts;
  11. clock_gettime(CLOCK_MONOTONIC, &ts);
  12. return (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000.0;
  13. }
  14. int main() {
  15. sf::RenderWindow window(sf::VideoMode(800, 600), "good gaem");
  16. window.setVerticalSyncEnabled(true);
  17. Win win(&window);
  18. Game game;
  19. game.loadMod("core.mod");
  20. game.createWorld();
  21. game.world_->setCurrentPlane(game.world_->addPlane());
  22. game.world_->player_ = new Player(Vec2(1, 1));
  23. Tile::ID tStone = game.world_->getTileID("core::stone");
  24. Tile::ID tGrass = game.world_->getTileID("core::grass");
  25. WorldPlane &plane = game.world_->getPlane(game.world_->current_plane_);
  26. for (int x = 1; x < 10; ++x) {
  27. for (int y = 3; y < 10; ++y) {
  28. if (y == 3)
  29. plane.setTileID(x, y, tGrass);
  30. else
  31. plane.setTileID(x, y, tStone);
  32. }
  33. }
  34. double prevtime = getTime();
  35. double fpsAcc = 0;
  36. double tickAcc = 0;
  37. int fcount = 0;
  38. while (window.isOpen()) {
  39. sf::Event event;
  40. while (window.pollEvent(event)) {
  41. if (event.type == sf::Event::Closed) {
  42. window.close();
  43. } else if (event.type == sf::Event::Resized) {
  44. sf::FloatRect visibleArea(0, 0, event.size.width, event.size.height);
  45. window.setView(sf::View(visibleArea));
  46. }
  47. }
  48. // Display FPS
  49. double now = getTime();
  50. double dt = now - prevtime;
  51. prevtime = now;
  52. fpsAcc += dt;
  53. fcount += 1;
  54. if (fpsAcc >= 4) {
  55. fprintf(stderr, "FPS: %.3f\n", fcount / 4.0);
  56. fpsAcc -= 4;
  57. fcount = 0;
  58. }
  59. if (dt > 0.1) {
  60. fprintf(stderr, "Warning: delta time is too high! (%.3fs).\n", dt);
  61. } else {
  62. game.update(dt);
  63. // Call tick TICK_RATE times per second
  64. tickAcc += dt;
  65. while (tickAcc >= 1.0 / TICK_RATE) {
  66. tickAcc -= 1.0 / TICK_RATE;
  67. game.tick();
  68. }
  69. }
  70. window.clear();
  71. game.draw(win);
  72. window.display();
  73. }
  74. return 0;
  75. }