|
@@ -74,16 +74,58 @@ void Graphics::put_sprite_tint(const WalrusRPG::Graphics::Texture &sheet, int x,
|
|
|
buffer.draw(sprite);
|
|
buffer.draw(sprite);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void Graphics::put_sprite_clipping(const Texture &sheet, int x, int y, const Rect &sprite_window, const Rect &clipping_window)
|
|
|
|
|
+{
|
|
|
|
|
+ const signed &ss_x = sprite_window.x, ss_y = sprite_window.y;
|
|
|
|
|
+ const signed &ss_w = sprite_window.width, &ss_h = sprite_window.height;
|
|
|
|
|
+ const signed &cx = clipping_window.x, &cy = clipping_window.y;
|
|
|
|
|
+ const signed &cw = clipping_window.width, &ch = clipping_window.height;
|
|
|
|
|
+ const signed lx = x - cx, ly = y - cy;
|
|
|
|
|
+
|
|
|
|
|
+ if(lx < -ss_w || lx > cw) return;
|
|
|
|
|
+ if(ly < -ss_h || ly > ch) return;
|
|
|
|
|
+
|
|
|
|
|
+ signed fx = x, fy = y;
|
|
|
|
|
+ signed fssx = ss_x, fssy = ss_y, fssw = ss_w, fssh = ss_h;
|
|
|
|
|
+
|
|
|
|
|
+ if(lx < 0) {
|
|
|
|
|
+ fssw = ss_w+lx;
|
|
|
|
|
+ fssx = -lx;
|
|
|
|
|
+ fx = cx;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(lx > cw - ss_w) {
|
|
|
|
|
+ fssw -= lx-(cw - ss_w);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(ly > ch - ss_h) {
|
|
|
|
|
+ fssh -= ly-(ch - ss_h);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(ly < 0) {
|
|
|
|
|
+ fssh = ss_h+ly;
|
|
|
|
|
+ fssy = -ly;
|
|
|
|
|
+ fy = cy;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ sf::Sprite sprite;
|
|
|
|
|
+ sprite.setTexture(sheet.data);
|
|
|
|
|
+ sprite.setTextureRect(sf::IntRect(fssx, fssy, fssw, fssh));
|
|
|
|
|
+ sprite.setPosition(fx, fy);
|
|
|
|
|
+ buffer.draw(sprite);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
void Graphics::fill(const Pixel &color)
|
|
void Graphics::fill(const Pixel &color)
|
|
|
{
|
|
{
|
|
|
- buffer.clear(sf::Color(color.r << 3, color.g << 2, color.b << 2, 255));
|
|
|
|
|
|
|
+ buffer.clear(sf::Color(color.r << 3, color.g << 2, color.b << 3, 255));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void Graphics::put_pixel(uint16_t x, uint16_t y, const Pixel &color)
|
|
void Graphics::put_pixel(uint16_t x, uint16_t y, const Pixel &color)
|
|
|
{
|
|
{
|
|
|
sf::RectangleShape pixel;
|
|
sf::RectangleShape pixel;
|
|
|
pixel.setSize(sf::Vector2f(1, 1));
|
|
pixel.setSize(sf::Vector2f(1, 1));
|
|
|
- pixel.setFillColor(sf::Color(color.r << 3, color.g << 2, color.b << 3));
|
|
|
|
|
|
|
+ pixel.setFillColor(sf::Color(color.r << 3, color.g << 2, color.b << 3, 255));
|
|
|
pixel.setPosition(x, y);
|
|
pixel.setPosition(x, y);
|
|
|
buffer.draw(pixel);
|
|
buffer.draw(pixel);
|
|
|
}
|
|
}
|
|
@@ -102,7 +144,7 @@ void Graphics::put_vertical_line(uint16_t x, uint16_t y, uint16_t y2, const Pixe
|
|
|
void Graphics::put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2,
|
|
void Graphics::put_line(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2,
|
|
|
const Pixel &color)
|
|
const Pixel &color)
|
|
|
{
|
|
{
|
|
|
- sf::Color lineColor(color.r << 3, color.g << 2, color.b << 3);
|
|
|
|
|
|
|
+ sf::Color lineColor(color.r << 3, color.g << 2, color.b << 3, 255);
|
|
|
sf::Vertex line[] = {sf::Vertex(sf::Vector2f(x, y), lineColor),
|
|
sf::Vertex line[] = {sf::Vertex(sf::Vector2f(x, y), lineColor),
|
|
|
sf::Vertex(sf::Vector2f(x2+1, y2+1), lineColor)};
|
|
sf::Vertex(sf::Vector2f(x2+1, y2+1), lineColor)};
|
|
|
|
|
|
|
@@ -113,7 +155,7 @@ void Graphics::put_rectangle(const Rect &rect, const Pixel &color)
|
|
|
{
|
|
{
|
|
|
sf::RectangleShape rectangle;
|
|
sf::RectangleShape rectangle;
|
|
|
rectangle.setSize(sf::Vector2f(rect.width, rect.height));
|
|
rectangle.setSize(sf::Vector2f(rect.width, rect.height));
|
|
|
- rectangle.setFillColor(sf::Color(color.r << 3, color.g << 2, color.b << 3));
|
|
|
|
|
|
|
+ rectangle.setFillColor(sf::Color(color.r << 3, color.g << 2, color.b << 3, 255));
|
|
|
rectangle.setPosition(rect.x, rect.y);
|
|
rectangle.setPosition(rect.x, rect.y);
|
|
|
buffer.draw(rectangle);
|
|
buffer.draw(rectangle);
|
|
|
}
|
|
}
|