Graphics.cpp 1.5 KB

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