Page MenuHomePhabricator (Chris)

No OneTemporary

Size
29 KB
Referenced Files
None
Subscribers
None
diff --git a/assets/img/gui.png b/assets/img/gui.png
new file mode 100644
index 0000000..ca1e9e7
Binary files /dev/null and b/assets/img/gui.png differ
diff --git a/boardelems.cpp b/boardelems.cpp
index 93ba9ab..9d9bb22 100644
--- a/boardelems.cpp
+++ b/boardelems.cpp
@@ -1,31 +1,32 @@
#include "boardelems.h"
BoardElems::BoardElems()
{
active = false;
}
+
void BoardElems::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
states.transform *= getTransform();
for (efc::BoardElem i: items)
{
target.draw(i, states);
std::vector<int> neighbours(efc::getNeighbours(i.pos));
if (active==true)
{
for (int j: neighbours)
{
sf::RectangleShape sprite(efc::createNeighbour(j));
target.draw(sprite, states);
}
}
// std::cout << "POS: "<< i.getPosition().x << " " << i.getPosition().y << std::endl;
}
}
diff --git a/boardelems.h b/boardelems.h
index 48f3222..a66a7e6 100644
--- a/boardelems.h
+++ b/boardelems.h
@@ -1,18 +1,17 @@
#ifndef BOARDELEMS_H
#define BOARDELEMS_H
#include "boardelem.h"
class BoardElems: public sf::Drawable, public sf::Transformable
{
public:
BoardElems();
std::vector<efc::BoardElem> items;
std::map<int, efc::BoardElem> items_map;
bool active;
-
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
};
#endif // BOARDELEMS_H
diff --git a/enfucraft.pro b/enfucraft.pro
index 9009830..e5cddab 100644
--- a/enfucraft.pro
+++ b/enfucraft.pro
@@ -1,35 +1,41 @@
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
CONFIG += c++11
SOURCES += main.cpp \
game.cpp \
tilemap.cpp \
selector.cpp \
playerhud.cpp \
boardelem.cpp \
boardelems.cpp \
textureholder.cpp \
- hover.cpp
+ hover.cpp \
+ guiwindow.cpp \
+ purchaseguielem.cpp \
+ guichoosebuilding.cpp
LIBS += -lsfml-window -lsfml-system -lsfml-graphics
DESTDIR = ../build_release_enfucraft
assets.path = $${DESTDIR}/assets
assets.files = assets/*
INSTALLS += assets
HEADERS += \
game.h \
tilemap.h \
selector.h \
playerhud.h \
boardelem.h \
boardelems.h \
textureholder.h \
- hover.h
+ hover.h \
+ guiwindow.h \
+ purchaseguielem.h \
+ guichoosebuilding.h
RESOURCES += \
images.qrc
diff --git a/game.cpp b/game.cpp
index 3339060..c6633df 100644
--- a/game.cpp
+++ b/game.cpp
@@ -1,222 +1,257 @@
#include <stdlib.h>
#include <iostream>
#include "game.h"
+#include "guiwindow.h"
#include <time.h> /* time */
namespace efc {
void Game::initBoard()
{
// Grass tile starts at 342 and has 11 tiles
// int level[256];
// int level[256];
// Structure of the board
/*
{
342, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
80, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,
1, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3 }
*/
// Fill the array
for (int i=0;i<256;i++)
{
int grass = (rand() % 10) + 1;
level[i] = 342 + grass;
level[i] = level[i];
}
// level[0] = 441;
// level[240] = 0;
// level[255] = 0;
// level[15] = 0;
level[8] = 813;
level[24] = 803;
level[40] = 803;
level[56] = 803;
level[72] = 803;
level[88] = 801;
level[167] = 809;
level[183] = 803;
level[199] = 803;
level[215] = 803;
level[231] = 803;
level[247] = 812;
level[112] = 811;
for (int i=113;i<117;i++)
level[i] = 816;
level[117] = 815;
level[138] = 800;
for (int i=139;i<143;i++)
level[i] = 816;
level[143] = 814;
map.load(&textures, sf::Vector2u(efc::TILE_SIZE, efc::TILE_SIZE), level, efc::BOARD_SIZE, efc::BOARD_SIZE);
PlayerHud playerHud1(&textures, std::rand() % 80, &gameFont, 32,0);
PlayerHud playerHud2(&textures, std::rand() % 30, &gameFont, 32,1);
PlayerHud playerHud3(&textures, std::rand() % 60, &gameFont, 32,2);
PlayerHud playerHud4(&textures, std::rand() % 50, &gameFont, 32,3);
players[0] = playerHud1;
players[1] = playerHud2;
players[2] = playerHud3;
players[3] = playerHud4;
players[0].setActive(true);
currentNeighbours = players[0].getNeighbours();
}
void Game::loadAssets()
{
if (!textureFaces.loadFromFile("assets/img/faces.jpg"))
std::exit(1);
if (!textureTiles.loadFromFile("assets/img/zw-tilesets/_MAP.png"))
std::exit(1);
if (!gameFont.loadFromFile("assets/fnt/8bitOperatorPlus-Regular.ttf"))
{
std::exit(1);
}
}
Game::Game():
window(sf::VideoMode(512, 400), "EnFuCraft"),
- viewTiles(sf::FloatRect(00, 00, 400, 400))
-
+ viewTiles(sf::FloatRect(00, 00, 400, 400)),
+ turn(0)
{
+ Hover hover;
+ GuiWindow guiWindow(&textures);
+ GuiChooseBuilding guiSelectBuilding(&textures);
currentState = state_init;
std::srand (time(NULL));
- int turn = 0;
loadAssets();
sf::View viewGui(sf::FloatRect(00, 00, 112, 400));
viewGui.setViewport(sf::FloatRect(0.8f,0, 1.0f, 1.0f));
sf::View viewTiles(sf::FloatRect(00, 00, 400, 400));
viewTiles.setViewport(sf::FloatRect(0,0, 0.8f, 1.0f));
-
Selector selector(efc::TILE_SIZE);
selector.changeColor(turn); //This is only for the test TODO: remove
-
- // TileMap mapElem;
- // if (!mapElem.load(&textureTiles, sf::Vector2u(tileSize, tileSize), levelElems, mapSize, mapSize))
- // std::exit(1);
-
-
initBoard();
currentState = state_game;
// run the main loop
while (window.isOpen())
{
// handle events
sf::Event event;
sf::Vector2i localPositionTmp = sf::Mouse::getPosition(window);
sf::Vector2f localPosition = window.mapPixelToCoords(localPositionTmp,viewTiles);
+ float hover_x =localPosition.x;
+ float hover_y = localPosition.y;
+
+ if (localPosition.y > 290)
+ hover_y = hover_y - 100;
+ if (localPosition.x > 240)
+ hover_x = hover_x - 150;
+
+ if (hover_x>250)
+ hover_x = 249.0f;
+ if (hover_x<0)
+ hover_x = 1.0f;
+ if (hover_y>300)
+ hover_y = 299.0f;
+ if (hover_y<0)
+ hover_y = 1.0f;
+
+
while (window.pollEvent(event))
{
int mousePosX = (int)localPosition.x / efc::TILE_SIZE;
int mousePosY = (int)localPosition.y / efc::TILE_SIZE;
int mousePos = efc::transCords(sf::Vector2i(mousePosX, mousePosY));
if(event.type == sf::Event::Closed)
window.close();
if (currentNeighbours.find(mousePos) != currentNeighbours.end())
{
- std::cout << "SUPER" << std::endl;
+
}
- if (event.type == sf::Event::MouseButtonPressed)
+ if (event.type == sf::Event::MouseButtonReleased)
{
+
+ sf::Vector2i mTP = sf::Mouse::getPosition(window);
+
if (event.mouseButton.button == sf::Mouse::Left)
{
-
if (currentState==state_game)
-
{
+ if (currentNeighbours.find(mousePos) != currentNeighbours.end())
+ {
+ std::cout << "SUPER" << std::endl;
+ if (!guiSelectBuilding.active)
+ {
+ selectedPos = mousePos;
+ guiSelectBuilding.setPosition(hover_x, hover_y);
+ guiSelectBuilding.active = true;
+ currentState = state_gui_elem;
+ }
+ break;
+ }
turn++;
if (turn==4)
turn = 0;
selector.changeColor(turn);
for (int i=0;i<4;i++)
{
if (i==turn)
{
players[i].setActive(true);
if (currentNeighbours.find(mousePos) != currentNeighbours.end())
{
std::cout << "SUPER" << std::endl;
-
}
-// std::set<int>::iterator it;
-// for ( it=currentNeighbours.begin() ; it != currentNeighbours.end(); it++ ) {
-// std::cout << std::to_string(i) << std::endl;
-// }
currentNeighbours = players[i].getNeighbours();
-
}
else
players[i].setActive(false);
}
-
+ }
+ if (currentState==state_gui_elem)
+ {
+ std::string result = guiSelectBuilding.getElem(localPosition);
+ command(result);
}
}
}
}
-
- // localPosition = getMousePos(); // Why this does lag?
-
if ((localPosition.x>=0) && (localPosition.y>=0) && (localPosition.x<=efc::BOARD_SIZE*efc::TILE_SIZE) && (localPosition.y<=efc::BOARD_SIZE*efc::TILE_SIZE))
{
- // std::cout << localPosition.x << " " << localPosition.y << " " << localPosition.x / efc::TILE_SIZE << " " << localPosition.y / efc::TILE_SIZE << std::endl;
selector.setPosition((int) (localPosition.x / efc::TILE_SIZE)*efc::TILE_SIZE, ((int) localPosition.y / efc::TILE_SIZE)*efc::TILE_SIZE);
}
- // draw the map
+
window.clear();
- if (currentState==state_game)
+ if ((currentState==state_game) || (currentState==state_gui_elem))
{
window.setView(viewTiles);
window.draw(map);
for (int i=0;i<4;i++)
{
window.draw(players[i].elems);
}
window.draw(selector);
window.setView(viewGui);
drawPlayersGui();
}
-
+ window.setView(viewTiles);
+ window.draw(guiSelectBuilding);
window.display();
}
}
void Game::drawPlayersGui(){
for (int i=0;i<4;i++)
{
window.draw(players[i]);
}
}
+void Game::command(std::string command){
+ std::cout << "RUNNING:" + command << std::endl;
+ if (command=="close")
+ currentState=state_game;
+ if (command.find("build_")==0)
+ {
+ int buildingType = std::stoi(command.substr(6));
+ std::cout << "building:" + buildingType << " at " << selectedPos << std::endl;
+ players[turn].addElem(selectedPos, buildingType);
+ currentState=state_game;
+ }
+
+}
sf::Vector2f Game::getMousePos(){
sf::Vector2i mousePosTmp(sf::Mouse::getPosition(window));
sf::Vector2f mousePosition(window.mapPixelToCoords(mousePosTmp,viewTiles));
return mousePosition;
}
}
diff --git a/game.h b/game.h
index 66356e5..0c7941b 100644
--- a/game.h
+++ b/game.h
@@ -1,49 +1,55 @@
#ifndef GAME_H
#define GAME_H
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "tilemap.h"
#include "selector.h"
#include "playerhud.h"
#include "textureholder.h"
+#include "hover.h"
+#include "guichoosebuilding.h"
namespace efc {
class Game
{
public:
Game();
sf::RenderWindow window;
sf::View viewTiles;
private:
void initBoard();
void loadAssets();
void drawPlayersGui();
sf::Vector2f getMousePos();
enum states {
state_init,
state_menu,
state_game,
+ state_gui_elem,
state_select_building,
state_quit
};
states currentState;
sf::Texture textureTiles;
sf::Texture textureFaces;
sf::Font gameFont;
TileMap map;
PlayerHud players[4];
int mapSize;
int level[256];
int levelElems[256];
TextureHolder textures;
std::set<int> currentNeighbours;
+ void command(std::string command);
+ int selectedPos;
+ int turn;
};
}
#endif // GAME_H
diff --git a/guichoosebuilding.cpp b/guichoosebuilding.cpp
new file mode 100644
index 0000000..c6cd151
--- /dev/null
+++ b/guichoosebuilding.cpp
@@ -0,0 +1,61 @@
+#include "guichoosebuilding.h"
+#include "tilemap.h"
+
+GuiChooseBuilding::GuiChooseBuilding(TextureHolder *textures)
+ :GuiWindow(textures),
+ textureTiles(textures->textureTiles)
+{
+ // this->textureTiles = &textures->textureGui;
+ std::cout << "constructor" <<std::endl;
+ addBuilding("build_8", 8);
+ addBuilding("build_88", 88);
+ addBuilding("build_328", 328);
+}
+
+void GuiChooseBuilding::addBuilding(std::string name, int pos){
+ sf::Sprite newBuilding;
+
+ newBuilding.setTexture(textureTiles);
+ newBuilding.setTextureRect(efc::transPosIntoRect(pos));
+
+ sf::Vector2f mod((buildings.size()*efc::TILE_SIZE),efc::TILE_SIZE);
+ newBuilding.move(mod);
+ buildings.insert({name, newBuilding});
+ std::cout << "size " << buildings.size() <<std::endl;
+}
+
+void GuiChooseBuilding::draw(sf::RenderTarget& target, sf::RenderStates states) const{
+ if (active==true)
+ {
+ sf::RenderStates states2 = states;
+ states2.transform *= getTransform();
+ GuiWindow::draw(target, states);
+ for (std::pair<std::string, sf::Sprite> i: buildings)
+ {
+ target.draw(i.second, states2);
+ }
+ }
+}
+
+std::string GuiChooseBuilding::getElem(sf::Vector2f mousePosition) {
+ std::string result = GuiWindow::getElem(mousePosition);
+ if (result=="close")
+ return result;
+ sf::Vector2f hoverPos = getPosition();
+ for (std::pair<std::string, sf::Sprite> i: buildings)
+ {
+ sf::FloatRect spriteBounds = i.second.getLocalBounds();
+ sf::FloatRect closeRect;
+ closeRect.left = i.second.getPosition().x;
+ closeRect.top = i.second.getPosition().y;
+ closeRect.width = spriteBounds.width;
+ closeRect.height = spriteBounds.height;
+ if (closeRect.contains(mousePosition.x - hoverPos.x,mousePosition.y - hoverPos.y))
+ {
+ active = false;
+ return i.first;
+ }
+ }
+ return result;
+}
+
diff --git a/guichoosebuilding.h b/guichoosebuilding.h
new file mode 100644
index 0000000..31a82aa
--- /dev/null
+++ b/guichoosebuilding.h
@@ -0,0 +1,18 @@
+#ifndef GUICHOOSEBUILDING_H
+#define GUICHOOSEBUILDING_H
+#include "guiwindow.h"
+
+class GuiChooseBuilding : public GuiWindow
+{
+public:
+ GuiChooseBuilding(TextureHolder *textures);
+ std::map<std::string, sf::Sprite> buildings;
+ void addBuilding(std::string name, int pos);
+ const sf::Texture &textureTiles;
+ void draw(sf::RenderTarget& target, sf::RenderStates states) const;
+ std::string getElem(sf::Vector2f mousePosition);
+
+
+};
+
+#endif // GUICHOOSEBUILDING_H
diff --git a/guiwindow.cpp b/guiwindow.cpp
new file mode 100644
index 0000000..2de0b34
--- /dev/null
+++ b/guiwindow.cpp
@@ -0,0 +1,53 @@
+#include "guiwindow.h"
+
+
+
+GuiWindow::GuiWindow(TextureHolder *textures)
+{
+ spriteClose.setTexture(textures->textureGui);
+ spriteClose.setTextureRect(sf::IntRect(0,0,16,16));
+ spriteClose.move(sf::Vector2f(150-16,0));
+}
+
+GuiWindow::GuiWindow(){
+
+}
+
+void GuiWindow::setTextureHolder(TextureHolder *textures)
+{
+
+ spriteClose.setTexture(textures->textureGui);
+
+}
+
+
+void GuiWindow::init(){
+}
+
+void GuiWindow::draw(sf::RenderTarget& target, sf::RenderStates states) const{
+
+ sf::RenderStates states2 = states;
+ states2.transform *= getTransform();
+
+ Hover::draw(target, states);
+ if (active)
+ target.draw(spriteClose, states2);
+}
+
+std::string GuiWindow::getElem(sf::Vector2f mousePosition)
+{
+ sf::Vector2f hoverPos = getPosition();
+ sf::FloatRect spriteBounds = spriteClose.getLocalBounds();
+ sf::FloatRect closeRect;
+ closeRect.left = spriteClose.getPosition().x;
+ closeRect.top = spriteClose.getPosition().y;
+ closeRect.width = spriteBounds.width;
+ closeRect.height = spriteBounds.height;
+ if (closeRect.contains(mousePosition.x - hoverPos.x,mousePosition.y - hoverPos.y))
+ {
+ active = false;
+ return "close";
+ }
+ else
+ return "";
+}
diff --git a/guiwindow.h b/guiwindow.h
new file mode 100644
index 0000000..fe20681
--- /dev/null
+++ b/guiwindow.h
@@ -0,0 +1,26 @@
+#ifndef GUIWINDOW_H
+#define GUIWINDOW_H
+#include <iostream>
+#include "hover.h"
+#include "textureholder.h"
+
+class GuiWindow: public Hover
+{
+public:
+ GuiWindow(TextureHolder *textures);
+ GuiWindow();
+ void setTextureHolder(TextureHolder *textures);
+
+ sf::Texture* textureGui;
+ virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
+ void init();
+ virtual std::string getElem(sf::Vector2f mousePosition);
+
+
+
+private:
+ sf::Sprite spriteClose;
+
+};
+
+#endif // GUIWINDOW_H
diff --git a/hover.cpp b/hover.cpp
index 3216a23..18f968f 100644
--- a/hover.cpp
+++ b/hover.cpp
@@ -1,5 +1,41 @@
#include "hover.h"
Hover::Hover()
{
+
+ width = 150;
+ height = 100;
+ rectangle.setSize(sf::Vector2f(width, height));
+ init();
+
+}
+
+Hover::Hover(int width, int height)
+{
+
+ this->width = width;
+ this->height = height;
+ rectangle.setSize(sf::Vector2f(width, height));
+ init();
+
}
+
+void Hover::init() {
+ rectangle.setFillColor(sf::Color(230, 230, 233,218));
+ rectangle.setOutlineColor(sf::Color(33,33,33));
+ rectangle.setOutlineThickness(1);
+ active = false;
+}
+
+void Hover::draw (sf::RenderTarget& target, sf::RenderStates states) const
+{
+ states.transform *= getTransform();
+// // apply the tileset texture
+// states.texture = m_tileset;
+
+// // draw the vertex array
+ if (active==true)
+ target.draw(rectangle, states);
+}
+
+
diff --git a/hover.h b/hover.h
index a5d0ec0..6c9519f 100644
--- a/hover.h
+++ b/hover.h
@@ -1,11 +1,25 @@
#ifndef HOVER_H
#define HOVER_H
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
+#include <SFML/System.hpp>
+
class Hover: public sf::Drawable, public sf::Transformable
{
public:
Hover();
+ Hover(int width, int height);
+ virtual void draw(sf::RenderTarget &target, sf::RenderStates states) const;
+
+ sf::RectangleShape rectangle;
+ int width;
+ int height;
+
+ void init();
+
+ bool active;
+
+
};
#endif // HOVER_H
diff --git a/playerhud.cpp b/playerhud.cpp
index a4fb174..13eed61 100644
--- a/playerhud.cpp
+++ b/playerhud.cpp
@@ -1,128 +1,135 @@
#include "playerhud.h"
#include "textureholder.h"
#include "boardelem.h"
+
+void PlayerHud::addElem(int pos, int type) {
+ efc::BoardElem startElem(textures, pos,type, &this->textures->textureTiles);
+ elems.items.push_back(startElem);
+ elems.items_map.insert({pos, startElem});
+}
+
std::set<int> PlayerHud::getNeighbours(){
std::set<int> neighbours;
for (std::pair<int, efc::BoardElem> i: elems.items_map)
{
std::cout << "adding " << i.first << std::endl;
std::vector<int> neighboursVector(efc::getNeighbours(i.second.pos));
for (int j: neighboursVector)
{
neighbours.insert(j);
}
}
return neighbours;
}
PlayerHud::PlayerHud()
{
active = false;
}
void PlayerHud::setActive(bool newState){
active = newState;
elems.active = newState;
}
PlayerHud::PlayerHud(TextureHolder *textures, int faceNumber, sf::Font *gameFont, int faceSize, int pos)
{
active = false;
int startPositions[4] = {0,15,240, 255};
this->textures = textures;
efc::BoardElem startElem(textures, startPositions[pos],441, &this->textures->textureTiles);
elems.items.push_back(startElem);
elems.items_map.insert({pos, startElem});
this->faceSize = faceSize;
spriteFace.setTexture(textures->textureFaces);
this->pos = pos;
food = 0;
cash = 0;
energy = 0;
int x = faceNumber % 10;
int y = (int) faceNumber /10;
txtCash.setFont(*gameFont);
txtFood.setFont(*gameFont);
txtEnergy.setFont(*gameFont);
txtCash.setPosition(1,(pos*100)+40);
txtCash.setString("Cash: " + std::to_string(cash));
txtCash.setCharacterSize(10);
txtCash.setScale(sf::Vector2f(0.25f, 1.f));
txtFood.setPosition(1,(pos*100)+55);
txtFood.setString("Food: " + std::to_string(food));
txtFood.setCharacterSize(10);
txtFood.setScale(sf::Vector2f(0.25f, 1.f));
txtEnergy.setPosition(1,(pos*100)+70);
txtEnergy.setString("Enrg: " + std::to_string(energy));
txtEnergy.setString("Enrg: " + std::to_string(energy));
txtEnergy.setCharacterSize(10);
txtEnergy.setScale(sf::Vector2f(0.25f, 1.f));
std::cout << "playerHud" << faceNumber << " " << x << " " << y << std::endl;
spriteFace.setTextureRect(sf::IntRect(x*faceSize, y*faceSize, faceSize, faceSize));
spriteFace.setScale(sf::Vector2f(0.25f, 1.f));
spriteFace.setPosition(0,pos*100);
}
void PlayerHud::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
// // apply the transform
states.transform *= getTransform();
// Color rectangles making the gui on the right side
sf::RectangleShape rectangle(sf::Vector2f(faceSize, faceSize));
sf::RectangleShape rectangle2(sf::Vector2f(faceSize, (faceSize*2)+3));
if (pos==0)
{
rectangle.setFillColor(sf::Color(50, 50, 150,168));
rectangle2.setFillColor(sf::Color(100, 100, 150,168));
rectangle.setOutlineColor(sf::Color(0,0,128));
}
else if (pos==1)
{
rectangle.setFillColor(sf::Color(50, 150, 50,168));
rectangle2.setFillColor(sf::Color(100, 150,100,168));
rectangle.setOutlineColor(sf::Color(0,128,0));
}
else if (pos==2)
{
rectangle.setFillColor(sf::Color(150, 50, 50,168));
rectangle2.setFillColor(sf::Color(150, 100,100,168));
rectangle.setOutlineColor(sf::Color(128,0,0));
}
else if (pos==3)
{
rectangle.setFillColor(sf::Color(150, 150, 150,168));
rectangle2.setFillColor(sf::Color(200, 200,200,168));
rectangle.setOutlineColor(sf::Color(128,128,128));
}
rectangle.setOutlineThickness(1);
rectangle.setPosition(0, pos*100);
rectangle2.setPosition(0, (pos*100)+faceSize+1);
target.draw(rectangle, states);
target.draw(rectangle2, states);
target.draw(txtCash, states);
target.draw(txtFood, states);
target.draw(txtEnergy, states);
target.draw(spriteFace, states);
}
diff --git a/playerhud.h b/playerhud.h
index 3ac4c6c..ea6a810 100644
--- a/playerhud.h
+++ b/playerhud.h
@@ -1,44 +1,44 @@
#ifndef PLAYERHUD_H
#define PLAYERHUD_H
#include <iostream>
#include <set>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "boardelems.h"
#include "textureholder.h"
class PlayerHud : public sf::Drawable, public sf::Transformable
{
public:
PlayerHud();
PlayerHud(TextureHolder *textures, int faceNumber, sf::Font *gameFont, int tileSize, int pos);
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
std::set<int> getNeighbours();
int pos;
int cash;
int energy;
int food;
bool active;
BoardElems elems;
void setActive(bool newState);
-
-
std::vector<int> properties;
+ void addElem(int pos, int type);
+
private:
-// sf::Font gameFont;
+
sf::Sprite spriteFace;
sf::Text txtCash;
sf::Text txtEnergy;
sf::Text txtFood;
int faceSize;
int tileSize;
TextureHolder *textures;
};
#endif // PLAYERHUD_H
diff --git a/purchaseguielem.cpp b/purchaseguielem.cpp
new file mode 100644
index 0000000..5f3e05e
--- /dev/null
+++ b/purchaseguielem.cpp
@@ -0,0 +1,5 @@
+#include "purchaseguielem.h"
+
+PurchaseGuiElem::PurchaseGuiElem()
+{
+}
diff --git a/purchaseguielem.h b/purchaseguielem.h
new file mode 100644
index 0000000..e7fb0d7
--- /dev/null
+++ b/purchaseguielem.h
@@ -0,0 +1,10 @@
+#ifndef PURCHASEGUIELEM_H
+#define PURCHASEGUIELEM_H
+#include "guiwindow.h"
+class PurchaseGuiElem: GuiWindow
+{
+public:
+ PurchaseGuiElem();
+};
+
+#endif // PURCHASEGUIELEM_H
diff --git a/textureholder.cpp b/textureholder.cpp
index 65e4a0e..43f32d7 100644
--- a/textureholder.cpp
+++ b/textureholder.cpp
@@ -1,9 +1,12 @@
#include "textureholder.h"
TextureHolder::TextureHolder()
{
if (!textureTiles.loadFromFile("assets/img/zw-tilesets/_MAP.png"))
std::exit(1);
if (!textureFaces.loadFromFile("assets/img/faces.jpg"))
std::exit(1);
+ if (!textureGui.loadFromFile("assets/img/gui.png"))
+ std::exit(1);
+
}
diff --git a/textureholder.h b/textureholder.h
index 8979284..01b3f81 100644
--- a/textureholder.h
+++ b/textureholder.h
@@ -1,13 +1,16 @@
#ifndef TEXTUREHOLDER_H
#define TEXTUREHOLDER_H
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
class TextureHolder
{
public:
TextureHolder();
sf::Texture textureTiles;
sf::Texture textureFaces;
+ sf::Texture textureGui;
+
+
};
#endif // TEXTUREHOLDER_H
diff --git a/tilemap.cpp b/tilemap.cpp
index 164ee5c..c8eba46 100644
--- a/tilemap.cpp
+++ b/tilemap.cpp
@@ -1,86 +1,103 @@
#include "tilemap.h"
namespace efc {
sf::Vector2i transPosition(int pos) {
int x = (int) pos % efc::BOARD_SIZE;
int y = (int) pos / efc::BOARD_SIZE;
sf::Vector2i cords(x,y);
+
+ return cords;
+}
+
+sf::Vector2i transTilePosition(int pos) {
+ int x = (int) pos % efc::TILE_BOARD_SIZE;
+ int y = (int) pos / efc::TILE_BOARD_SIZE;
+ sf::Vector2i cords(x,y);
+
return cords;
}
int transCords(sf::Vector2i cords) {
// std::cout << cords.x << " " << cords.y << " " << std::endl;
int pos = (cords.y * efc::BOARD_SIZE)+cords.x;
return pos;
}
+sf::IntRect transPosIntoRect(int pos)
+{
+ sf::Vector2i cords = efc::transTilePosition(pos);
+ sf::IntRect posRect((int)cords.x*efc::TILE_SIZE, (int)cords.y*efc::TILE_SIZE, efc::TILE_SIZE, efc::TILE_SIZE);
+ std::cout << "debug transPosIntoRect " << pos << " "<< cords.x << " " << cords.y << " " << posRect.left << " " << posRect.top << std::endl;
+ return posRect;
+}
+
std::vector<int> getNeighbours(int pos) {
sf::Vector2i cords = efc::transPosition(pos);
std::vector<int> neighbours;
if (cords.x>0)
neighbours.push_back(pos-1);
if (cords.x<efc::BOARD_SIZE-1)
neighbours.push_back(pos+1);
if (cords.y>0)
neighbours.push_back(pos-efc::BOARD_SIZE);
if (cords.y<efc::BOARD_SIZE)
neighbours.push_back(pos+efc::BOARD_SIZE);
return neighbours;
}
}
TileMap::TileMap()
{
}
bool TileMap::load(TextureHolder *textures, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height)
{
this->m_tileset = &textures->textureTiles;
// resize the vertex array to fit the level size
m_vertices.setPrimitiveType(sf::Quads);
m_vertices.resize(width * height * 4);
// populate the vertex array, with one quad per tile
for (unsigned int i = 0; i < width; ++i)
for (unsigned int j = 0; j < height; ++j)
{
// get the current tile number
int tileNumber = tiles[i + j * width];
// find its position in the tileset texture
int tu = tileNumber % (m_tileset->getSize().x / tileSize.x);
int tv = tileNumber / (m_tileset->getSize().x / tileSize.x);
// get a pointer to the current tile's quad
sf::Vertex* quad = &m_vertices[(i + j * width) * 4];
// define its 4 corners
quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);
// define its 4 texture coordinates
quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);
}
return true;
}
void TileMap::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
// apply the transform
states.transform *= getTransform();
// apply the tileset texture
states.texture = m_tileset;
// draw the vertex array
target.draw(m_vertices, states);
}
sf::VertexArray m_vertices;
sf::Texture m_tileset;
diff --git a/tilemap.h b/tilemap.h
index fee2088..692cc77 100644
--- a/tilemap.h
+++ b/tilemap.h
@@ -1,34 +1,38 @@
#ifndef TILEMAP_H
#define TILEMAP_H
#include <iostream>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include "textureholder.h"
namespace efc {
enum {
TILE_SIZE = 25,
BOARD_SIZE = 16,
TILE_BOARD_SIZE = 40
};
sf::Vector2i transPosition(int pos);
int transCords(sf::Vector2i cords);
std::vector<int> getNeighbours(int pos);
+sf::IntRect transPosIntoRect(int pos);
+sf::Vector2i transTilePosition(int pos);
+
+
}
class TileMap : public sf::Drawable, public sf::Transformable
{
public:
bool load(TextureHolder *textures, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height);
TileMap();
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
sf::VertexArray m_vertices;
sf::Texture *m_tileset;
TextureHolder *textures;
};
#endif // TILEMAP_H

File Metadata

Mime Type
text/x-diff
Expires
Wed, Feb 4, 2:09 PM (6 h, 54 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
55612
Default Alt Text
(29 KB)

Event Timeline