1 #pragma once
2 
3 #include "Campaign_Types.h"
4 #include "Strategic_AI.h"
5 
6 #include "JsonObject.h"
7 #include "rapidjson/document.h"
8 #include <string_theory/string>
9 
10 
11 class ArmyCompositionModel
12 {
13 public:
14 	ArmyCompositionModel(uint8_t compositionId_, ST::string name_, int8_t priority_,
15 		int8_t adminPercentage_, int8_t elitePercentage_, int8_t troopPercentage_,
16 		int8_t desiredPopulation_, int8_t startPopulation_
17 	);
18 
19 	ARMY_COMPOSITION toArmyComposition() const;
20 
21 	static std::vector<const ArmyCompositionModel*> deserialize(const rapidjson::Document& root);
22 
23 	static void validateData(const std::vector<const ArmyCompositionModel*> compositions);
24 
25 	/** Validate the ARMY_COMPOSITION entries loaded from a saved game */
26 	static void validateLoadedData(const std::vector<ARMY_COMPOSITION>& armyCompositions);
27 
28 	uint8_t compositionId;
29 	ST::string name;
30 	int8_t priority;
31 	int8_t adminPercentage;
32 	int8_t elitePercentage;
33 	int8_t troopPercentage;
34 	int8_t desiredPopulation;
35 	int8_t startPopulation;
36 };
37