Graphics.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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.setFramerateLimit(60);
  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. }
  33. window.setView(view = sf::View(sf::FloatRect(0, 0, winsize.x, winsize.y)));
  34. buffer.display();
  35. window.clear();
  36. sprite.setScale(scale, scale);
  37. sprite.setPosition((winsize.x - 320.f * scale) / 2, (winsize.y - 240.f * scale) / 2);
  38. window.draw(sprite);
  39. window.display();
  40. }
  41. void GRAPHICS::put_sprite(const Texture &sheet, int x, int y,
  42. const WalrusRPG::Utils::Rect &window)
  43. {
  44. sf::Sprite sprite;
  45. sprite.setTexture(sheet.data);
  46. sprite.setTextureRect(sf::IntRect(window.x, window.y, window.width, window.height));
  47. sprite.setPosition(x, y);
  48. buffer.draw(sprite);
  49. }
  50. void GRAPHICS::put_sprite_tint(const Texture &sheet, int x, int y,
  51. const WalrusRPG::Utils::Rect &window,
  52. const WalrusRPG::Graphics::Pixel &color)
  53. {
  54. sf::Sprite sprite;
  55. sprite.setTexture(sheet.data);
  56. sprite.setTextureRect(sf::IntRect(window.x, window.y, window.width, window.height));
  57. sprite.setPosition(x, y);
  58. sprite.setColor(sf::Color(color.r<<3, color.g<<2, color.b<<3, 255));
  59. buffer.draw(sprite);
  60. }
  61. void GRAPHICS::fill(const WalrusRPG::Graphics::Pixel &color)
  62. {
  63. buffer.clear(sf::Color(color.r<<3, color.g<<2, color.b<<2, 255));
  64. }
  65. void GRAPHICS::put_pixel(uint16_t x, uint16_t y, const WalrusRPG::Graphics::Pixel &color)
  66. {
  67. sf::RectangleShape pixel;
  68. pixel.setSize(sf::Vector2f(1, 1));
  69. pixel.setFillColor(sf::Color(color.r << 3, color.g << 2, color.b << 3));
  70. pixel.setPosition(x, y);
  71. buffer.draw(pixel);
  72. }