diff options
author | Stephen Enders <smenders@gmail.com> | 2021-01-23 11:52:32 -0500 |
---|---|---|
committer | Stephen Enders <smenders@gmail.com> | 2021-01-23 11:52:32 -0500 |
commit | a408a43cd105b89a8d44292e2ef69802a5660497 (patch) | |
tree | a70ce8c54f57c2f6f2a8603b9e45d352cc5bc083 /helper.cpp | |
parent | f01537a8ff454b68b83574f16cb4e2ff244a4e8a (diff) |
Move source files to src folder
We'll be making a few source files it'll be useful to have them
organized at least somewhat from our non-src files
Diffstat (limited to 'helper.cpp')
-rw-r--r-- | helper.cpp | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/helper.cpp b/helper.cpp deleted file mode 100644 index 8d6f3ce..0000000 --- a/helper.cpp +++ /dev/null @@ -1,265 +0,0 @@ -#include "helper.hpp" -#include <iostream> - -std::shared_ptr<std::vector<sf::Texture>> -loadTextures(const char* path) -{ - int sprite_width = SPRITE_SIZE, sprite_height = SPRITE_SIZE; - sf::Image textureAtlas; - if (!textureAtlas.loadFromFile(path)) { - std::cerr << "Unable to load textures from file: " << path << std::endl; - throw std::runtime_error("Unable to load spritesheet"); - } - - textureAtlas.createMaskFromColor(GLOBAL_MASK); - auto imageSize = textureAtlas.getSize(); - - auto textures = std::make_shared<std::vector<sf::Texture>>(); - - for (int y = 0; y < imageSize.y; y += sprite_height) { - for (int x = 0; x < imageSize.x; x += sprite_width) { - sf::Texture t; - t.loadFromImage(textureAtlas, - sf::IntRect(x, y, sprite_width, sprite_height)); - textures->push_back(t); - } - } - return textures; -} - -// increment through the textures -inline int -next(int* p, int max) -{ - int i = *p; - (*p) = (i + 1) % max; - 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]; - int blank_idx = 0; - 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, 2)]]; - sf::Sprite s; - s.setTexture(t); - s.setPosition(pos(4 + i, 5)); - sprites->push_back(s); - } - // p1 end - { - sf::Sprite goal; - goal.setTexture((*textures)[P1_END]); - goal.setPosition(pos(8, 5)); - sprites->push_back(goal); - - 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, 2)]]; - 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 { - sf::Texture& t = (*textures)[BLANK_TILES[next(&blank_idx, 3)]]; - s.setTexture(t); - } - 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, 2)]]; - sf::Sprite s; - s.setTexture(t); - s.setPosition(pos(4 + i, 3)); - sprites->push_back(s); - } - // p2 end - { - sf::Sprite goal; - goal.setTexture((*textures)[P2_END]); - goal.setPosition(pos(8, 3)); - sprites->push_back(goal); - - 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, 2)]]; - sf::Sprite end_tile; - end_tile.setTexture(t); - end_tile.setPosition(pos(10, 3)); - sprites->push_back(end_tile); - } - - 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"); - } - return font; -} - -std::shared_ptr<struct piece_t> -createPiece(int id, sf::Texture& texture) -{ - - sf::Sprite s(texture); - auto p = std::make_shared<struct piece_t>(); - p->id = id; - p->sprite = s; - - return p; -} - -std::shared_ptr<struct player_t> -createPlayer(sf::Texture& texture) -{ - std::shared_ptr<struct player_t> player = std::make_shared<struct player_t>(); - player->score = 0; - player->pieces = std::make_shared<std::vector<struct piece_t>>(); - for (int i = 0; i < NUM_PIECES; i++) { - player->pieces->push_back(*createPiece(i + 1, 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<sf::Sprite>> -createRollSprites(sf::Texture& t1, sf::Texture& t2) -{ - auto sprites = std::make_shared<std::vector<sf::Sprite>>(); - - sprites->push_back(sf::Sprite(t1)); - sprites->push_back(sf::Sprite(t2)); - - 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); -} - -bool -canMovePiece(struct piece_t* piece, - int roll, - std::shared_ptr<std::vector<struct piece_t>> myPieces, - std::shared_ptr<std::vector<struct piece_t>> enemyPieces) -{ - int next = piece->position + roll; - - // rolled passed the exit - if (next > EXIT_SPACE) { - return false; - } - - // colliding with another piece - for (struct piece_t& p : (*myPieces)) { - // cannot move onto your own piece - if (p.id != piece->id && p.position == next) { - return false; - } - } - - // can't attack in safe square - for (struct piece_t& p : (*enemyPieces)) { - // cannot move onto a protected enemy piece - if (next == SAFE_SPACE && p.position == SAFE_SPACE) { - return false; - } - } - - 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 }; -} |