From eead8271c8ac12e75f52c58bf8a523f1d1897829 Mon Sep 17 00:00:00 2001 From: Stephen Enders Date: Sun, 17 Jan 2021 15:40:44 -0500 Subject: Rolling updates + Score change Added state Added dice + roll button Updated blank tile graphic --- helper.cpp | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 161 insertions(+), 4 deletions(-) (limited to 'helper.cpp') 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> +createBoard(std::shared_ptr> textures) +{ + auto sprites = std::make_shared>(); + 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> +createAllDice(sf::Texture& die0Texture, sf::Texture& die1Texture) +{ + auto dice = std::make_shared>(); + + // 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>> +createRollSprites(sf::Texture& t1, sf::Texture& t2) +{ + auto sprites = std::make_shared>>(); + + auto s1 = std::make_shared(); + s1->setTexture(t1); + + auto s2 = std::make_shared(); + s2->setTexture(t2); + + sprites->push_back(s1); + sprites->push_back(s2); + + return sprites; +} + +void +makeNum(sf::Sprite* sprite_ptr, + int num, + std::shared_ptr> 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 }; +} -- cgit v1.2.3-54-g00ecf