Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F102541
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
29 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
R82 deerportal
Attached
Detach File
Event Timeline
Log In to Comment