diff options
author | Stephen Enders <smenders@gmail.com> | 2021-01-17 15:40:44 -0500 |
---|---|---|
committer | Stephen Enders <smenders@gmail.com> | 2021-01-17 15:40:44 -0500 |
commit | eead8271c8ac12e75f52c58bf8a523f1d1897829 (patch) | |
tree | dc850bd9fdc6a26c70e405b34e9017ed6531933a /helper.cpp | |
parent | 1dbd3c241ea6af43a26449e515438cc241de46ad (diff) |
Rolling updates + Score change
Added state
Added dice + roll button
Updated blank tile graphic
Diffstat (limited to 'helper.cpp')
-rw-r--r-- | helper.cpp | 165 |
1 files changed, 161 insertions, 4 deletions
@@ -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 }; +} |