Feature: adding matériel to Billy.
No conformity is done when adding things (dagger or bow for example)
This commit is contained in:
		
					parent
					
						
							
								6ad47b12bf
							
						
					
				
			
			
				commit
				
					
						75f8db9f5a
					
				
			
		
					 6 changed files with 124 additions and 37 deletions
				
			
		| 
						 | 
				
			
			@ -49,6 +49,21 @@ namespace character {
 | 
			
		|||
        using billyObject = std::variant<weapons, equipments, tools>;
 | 
			
		||||
        using container = ankerl::svector<billyObject, max_num_obj>;
 | 
			
		||||
 | 
			
		||||
        static constexpr std::array<BillyObjects::billyObject, 12> all_objects{
 | 
			
		||||
                weapons::Sword,
 | 
			
		||||
                weapons::Lance,
 | 
			
		||||
                weapons::Morgenstern,
 | 
			
		||||
                weapons::Bow,
 | 
			
		||||
                equipments::Chainmail,
 | 
			
		||||
                equipments::CookingPot,
 | 
			
		||||
                equipments::PamphletTourist,
 | 
			
		||||
                equipments::MedicKit,
 | 
			
		||||
                tools::Fourche,
 | 
			
		||||
                tools::Dagger,
 | 
			
		||||
                tools::RockClimbingKit,
 | 
			
		||||
                tools::SackOfGrain,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        static constexpr std::string_view json_key{ "billy_objects" };
 | 
			
		||||
 | 
			
		||||
        static constexpr std::string_view sword{ "Sword" };
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +91,7 @@ namespace character {
 | 
			
		|||
 | 
			
		||||
        ~BillyObjects() noexcept = default;
 | 
			
		||||
 | 
			
		||||
        void push_object(const billyObject &object, CharacterSheet &sheet) noexcept;
 | 
			
		||||
        [[nodiscard]] bool push_object(const billyObject &object, CharacterSheet &sheet) noexcept;
 | 
			
		||||
 | 
			
		||||
        void pop_object(CharacterSheet &sheet) noexcept;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,9 @@
 | 
			
		|||
#include "characteristic/endurance.hpp"
 | 
			
		||||
#include "characteristic/chance.hpp"
 | 
			
		||||
#include "characteristic/habilete.hpp"
 | 
			
		||||
#include "billy_objects.hpp"
 | 
			
		||||
#include <random>
 | 
			
		||||
#include <unordered_set>
 | 
			
		||||
 | 
			
		||||
namespace gui {
 | 
			
		||||
    class Gui;
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +25,7 @@ namespace character {
 | 
			
		|||
    private:
 | 
			
		||||
        friend gui::Gui;
 | 
			
		||||
 | 
			
		||||
        friend class BillyObjects;
 | 
			
		||||
        friend BillyObjects;
 | 
			
		||||
 | 
			
		||||
        std::mt19937_64 engine{ std::random_device{ "rdseed" }() };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -39,6 +41,13 @@ namespace character {
 | 
			
		|||
 | 
			
		||||
        characteristic::Habilete habilete;
 | 
			
		||||
 | 
			
		||||
        BillyObjects::container objects;
 | 
			
		||||
 | 
			
		||||
        std::unordered_set<BillyObjects::billyObject> available_objects{
 | 
			
		||||
                BillyObjects::all_objects.cbegin(),
 | 
			
		||||
                BillyObjects::all_objects.cend()
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        std::uint32_t health_point{ 0 };
 | 
			
		||||
 | 
			
		||||
        std::uint32_t armor{ 0 };
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +88,8 @@ namespace character {
 | 
			
		|||
 | 
			
		||||
        [[nodiscard]] const characteristic::Habilete &get_habilete() const { return habilete; }
 | 
			
		||||
 | 
			
		||||
        [[nodiscard]] const BillyObjects::container &get_objects() const { return objects; }
 | 
			
		||||
 | 
			
		||||
        [[nodiscard]] classe get_current_class() const {
 | 
			
		||||
            if (nb_weapons >= 2) {
 | 
			
		||||
                return classe::Guerrier;
 | 
			
		||||
| 
						 | 
				
			
			@ -121,6 +132,7 @@ namespace character {
 | 
			
		|||
            j.at("nb_weapons").get_to(billy.nb_weapons);
 | 
			
		||||
            j.at("nb_equipments").get_to(billy.nb_equipments);
 | 
			
		||||
            j.at("nb_tools").get_to(billy.nb_tools);
 | 
			
		||||
            BillyObjects::from_json(j.at(BillyObjects::json_key), billy.objects);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -139,6 +151,8 @@ namespace character {
 | 
			
		|||
        j["nb_weapons"] = billy.get_nb_weapons();
 | 
			
		||||
        j["nb_equipments"] = billy.get_nb_equipments();
 | 
			
		||||
        j["nb_tools"] = billy.get_nb_tools();
 | 
			
		||||
        j.emplace(std::pair{ BillyObjects::json_key, json::array() });
 | 
			
		||||
        BillyObjects::to_json(j.at(BillyObjects::json_key), billy.get_objects());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
 | 
			
		||||
#include <filesystem>
 | 
			
		||||
#include "gui/menu/menu.hpp"
 | 
			
		||||
#include "billy_objects.hpp"
 | 
			
		||||
 | 
			
		||||
namespace fs = std::filesystem;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +25,8 @@ namespace gui {
 | 
			
		|||
    private:
 | 
			
		||||
        GuiData &data;
 | 
			
		||||
 | 
			
		||||
        character::BillyObjects deal_objects{};
 | 
			
		||||
 | 
			
		||||
        menu::Menu menu;
 | 
			
		||||
 | 
			
		||||
        const fs::path font;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue