Add textures
This commit is contained in:
parent
797ab34246
commit
c2e3cd1679
2 changed files with 62 additions and 36 deletions
BIN
res/texture.png
Normal file
BIN
res/texture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.8 KiB |
98
src/Main.cpp
98
src/Main.cpp
|
@ -2,7 +2,9 @@
|
||||||
#include <SFML/Graphics.hpp>
|
#include <SFML/Graphics.hpp>
|
||||||
#include <SFML/Graphics/Color.hpp>
|
#include <SFML/Graphics/Color.hpp>
|
||||||
#include <SFML/Graphics/Font.hpp>
|
#include <SFML/Graphics/Font.hpp>
|
||||||
|
#include <SFML/Graphics/Rect.hpp>
|
||||||
#include <SFML/Graphics/RectangleShape.hpp>
|
#include <SFML/Graphics/RectangleShape.hpp>
|
||||||
|
#include <SFML/Graphics/Texture.hpp>
|
||||||
#include <SFML/System/Clock.hpp>
|
#include <SFML/System/Clock.hpp>
|
||||||
#include <SFML/System/Vector2.hpp>
|
#include <SFML/System/Vector2.hpp>
|
||||||
#include <SFML/Window/Keyboard.hpp>
|
#include <SFML/Window/Keyboard.hpp>
|
||||||
|
@ -10,28 +12,52 @@
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#define WINDOW_WIDTH 280
|
#define TILE_SIZE 20
|
||||||
#define WINDOW_HEIGHT 400
|
|
||||||
|
|
||||||
#define GRID_WIDTH 14
|
#define GRID_WIDTH 14
|
||||||
#define GRID_HEIGHT 20
|
#define GRID_HEIGHT 20
|
||||||
|
|
||||||
|
#define WINDOW_WIDTH GRID_WIDTH * TILE_SIZE
|
||||||
|
#define WINDOW_HEIGHT GRID_HEIGHT * TILE_SIZE
|
||||||
|
|
||||||
class TileType {
|
class TileType {
|
||||||
public:
|
public:
|
||||||
static TileType white, red, green, blue, yellow, magenta, cyan;
|
sf::IntRect texture_rect;
|
||||||
sf::Color color;
|
sf::IntRect ghost_texture_rect;
|
||||||
TileType(sf::Color _color) {
|
TileType(sf::IntRect _texture_rect, sf::IntRect _ghost_texture_rect) {
|
||||||
color = _color;
|
texture_rect = _texture_rect;
|
||||||
|
ghost_texture_rect = _ghost_texture_rect;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TileType TileType::white = TileType(sf::Color::White);
|
TileType tile_type_0(
|
||||||
TileType TileType::red = TileType(sf::Color::Red);
|
sf::IntRect(0, 0, TILE_SIZE, TILE_SIZE),
|
||||||
TileType TileType::green = TileType(sf::Color::Green);
|
sf::IntRect(0, TILE_SIZE, TILE_SIZE, TILE_SIZE)
|
||||||
TileType TileType::blue = TileType(sf::Color::Blue);
|
);
|
||||||
TileType TileType::yellow = TileType(sf::Color::Yellow);
|
TileType tile_type_1(
|
||||||
TileType TileType::magenta = TileType(sf::Color::Magenta);
|
sf::IntRect(TILE_SIZE, 0, TILE_SIZE, TILE_SIZE),
|
||||||
TileType TileType::cyan = TileType(sf::Color::Cyan);
|
sf::IntRect(TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_SIZE)
|
||||||
|
);
|
||||||
|
TileType tile_type_2(
|
||||||
|
sf::IntRect(TILE_SIZE * 2, 0, TILE_SIZE, TILE_SIZE),
|
||||||
|
sf::IntRect(TILE_SIZE * 2, TILE_SIZE, TILE_SIZE, TILE_SIZE)
|
||||||
|
);
|
||||||
|
TileType tile_type_3(
|
||||||
|
sf::IntRect(TILE_SIZE * 3, 0, TILE_SIZE, TILE_SIZE),
|
||||||
|
sf::IntRect(TILE_SIZE * 3, TILE_SIZE, TILE_SIZE, TILE_SIZE)
|
||||||
|
);
|
||||||
|
TileType tile_type_4(
|
||||||
|
sf::IntRect(TILE_SIZE * 4, 0, TILE_SIZE, TILE_SIZE),
|
||||||
|
sf::IntRect(TILE_SIZE * 4, TILE_SIZE, TILE_SIZE, TILE_SIZE)
|
||||||
|
);
|
||||||
|
TileType tile_type_5(
|
||||||
|
sf::IntRect(TILE_SIZE * 5, 0, TILE_SIZE, TILE_SIZE),
|
||||||
|
sf::IntRect(TILE_SIZE * 5, TILE_SIZE, TILE_SIZE, TILE_SIZE)
|
||||||
|
);
|
||||||
|
TileType tile_type_6(
|
||||||
|
sf::IntRect(TILE_SIZE * 6, 0, TILE_SIZE, TILE_SIZE),
|
||||||
|
sf::IntRect(TILE_SIZE * 6, TILE_SIZE, TILE_SIZE, TILE_SIZE)
|
||||||
|
);
|
||||||
|
|
||||||
class BlockType {
|
class BlockType {
|
||||||
public:
|
public:
|
||||||
|
@ -51,37 +77,37 @@ class BlockType {
|
||||||
};
|
};
|
||||||
|
|
||||||
// https://gamedev.stackexchange.com/a/17978
|
// https://gamedev.stackexchange.com/a/17978
|
||||||
BlockType BlockType::i(&TileType::white, {
|
BlockType BlockType::i(&tile_type_0, {
|
||||||
{0, 0, 0, 0},
|
{0, 0, 0, 0},
|
||||||
{1, 1, 1, 1},
|
{1, 1, 1, 1},
|
||||||
{0, 0, 0, 0},
|
{0, 0, 0, 0},
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
});
|
});
|
||||||
BlockType BlockType::j(&TileType::red, {
|
BlockType BlockType::j(&tile_type_1, {
|
||||||
{1, 0, 0},
|
{1, 0, 0},
|
||||||
{1, 1, 1},
|
{1, 1, 1},
|
||||||
{0, 0, 0}
|
{0, 0, 0}
|
||||||
});
|
});
|
||||||
BlockType BlockType::l(&TileType::green, {
|
BlockType BlockType::l(&tile_type_2, {
|
||||||
{0, 0, 1},
|
{0, 0, 1},
|
||||||
{1, 1, 1},
|
{1, 1, 1},
|
||||||
{0, 0, 0}
|
{0, 0, 0}
|
||||||
});
|
});
|
||||||
BlockType BlockType::o(&TileType::blue, {
|
BlockType BlockType::o(&tile_type_3, {
|
||||||
{1, 1},
|
{1, 1},
|
||||||
{1, 1}
|
{1, 1}
|
||||||
}, false);
|
}, false);
|
||||||
BlockType BlockType::s(&TileType::yellow, {
|
BlockType BlockType::s(&tile_type_4, {
|
||||||
{0, 1, 1},
|
{0, 1, 1},
|
||||||
{1, 1, 0},
|
{1, 1, 0},
|
||||||
{0, 0, 0}
|
{0, 0, 0}
|
||||||
});
|
});
|
||||||
BlockType BlockType::t(&TileType::magenta, {
|
BlockType BlockType::t(&tile_type_5, {
|
||||||
{0, 1, 0},
|
{0, 1, 0},
|
||||||
{1, 1, 1},
|
{1, 1, 1},
|
||||||
{0, 0, 0}
|
{0, 0, 0}
|
||||||
});
|
});
|
||||||
BlockType BlockType::z(&TileType::cyan, {
|
BlockType BlockType::z(&tile_type_6, {
|
||||||
{1, 1, 0},
|
{1, 1, 0},
|
||||||
{0, 1, 1},
|
{0, 1, 1},
|
||||||
{0, 0, 0}
|
{0, 0, 0}
|
||||||
|
@ -146,7 +172,6 @@ int main()
|
||||||
{
|
{
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
|
|
||||||
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "elnutris");
|
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "elnutris");
|
||||||
window.setFramerateLimit(60);
|
window.setFramerateLimit(60);
|
||||||
|
|
||||||
|
@ -154,9 +179,10 @@ int main()
|
||||||
|
|
||||||
TileType* grid[GRID_HEIGHT][GRID_WIDTH] = { nullptr };
|
TileType* grid[GRID_HEIGHT][GRID_WIDTH] = { nullptr };
|
||||||
|
|
||||||
int shape_width = WINDOW_WIDTH / GRID_WIDTH;
|
sf::Texture texture;
|
||||||
int shape_height = WINDOW_HEIGHT / GRID_HEIGHT;
|
texture.loadFromFile("../res/texture.png");
|
||||||
sf::RectangleShape shape(sf::Vector2f(shape_width, shape_height));
|
sf::Sprite sprite;
|
||||||
|
sprite.setTexture(texture);
|
||||||
|
|
||||||
bool snap, rotate, move_left, move_right;
|
bool snap, rotate, move_left, move_right;
|
||||||
sf::Clock update_clock;
|
sf::Clock update_clock;
|
||||||
|
@ -176,6 +202,8 @@ int main()
|
||||||
|
|
||||||
int update_interval = 250;
|
int update_interval = 250;
|
||||||
|
|
||||||
|
auto clear_color = sf::Color(73, 52, 61);
|
||||||
|
|
||||||
while (window.isOpen())
|
while (window.isOpen())
|
||||||
{
|
{
|
||||||
sf::Event event;
|
sf::Event event;
|
||||||
|
@ -280,18 +308,16 @@ int main()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw block
|
// Draw block
|
||||||
window.clear();
|
window.clear(clear_color);
|
||||||
if (!landed) {
|
if (!landed) {
|
||||||
sf::Color ghost_color = block.type->tile_type->color;
|
|
||||||
ghost_color.a = 64;
|
|
||||||
for (auto tile : block.get_tiles()) {
|
for (auto tile : block.get_tiles()) {
|
||||||
int snap_y = tile.y + snap_offset;
|
int snap_y = tile.y + snap_offset;
|
||||||
shape.setFillColor(block.type->tile_type->color);
|
sprite.setTextureRect(block.type->tile_type->texture_rect);
|
||||||
shape.setPosition(tile.x * shape_width, tile.y * shape_height);
|
sprite.setPosition(tile.x * TILE_SIZE, tile.y * TILE_SIZE);
|
||||||
window.draw(shape);
|
window.draw(sprite);
|
||||||
shape.setFillColor(ghost_color);
|
sprite.setTextureRect(block.type->tile_type->ghost_texture_rect);
|
||||||
shape.setPosition(tile.x * shape_width, snap_y * shape_height);
|
sprite.setPosition(tile.x * TILE_SIZE, snap_y * TILE_SIZE);
|
||||||
window.draw(shape);
|
window.draw(sprite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,9 +371,9 @@ int main()
|
||||||
// If tile_type is a nullptr (no block), continue
|
// If tile_type is a nullptr (no block), continue
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
shape.setFillColor(tile_type->color);
|
sprite.setTextureRect(tile_type->texture_rect);
|
||||||
shape.setPosition(x * shape_width, y * shape_height);
|
sprite.setPosition(x * TILE_SIZE, y * TILE_SIZE);
|
||||||
window.draw(shape);
|
window.draw(sprite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
window.draw(text);
|
window.draw(text);
|
||||||
|
|
Loading…
Add table
Reference in a new issue