diff options
author | zedarider <ymherklotz@gmail.com> | 2016-12-07 13:55:32 +0000 |
---|---|---|
committer | zedarider <ymherklotz@gmail.com> | 2016-12-07 13:55:32 +0000 |
commit | f6f67ab84012fb08ca8bad0bc80a98977e0d3864 (patch) | |
tree | 632c8db6b20d0e6c0f590036b2c8c42583071098 | |
parent | 1c36505258649bf89ca7c6e55bb5592e34b852f4 (diff) | |
download | A-star-algorithm-f6f67ab84012fb08ca8bad0bc80a98977e0d3864.tar.gz A-star-algorithm-f6f67ab84012fb08ca8bad0bc80a98977e0d3864.zip |
added tiles
-rwxr-xr-x | bin/main | bin | 134624 -> 272952 bytes | |||
-rw-r--r-- | include/TileMap.hpp | 23 | ||||
-rw-r--r-- | res/GridTileTexture.png | bin | 0 -> 3228 bytes | |||
-rw-r--r-- | res/GridTileTexture.xcf | bin | 0 -> 21201 bytes | |||
-rw-r--r-- | res/GridTileTexture2.png | bin | 0 -> 641589 bytes | |||
-rw-r--r-- | res/GridTileTexture3.png | bin | 0 -> 641589 bytes | |||
-rw-r--r-- | src/TileMap.cpp | 64 | ||||
-rw-r--r-- | src/main.cpp | 104 |
8 files changed, 149 insertions, 42 deletions
Binary files differ diff --git a/include/TileMap.hpp b/include/TileMap.hpp new file mode 100644 index 0000000..0eb53fe --- /dev/null +++ b/include/TileMap.hpp @@ -0,0 +1,23 @@ +#ifndef TILEMAP_HPP +#define TILEMAP_HPP + +#include <SFML/Graphics.hpp> + +#include <string> + +class TileMap : public sf::Drawable, public sf::Transformable { +public: + TileMap(); + ~TileMap(); + + bool load(const std::string& txt_file, const sf::Vector2f& txt_size, + const sf::Vector2f& tile_size, const int* tiles, + unsigned int width, unsigned int height); +private: + virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const; + + sf::VertexArray m_vertices; + sf::Texture m_texture; +}; + +#endif diff --git a/res/GridTileTexture.png b/res/GridTileTexture.png Binary files differnew file mode 100644 index 0000000..296bc9c --- /dev/null +++ b/res/GridTileTexture.png diff --git a/res/GridTileTexture.xcf b/res/GridTileTexture.xcf Binary files differnew file mode 100644 index 0000000..a25924a --- /dev/null +++ b/res/GridTileTexture.xcf diff --git a/res/GridTileTexture2.png b/res/GridTileTexture2.png Binary files differnew file mode 100644 index 0000000..f25bdc8 --- /dev/null +++ b/res/GridTileTexture2.png diff --git a/res/GridTileTexture3.png b/res/GridTileTexture3.png Binary files differnew file mode 100644 index 0000000..fb61d00 --- /dev/null +++ b/res/GridTileTexture3.png diff --git a/src/TileMap.cpp b/src/TileMap.cpp new file mode 100644 index 0000000..daa45d4 --- /dev/null +++ b/src/TileMap.cpp @@ -0,0 +1,64 @@ +#include "../include/TileMap.hpp" + +TileMap::TileMap() { + +} + +TileMap::~TileMap() { + +} + +bool TileMap::load(const std::string& txt_file, const sf::Vector2f& txt_size, + const sf::Vector2f& tile_size, const int* tiles, + unsigned int width, unsigned int height) { + + if(!m_texture.loadFromFile(txt_file)) { + return false; + } + + m_vertices.setPrimitiveType(sf::Quads); + m_vertices.resize(width * height * 4); + + for(unsigned int i = 0; i < width; ++i) + for(unsigned int j = 0; j < height; ++j) { + // get the colour of the tile + int tile_number = tiles[i + j * width]; + + // get pointer to vertex of current quad + sf::Vertex *quad = &m_vertices[(i + j * width) * 4]; + + // define the quads + quad[0].position = sf::Vector2f(i * tile_size.x, + j * tile_size.y); + + quad[1].position = sf::Vector2f((i+1) * tile_size.x, + j * tile_size.y); + + quad[2].position = sf::Vector2f((i+1) * tile_size.x, + (j+1) * tile_size.y); + + quad[3].position = sf::Vector2f(i * tile_size.x, + (j+1) * tile_size.y); + + // define texture + quad[0].texCoords = sf::Vector2f(tile_number * txt_size.x, + 0); + + quad[1].texCoords = sf::Vector2f((tile_number+1) * txt_size.x, + 0); + + quad[2].texCoords = sf::Vector2f((tile_number+1) * txt_size.x, + txt_size.y); + + quad[3].texCoords = sf::Vector2f(tile_number * txt_size.x, + txt_size.y); + } + return true; +} + +void TileMap::draw(sf::RenderTarget& target, sf::RenderStates states) const { + states.transform = getTransform(); + states.texture = &m_texture; + + target.draw(m_vertices, states); +} diff --git a/src/main.cpp b/src/main.cpp index bd01b23..11dad93 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,53 +1,73 @@ /* - - description: - - author: Yann Herklotz <ymherklotz@gmail.com> - date created: DD-MM-YYYY - + * + * description: + * + * author: Yann Herklotz <ymherklotz@gmail.com> + * date created: DD-MM-YYYY + * */ +#include "../include/TileMap.hpp" + #include <SFML/Graphics.hpp> #include <iostream> +#include <cstdlib> using namespace std; int main(int argc, char *argv[]) { - cout << "executing " << argv[0] << endl; - cout << "arguments given: " << argc-1 << endl; - - sf::RectangleShape rect(sf::Vector2f(25, 25)); - rect.setFillColor(sf::Color(100, 100, 100)); - - sf::RenderWindow window(sf::VideoMode(800, 600), "A* Algorithm"); - - while(window.isOpen()) { - sf::Event event; - while(window.pollEvent(event)) { - if(event.type == sf::Event::Closed) { - window.close(); - } - } - - if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && rect.getPosition().x > 0) { - rect.move(-0.5f, 0); - } - if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { - rect.move(0.5f, 0); - } - if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { - rect.move(0, -0.5f); - } - if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { - rect.move(0, 0.5f); - } - - - window.clear(sf::Color(47, 47, 47)); - window.draw(rect); - window.display(); - } - - return 0; + cout << "executing " << argv[0] << endl; + cout << "arguments given: " << argc - 1 << endl; + + srand(time(NULL)); + + sf::RenderWindow window(sf::VideoMode(800, 600), "A* Algorithm"); + + cout << "window size: " << window.getSize().x << ", " << window.getSize().y + << endl; + + const int tile_size = 21; + const int rows = 41; + const int cols = 34; + + cout << "tile size: " << tile_size << "px, rows: " << rows << ", cols: " << + cols << endl; + + int tiles[cols * rows]; + + for(int i = 0; i < cols * rows; ++i) + tiles[i] = 0; + + TileMap map; + + while(window.isOpen()) { + sf::Event event; + while(window.pollEvent(event)) + if(event.type == sf::Event::Closed) + window.close(); + + if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) { + sf::Vector2i mouse = sf::Mouse::getPosition(window); + + tiles[(int)(mouse.x / tile_size) + + cols * (int)(mouse.y / tile_size)] = 1; + } else if(sf::Mouse::isButtonPressed(sf::Mouse::Right)) { + sf::Vector2i mouse = sf::Mouse::getPosition(window); + + tiles[(int)(mouse.x / tile_size) + + cols * (int)(mouse.y / tile_size)] = 2; + } + + //tiles[rand() % (rows*cols)] = rand() % 4; + + map.load("res/GridTileTexture3.png", sf::Vector2f(200, 200), + sf::Vector2f(tile_size, tile_size), tiles, cols, rows); + + window.clear(sf::Color(47, 47, 47)); + window.draw(map); + window.display(); + } + + return 0; } |