Skip to content
Snippets Groups Projects
trick.h 1.63 KiB
Newer Older
//
// Created by Aidan Meara on 2024.11.08.
//

// Holds current trick cards and color of trick, allows interaction

#ifndef WIZARD_TRICK_H
#define WIZARD_TRICK_H

#include <string>
#include <utility>
#include <vector>
#include "card.h"
#include "../player/player.h"
#include "../../serialization/unique_serializable.h"
#include "../../serialization/serializable_value.h"
#include "../../../../rapidjson/include/rapidjson/document.h"

class trick : public unique_serializable {
private:
Aidan Meara's avatar
Aidan Meara committed
    serializable_value<int>* _trick_color;
    serializable_value<int>* _trump_color;
    std::vector<std::pair<card*, player*>> _cards;
Aidan Meara's avatar
Aidan Meara committed
    explicit trick(std::string id);
    trick(std::string id,
        std::vector<std::pair<card*, player*>> &cards,
        serializable_value<int>* trick_color,
        serializable_value<int>* trump_color);
    explicit trick(int trump);
mtarnow's avatar
mtarnow committed
    // accessors
    [[nodiscard]] int get_trick_color() const;
    [[nodiscard]] std::vector<std::pair<card*, player*>> get_cards_and_players() const;
    [[nodiscard]] int get_trump_color() const;
    // state update functions
    player* wrap_up_trick(std::string& err);  // determines winner
Aidan Meara's avatar
Aidan Meara committed
    void set_up_round(std::string& err, int trump); // resets attributes
    bool add_card(card* played_card, player* current_player, std::string& err);
    // setters
    void set_trick_color(int color);


// serializable interface
    virtual void write_into_json(rapidjson::Value& json, rapidjson::Document::AllocatorType& allocator) const override;
    static trick* from_json(const rapidjson::Value& json);
};

#endif //WIZARD_TRICK_H