1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/*
* CGameStateCampaign.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
#include "../GameConstants.h"
#include "../campaign/CampaignConstants.h"
#include "../serializer/Serializeable.h"
VCMI_LIB_NAMESPACE_BEGIN
struct CampaignBonus;
struct CampaignTravel;
class CGHeroInstance;
class CGameState;
class CMap;
struct CampaignHeroReplacement
{
CampaignHeroReplacement(CGHeroInstance * hero, const ObjectInstanceID & heroPlaceholderId);
CGHeroInstance * hero;
ObjectInstanceID heroPlaceholderId;
std::vector<ArtifactPosition> transferrableArtifacts;
};
class CGameStateCampaign : public Serializeable
{
CGameState * gameState;
/// Contains list of heroes that may be available in this scenario
/// temporary helper for game initialization, not serialized
std::vector<CampaignHeroReplacement> campaignHeroReplacements;
/// Returns ID of scenario from which hero placeholders should be selected
std::optional<CampaignScenarioID> getHeroesSourceScenario() const;
/// returns heroes and placeholders in where heroes will be put
void generateCampaignHeroesToReplace();
std::optional<CampaignBonus> currentBonus() const;
/// Trims hero parameters that should not transfer between scenarios according to travelOptions flags
void trimCrossoverHeroesParameters(const CampaignTravel & travelOptions);
void replaceHeroesPlaceholders();
void transferMissingArtifacts(const CampaignTravel & travelOptions);
void giveCampaignBonusToHero(CGHeroInstance * hero);
public:
CGameStateCampaign() = default;
CGameStateCampaign(CGameState * owner);
void placeCampaignHeroes();
void initStartingResources();
void initHeroes();
void initTowns();
bool playerHasStartingHero(PlayerColor player) const;
std::unique_ptr<CMap> getCurrentMap();
template <typename Handler> void serialize(Handler &h)
{
h & gameState;
}
};
VCMI_LIB_NAMESPACE_END
|