Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F102511
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
28 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/elemsdescription.h b/elemsdescription.h
index 0f29714..e78e032 100644
--- a/elemsdescription.h
+++ b/elemsdescription.h
@@ -1,263 +1,263 @@
#ifndef ELEMSDESCRIPTION_H
#define ELEMSDESCRIPTION_H
-
+/*
static int fields[256][6] = {
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
{10,2,10,0,2,2},
};
-
+*/
#endif // ELEMSDESCRIPTION_H
diff --git a/game.cpp b/game.cpp
index 5e9ec42..b43a04e 100644
--- a/game.cpp
+++ b/game.cpp
@@ -1,284 +1,292 @@
#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);
setCurrentNeighbours();
}
void Game::setCurrentNeighbours ()
{
currentNeighbours = players[turn].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)),
viewFull(sf::FloatRect(00, 00, 400, 400)),
viewGui(sf::FloatRect(00, 00, 112, 400)),
selector(efc::TILE_SIZE),
guiSelectBuilding(&textures),
turn(0)
{
window.setVerticalSyncEnabled(true);
Hover hover;
GuiWindow guiWindow(&textures);
currentState = state_init;
std::srand (time(NULL));
loadAssets();
viewGui.setViewport(sf::FloatRect(0.8f,0, 1.0f, 1.0f));
viewTiles.setViewport(sf::FloatRect(0,0, 0.8f, 1.0f));
selector.changeColor(turn); //This is only for the test TODO: remove
initBoard();
currentState = state_game;
// run the main loop
while (window.isOpen())
{
// handle events
sf::Event event;
while (window.pollEvent(event))
{
sf::Vector2i localPositionTmp = sf::Mouse::getPosition(window);
sf::Vector2f localPosition = window.mapPixelToCoords(localPositionTmp,viewTiles);
+ sf::Vector2f localPositionGui = window.mapPixelToCoords(localPositionTmp,viewGui);
+
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 (event.type == sf::Event::MouseButtonReleased)
{
if (event.mouseButton.button == sf::Mouse::Left)
{
if (currentState==state_menu)
{
}
if (currentState==state_game)
{
if (currentNeighbours.find(mousePos) != currentNeighbours.end())
{
- std::cout << "SUPER" << std::endl;
+// std::cout << "SUPER" << std::endl;
if (!guiSelectBuilding.active)
{
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;
selectedPos = mousePos;
guiSelectBuilding.setPosition(hover_x, hover_y);
guiSelectBuilding.active = true;
currentState = state_gui_elem;
}
break;
}
- nextPlayer();
+
+ std::string result = players[turn].getElem(localPositionGui);
+// std::cout << result << " hello" << turn << std::endl;
+ command(result);
+
+
+// nextPlayer();
}
if (currentState==state_gui_elem)
{
std::string result = guiSelectBuilding.getElem(localPosition);
command(result);
}
}
}
if ((localPosition.x>=0) && (localPosition.y>=0) && (localPosition.x<=efc::BOARD_SIZE*efc::TILE_SIZE) && (localPosition.y<=efc::BOARD_SIZE*efc::TILE_SIZE))
{
selector.setPosition((int) (localPosition.x / efc::TILE_SIZE)*efc::TILE_SIZE, ((int) localPosition.y / efc::TILE_SIZE)*efc::TILE_SIZE);
}
}
render();
}
}
void Game::nextPlayer(){
players[turn].updatePlayer();
turn++;
if (turn==4)
turn = 0;
selector.changeColor(turn);
for (int i=0;i<4;i++)
{
if (i==turn)
{
players[i].setActive(true);
currentNeighbours = players[i].getNeighbours();
}
else
players[i].setActive(false);
}
}
void Game::drawPlayersGui(){
for (int i=0;i<4;i++)
{
window.draw(players[i]);
}
}
void Game::drawSquares() {
window.draw(selector);
}
void Game::update()
{
}
void Game::render()
{
window.clear();
if (currentState==state_game)
{
window.setView(viewTiles);
window.draw(map);
for (int i=0;i<4;i++)
{
window.draw(players[i].elems);
}
drawSquares();
window.setView(viewGui);
drawPlayersGui();
} else if (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::command(std::string command){
if (command=="close")
currentState=state_game;
if (command=="end_turn")
nextPlayer();
if (command.find("build_")==0)
{
int buildingType = std::stoi(command.substr(6));
players[turn].addElem(selectedPos, buildingType);
currentState = state_game;
setCurrentNeighbours();
}
}
sf::Vector2f Game::getMousePos(){
sf::Vector2i mousePosTmp(sf::Mouse::getPosition(window));
sf::Vector2f mousePosition(window.mapPixelToCoords(mousePosTmp,viewTiles));
return mousePosition;
}
}
diff --git a/guichoosebuilding.cpp b/guichoosebuilding.cpp
index c6cd151..42e1c50 100644
--- a/guichoosebuilding.cpp
+++ b/guichoosebuilding.cpp
@@ -1,61 +1,60 @@
#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;
+// 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/playerhud.cpp b/playerhud.cpp
index 0c9510b..9733225 100644
--- a/playerhud.cpp
+++ b/playerhud.cpp
@@ -1,157 +1,186 @@
#include "playerhud.h"
#include "textureholder.h"
#include "boardelem.h"
void PlayerHud::addElem(int pos, int type) {
efc::BoardElem startElem(textures, pos,type);
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::cout << "adding " << i.first << std::endl;
std::set<int> neighboursVector(efc::getNeighbours(i.second.pos));
for (int j: neighboursVector)
{
- std::cout << "neigh " << j << " " << elems.items_map.count(j) << std::endl;
+// std::cout << "neigh " << j << " " << elems.items_map.count(j) << std::endl;
if (elems.items_map.count(j) == 0)
{
neighbours.insert(j);
}
}
}
return neighbours;
}
void PlayerHud::updatePlayer(){
for (const efc::BoardElem &i: elems.items)
{
int cashUpd = textures->tilesDescription[i.type][1];
int foodUpd = textures->tilesDescription[i.type][3];
int enrgUpd = textures->tilesDescription[i.type][3];
cash += cashUpd;
energy += enrgUpd;
food += foodUpd;
txtCash.setString("Cash: " + std::to_string(cash));
std::cout << "CASH " << i.type << " " << i.pos << " " << cashUpd << " " << cash<< std::endl;
}
}
PlayerHud::PlayerHud()
{
active = false;
food = 0;
cash = 0;
energy = 0;
}
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;
this->textures = textures;
efc::BoardElem startElem(textures, startPlayers[pos],441);
elems.items.push_back(startElem);
elems.items_map.insert({startPlayers[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);
txtNextRound.setFont(*gameFont);
txtNextRound.setString("End Turn");
txtNextRound.setScale(sf::Vector2f(0.25f, 1.f));
txtNextRound.setCharacterSize(10);
txtNextRound.setPosition(9,(pos*100)+10);
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.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));
+
+ rectangle.setSize(sf::Vector2f(this->faceSize, this->faceSize));
+ rectangle2.setSize(sf::Vector2f(this->faceSize, (this->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);
+ buttons.insert({"end_turn",rectangle});
+
+}
+
+std::string PlayerHud::getElem(sf::Vector2f mousePosition) {
+ std::string result = "";
+ sf::Vector2f hoverPos = getPosition();
+ for (std::pair<std::string, sf::RectangleShape> i: buttons)
+ {
+ 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;
+}
+
+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));
+
+
target.draw(rectangle, states);
target.draw(rectangle2, states);
target.draw(txtCash, states);
target.draw(txtFood, states);
target.draw(txtEnergy, states);
if (active)
target.draw(txtNextRound, states);
target.draw(spriteFace, states);
}
diff --git a/playerhud.h b/playerhud.h
index d2ab1cb..3023562 100644
--- a/playerhud.h
+++ b/playerhud.h
@@ -1,52 +1,57 @@
#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"
#include "elemsdescription.h"
+#include "guiwindow.h"
static int startPlayers[4] = {0,15,240,255};
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);
void updatePlayer();
+ std::string getElem(sf::Vector2f mousePosition);
+ std::map<std::string, sf::RectangleShape> buttons;
private:
sf::Sprite spriteFace;
sf::Text txtCash;
sf::Text txtEnergy;
sf::Text txtFood;
sf::Text txtNextRound;
int faceSize;
int tileSize;
TextureHolder *textures;
+ sf::RectangleShape rectangle;
+ sf::RectangleShape rectangle2;
};
#endif // PLAYERHUD_H
diff --git a/tilemap.cpp b/tilemap.cpp
index 29604ab..a80ce9d 100644
--- a/tilemap.cpp
+++ b/tilemap.cpp
@@ -1,119 +1,119 @@
#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;
+// std::cout << "debug transPosIntoRect " << pos << " "<< cords.x << " " << cords.y << " " << posRect.left << " " << posRect.top << std::endl;
return posRect;
}
std::set<int> getNeighbours(int pos) {
sf::Vector2i cords = efc::transPosition(pos);
std::vector<int> neighbours;
std::set<int> neighboursSet;
if (cords.x>0)
{
neighbours.push_back(pos-1);
neighboursSet.insert(pos-1);
}
if (cords.x<efc::BOARD_SIZE-1)
{
neighbours.push_back(pos+1);
neighboursSet.insert(pos+1);
}
if (cords.y>0)
{
neighbours.push_back(pos-efc::BOARD_SIZE);
neighboursSet.insert(pos-efc::BOARD_SIZE);
}
if (cords.y<efc::BOARD_SIZE)
{
neighbours.push_back(pos+efc::BOARD_SIZE);
neighboursSet.insert(pos+efc::BOARD_SIZE);
}
return neighboursSet;
}
}
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;
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Feb 2, 9:10 PM (1 d, 22 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
55582
Default Alt Text
(28 KB)
Attached To
Mode
R82 deerportal
Attached
Detach File
Event Timeline
Log In to Comment