Graphics.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "Graphics.h"
  2. #include "sfwindow.h"
  3. #include <SFML/Graphics.hpp>
  4. #include "utility/misc.h"
  5. #define GRAPHICS WalrusRPG::Graphics
  6. sf::RenderWindow window;
  7. sf::View view;
  8. sf::RenderTexture buffer;
  9. void GRAPHICS::init()
  10. {
  11. window.create(sf::VideoMode::getDesktopMode(), "WalrusRPG", sf::Style::Fullscreen);
  12. window.setVerticalSyncEnabled(true);
  13. window.setFramerateLimit(60);
  14. view = sf::View(window.getDefaultView());
  15. buffer.create(320, 240);
  16. }
  17. void GRAPHICS::deinit()
  18. {
  19. window.close();
  20. }
  21. void GRAPHICS::frame_begin()
  22. {
  23. window.clear(sf::Color::Black);
  24. }
  25. void GRAPHICS::frame_end()
  26. {
  27. sf::Sprite sprite(buffer.getTexture());
  28. sf::Vector2u winsize = window.getSize();
  29. sf::Event event;
  30. float scale = min(winsize.x / 320.f, winsize.y / 240.f);
  31. while (window.pollEvent(event))
  32. {
  33. }
  34. window.setView(view = sf::View(sf::FloatRect(0, 0, winsize.x, winsize.y)));
  35. buffer.display();
  36. window.clear();
  37. sprite.setScale(scale, scale);
  38. sprite.setPosition((winsize.x - 320.f * scale) / 2, (winsize.y - 240.f * scale) / 2);
  39. window.draw(sprite);
  40. window.display();
  41. }
  42. void GRAPHICS::put_sprite(const Texture &sheet, int x, int y,
  43. const WalrusRPG::Utils::Rect &window)
  44. {
  45. sf::Sprite sprite;
  46. sprite.setTexture(sheet.data);
  47. sprite.setTextureRect(sf::IntRect(window.x, window.y, window.width, window.height));
  48. sprite.setPosition(x, y);
  49. buffer.draw(sprite);
  50. }
  51. void GRAPHICS::fill(const WalrusRPG::Graphics::Pixel &color)
  52. {
  53. UNUSED(color);
  54. }