Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F102514
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
17 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/boardelem.cpp b/boardelem.cpp
index dffa9aa..2b3a50e 100644
--- a/boardelem.cpp
+++ b/boardelem.cpp
@@ -1,36 +1,50 @@
#include "boardelem.h"
-BoardElem::BoardElem(TextureHolder *textures,int pos, int type, const sf::Texture *textureElem)
+namespace efc {
+sf::RectangleShape createNeighbour(int pos) {
+
+ sf::RectangleShape rectangle(sf::Vector2f(efc::TILE_SIZE, efc::TILE_SIZE));
+ sf::Vector2i cords(efc::transPosition(pos));
+
+ rectangle.setFillColor(sf::Color(240, 240, 240,168));
+ rectangle.setOutlineColor(sf::Color(24,24,24));
+
+ rectangle.setPosition(cords.x*efc::TILE_SIZE, cords.y*efc::TILE_SIZE);
+
+ rectangle.setOutlineThickness(1);
+ return rectangle;
+
+}
+}
+
+efc::BoardElem::BoardElem(TextureHolder *textures,int pos, int type, const sf::Texture *textureElem)
{
-// this->textureElem = textureElem;
+
+ textureTiles = &textures->textureTiles;
this->pos = pos;
- this->textures = textures;
this->type = type;
- // setPosition()
- int y = (int) pos / 16;
- int x = pos % 16;
+ sf::Vector2i cords = efc::transPosition(pos);
+ int y_type = (int) type / efc::TILE_BOARD_SIZE;
+ int x_type = type % efc::TILE_BOARD_SIZE;
+
+ setPosition(cords.x*efc::TILE_SIZE,cords.y*efc::TILE_SIZE);
+ setTexture(textures->textureTiles);
+ setTextureRect(sf::IntRect(x_type*efc::TILE_SIZE, y_type*efc::TILE_SIZE, efc::TILE_SIZE, efc::TILE_SIZE));
+
- int y_type = (int) type / 40;
- int x_type = type % 40 ;
- this->textureElem = std::move(textureElem);
- std::cout << "TYPE " << type << " x_type " << x_type << " : " << x_type * efc::TILE_SIZE << " y " << y_type << " : " << y_type * efc::TILE_SIZE << std::endl;
-//std::cout << "x_type " << x_type << " : " << x_type * efc::TILE_SIZE << " y_type " << y_type << " : " << y_type * efc::TILE_SIZE << std::endl;
- setPosition(x*efc::TILE_SIZE,y*efc::TILE_SIZE);
-// setPosition(375,375);
- setTexture(myHolder.textureTiles);
- setTextureRect(sf::IntRect(x_type*efc::TILE_SIZE, y_type*efc::TILE_SIZE, efc::TILE_SIZE, efc::TILE_SIZE));
}
+
diff --git a/boardelem.h b/boardelem.h
index 5bf9e3a..fbb05d7 100644
--- a/boardelem.h
+++ b/boardelem.h
@@ -1,26 +1,35 @@
#ifndef BOARDELEM_H
#define BOARDELEM_H
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "tilemap.h"
#include "textureholder.h"
+namespace efc {
+sf::RectangleShape createNeighbour(int pos);
+
class BoardElem: public sf::Sprite
{
public:
BoardElem();
BoardElem(TextureHolder *textures,int pos, int type, const sf::Texture *textureElem);
+
int pos;
int type;
-
+ sf::Texture* textureTiles;
private:
const sf::Texture* textureElem;
static const sf::Texture& textureElem2;
+
+
+
+
TextureHolder *textures;
TextureHolder myHolder;
};
+}
#endif // BOARDELEM_H
diff --git a/boardelems.cpp b/boardelems.cpp
index 0dfc5a9..93ba9ab 100644
--- a/boardelems.cpp
+++ b/boardelems.cpp
@@ -1,21 +1,31 @@
#include "boardelems.h"
BoardElems::BoardElems()
{
+ active = false;
}
+
+
void BoardElems::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
- // apply the transform
states.transform *= getTransform();
- // apply the tileset texture
- // draw the vertex array
- for (BoardElem i: items)
+ 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 47ce3f2..48f3222 100644
--- a/boardelems.h
+++ b/boardelems.h
@@ -1,15 +1,18 @@
#ifndef BOARDELEMS_H
#define BOARDELEMS_H
#include "boardelem.h"
class BoardElems: public sf::Drawable, public sf::Transformable
{
public:
BoardElems();
- std::vector<BoardElem> items;
+ 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/game.cpp b/game.cpp
index bfc1f73..9b354eb 100644
--- a/game.cpp
+++ b/game.cpp
@@ -1,172 +1,179 @@
#include <stdlib.h>
#include <iostream>
#include "game.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, mapSize, mapSize);
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);
}
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()
{
mapSize = 16;
std::srand (time(NULL));
int turn = 0;
loadAssets();
sf::RenderWindow window(sf::VideoMode(512, 400), "EnFuCraft");
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();
// run the main loop
while (window.isOpen())
{
// handle events
sf::Event event;
while (window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::MouseButtonPressed)
{
if (event.mouseButton.button == sf::Mouse::Left)
{
std::cout << "the right button was pressed" << std::endl;
std::cout << "mouse x: " << event.mouseButton.x << std::endl;
std::cout << "mouse y: " << event.mouseButton.y << std::endl;
turn++;
if (turn==4)
turn = 0;
selector.changeColor(turn);
+ for (int i=0;i<4;i++)
+ {
+ if (i==turn)
+ players[i].setActive(true);
+ else
+ players[i].setActive(false);
+ }
}
}
}
//
sf::Vector2i localPositionTmp = sf::Mouse::getPosition(window);
sf::Vector2f localPosition = window.mapPixelToCoords(localPositionTmp,viewTiles);
if ((localPosition.x>=0) && (localPosition.y>=0) && (localPosition.x<=mapSize*efc::TILE_SIZE) && (localPosition.y<=mapSize*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();
window.setView(viewTiles);
window.draw(map);
// window.draw(mapElem);
for (int i=0;i<4;i++)
{
window.draw(players[i].elems);
}
window.draw(selector);
window.setView(viewGui);
for (int i=0;i<4;i++)
{
window.draw(players[i]);
}
window.display();
}
}
}
diff --git a/playerhud.cpp b/playerhud.cpp
index 0ac1841..39ff863 100644
--- a/playerhud.cpp
+++ b/playerhud.cpp
@@ -1,98 +1,104 @@
#include "playerhud.h"
#include "textureholder.h"
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;
- BoardElem startElem(textures, startPositions[pos],441, &this->textures->textureTiles);
- startElem.setTexture(this->textures->textureTiles);
+ 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 91025fb..a09d11c 100644
--- a/playerhud.h
+++ b/playerhud.h
@@ -1,40 +1,41 @@
#ifndef PLAYERHUD_H
#define PLAYERHUD_H
#include <iostream>
#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;
int pos;
int cash;
int energy;
int food;
+ bool active;
BoardElems elems;
-
+ void setActive(bool newState);
std::vector<int> properties;
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/tilemap.cpp b/tilemap.cpp
index 4d6cf91..e28d352 100644
--- a/tilemap.cpp
+++ b/tilemap.cpp
@@ -1,55 +1,80 @@
#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;
+}
+
+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 7f0feed..36934e2 100644
--- a/tilemap.h
+++ b/tilemap.h
@@ -1,28 +1,33 @@
#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
+ TILE_SIZE = 25,
+ BOARD_SIZE = 16,
+ TILE_BOARD_SIZE = 40
};
+sf::Vector2i transPosition(int pos);
+std::vector<int> getNeighbours(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
Mon, Feb 2, 9:11 PM (2 d, 2 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
55585
Default Alt Text
(17 KB)
Attached To
Mode
R82 deerportal
Attached
Detach File
Event Timeline
Log In to Comment