aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzedarider <ymherklotz@gmail.com>2016-12-07 13:55:32 +0000
committerzedarider <ymherklotz@gmail.com>2016-12-07 13:55:32 +0000
commitf6f67ab84012fb08ca8bad0bc80a98977e0d3864 (patch)
tree632c8db6b20d0e6c0f590036b2c8c42583071098
parent1c36505258649bf89ca7c6e55bb5592e34b852f4 (diff)
downloadA-star-algorithm-f6f67ab84012fb08ca8bad0bc80a98977e0d3864.tar.gz
A-star-algorithm-f6f67ab84012fb08ca8bad0bc80a98977e0d3864.zip
added tiles
-rwxr-xr-xbin/mainbin134624 -> 272952 bytes
-rw-r--r--include/TileMap.hpp23
-rw-r--r--res/GridTileTexture.pngbin0 -> 3228 bytes
-rw-r--r--res/GridTileTexture.xcfbin0 -> 21201 bytes
-rw-r--r--res/GridTileTexture2.pngbin0 -> 641589 bytes
-rw-r--r--res/GridTileTexture3.pngbin0 -> 641589 bytes
-rw-r--r--src/TileMap.cpp64
-rw-r--r--src/main.cpp104
8 files changed, 149 insertions, 42 deletions
diff --git a/bin/main b/bin/main
index 3eabafc..ad9107a 100755
--- a/bin/main
+++ b/bin/main
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
new file mode 100644
index 0000000..296bc9c
--- /dev/null
+++ b/res/GridTileTexture.png
Binary files differ
diff --git a/res/GridTileTexture.xcf b/res/GridTileTexture.xcf
new file mode 100644
index 0000000..a25924a
--- /dev/null
+++ b/res/GridTileTexture.xcf
Binary files differ
diff --git a/res/GridTileTexture2.png b/res/GridTileTexture2.png
new file mode 100644
index 0000000..f25bdc8
--- /dev/null
+++ b/res/GridTileTexture2.png
Binary files differ
diff --git a/res/GridTileTexture3.png b/res/GridTileTexture3.png
new file mode 100644
index 0000000..fb61d00
--- /dev/null
+++ b/res/GridTileTexture3.png
Binary files differ
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;
}