summaryrefslogtreecommitdiff
path: root/helper.cpp
diff options
context:
space:
mode:
authorStephen Enders <smenders@gmail.com>2021-01-17 15:40:44 -0500
committerStephen Enders <smenders@gmail.com>2021-01-17 15:40:44 -0500
commiteead8271c8ac12e75f52c58bf8a523f1d1897829 (patch)
treedc850bd9fdc6a26c70e405b34e9017ed6531933a /helper.cpp
parent1dbd3c241ea6af43a26449e515438cc241de46ad (diff)
Rolling updates + Score change
Added state Added dice + roll button Updated blank tile graphic
Diffstat (limited to 'helper.cpp')
-rw-r--r--helper.cpp165
1 files changed, 161 insertions, 4 deletions
diff --git a/helper.cpp b/helper.cpp
index 8c68a28..d09318f 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -27,11 +27,100 @@ loadTextures(const char* path)
return textures;
}
-sf::Font loadFont()
+// increment through the textures
+inline int
+next(int* p)
{
- sf::Font font;
- if (!font.loadFromFile("./res/DejaVuSansMono.ttf"))
+ int i = *p;
+ (*p) = (i + 1) % 2;
+ return i;
+}
+
+std::shared_ptr<std::vector<sf::Sprite>>
+createBoard(std::shared_ptr<std::vector<sf::Texture>> textures)
+{
+ auto sprites = std::make_shared<std::vector<sf::Sprite>>();
+ sf::Texture& star_texture = (*textures)[STAR_TILE];
+ sf::Texture& blank_texture = (*textures)[BLANK_TILE];
+ int sp_idx = 0;
+ // p1 pieces
+ // p1 star
{
+ sf::Sprite s;
+ s.setTexture(star_texture);
+ s.setPosition(pos(3, 5));
+ sprites->push_back(s);
+ }
+ // p1 start
+ for (int i = 0; i < 3; i++) {
+ sf::Texture& t = (*textures)[P1_BOARD_TILES[next(&sp_idx)]];
+ sf::Sprite s;
+ s.setTexture(t);
+ s.setPosition(pos(4 + i, 5));
+ sprites->push_back(s);
+ }
+ // p1 end
+ {
+ sf::Sprite end_star;
+ end_star.setTexture(star_texture);
+ end_star.setPosition(pos(9, 5));
+ sprites->push_back(end_star);
+
+ sf::Texture& t = (*textures)[P1_BOARD_TILES[next(&sp_idx)]];
+ sf::Sprite s;
+ s.setTexture(t);
+ s.setPosition(pos(10, 5));
+ sprites->push_back(s);
+ }
+ // center pieces
+ for (int i = 0; i < 8; i++) {
+ sf::Sprite s;
+ if (i == 3) {
+ s.setTexture(star_texture);
+ } else {
+ s.setTexture(blank_texture);
+ }
+ s.setPosition(pos(3 + i, 4));
+ sprites->push_back(s);
+ }
+ // p2 pieces
+ // p2 star
+ {
+ sf::Sprite s;
+ s.setTexture(star_texture);
+ s.setPosition(pos(3, 3));
+ sprites->push_back(s);
+ }
+ // p2 start
+ for (int i = 0; i < 3; i++) {
+ sf::Texture& t = (*textures)[P2_BOARD_TILES[next(&sp_idx)]];
+ sf::Sprite s;
+ s.setTexture(t);
+ s.setPosition(pos(4 + i, 3));
+ sprites->push_back(s);
+ }
+ // p2 end
+ {
+ sf::Sprite end_star;
+ end_star.setTexture(star_texture);
+ end_star.setPosition(pos(9, 3));
+ sprites->push_back(end_star);
+
+ sf::Texture& t = (*textures)[P2_BOARD_TILES[next(&sp_idx)]];
+ sf::Sprite s;
+ s.setTexture(t);
+ s.setPosition(pos(10, 3));
+ sprites->push_back(s);
+ }
+
+ return sprites;
+}
+
+sf::Font
+loadFont()
+{
+ sf::Font font;
+ if (!font.loadFromFile("./res/DejaVuSansMono.ttf")) {
std::cerr << "Unable to load font" << std::endl;
throw std::runtime_error("Unable to load font");
}
@@ -64,11 +153,70 @@ createPlayer(sf::Texture& texture)
return player;
}
+std::shared_ptr<std::vector<struct dice_t>>
+createAllDice(sf::Texture& die0Texture, sf::Texture& die1Texture)
+{
+ auto dice = std::make_shared<std::vector<struct dice_t>>();
+
+ // create dice, even 0 odds 1
+ // there are 8 dice results int total
+ // 4 potential 0s
+ // 4 potential 1s
+ // The dice will be rendered in pairs
+ // [0, 1] will be the left most die
+ // [2, 3] will be the second
+ // ... and so on
+ // Since a die can only have 2 results (0 or 1)
+ // To simplify how we will be placing them, the results of the roll
+ // will dictate which value each die gets
+ for (int i = 0; i < 8; i++) {
+ if (i % 2 == 0) {
+ sf::Sprite s;
+ s.setTexture(die0Texture);
+ struct dice_t die = { 0, true, s };
+ dice->push_back(die);
+ } else {
+ sf::Sprite s;
+ s.setTexture(die1Texture);
+ struct dice_t die = { 1, false, s };
+ dice->push_back(die);
+ }
+ }
+
+ return dice;
+}
+
+std::shared_ptr<std::vector<std::shared_ptr<sf::Sprite>>>
+createRollSprites(sf::Texture& t1, sf::Texture& t2)
+{
+ auto sprites = std::make_shared<std::vector<std::shared_ptr<sf::Sprite>>>();
+
+ auto s1 = std::make_shared<sf::Sprite>();
+ s1->setTexture(t1);
+
+ auto s2 = std::make_shared<sf::Sprite>();
+ s2->setTexture(t2);
+
+ sprites->push_back(s1);
+ sprites->push_back(s2);
+
+ return sprites;
+}
+
+void
+makeNum(sf::Sprite* sprite_ptr,
+ int num,
+ std::shared_ptr<std::vector<sf::Texture>> textures)
+{
+ sf::Texture& t = (*textures)[NUMS_TILES[num]];
+ sprite_ptr->setTexture(t);
+};
+
bool
clickedPiece(sf::Vector2i mousePosition, struct piece_t* piece)
{
return piece->sprite.getGlobalBounds().contains(mousePosition.x,
- mousePosition.y);
+ mousePosition.y);
}
bool
@@ -103,3 +251,12 @@ canMovePiece(
return true;
}
+
+// This function takes in an row and col we want to put the sprite in
+// and translate it to a real position in the view
+// This is because we've ZOOMed in an that adjusts the entire view.
+sf::Vector2f
+pos(float c, float r)
+{
+ return { c * SPRITE_SIZE, r * SPRITE_SIZE };
+}