File: CGMarket.h

package info (click to toggle)
vcmi 1.6.5%2Bdfsg-2
  • links: PTS, VCS
  • area: contrib
  • in suites: forky, sid, trixie
  • size: 32,060 kB
  • sloc: cpp: 238,971; python: 265; sh: 224; xml: 157; ansic: 78; objc: 61; makefile: 49
file content (131 lines) | stat: -rw-r--r-- 3,106 bytes parent folder | download
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * CGMarket.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 "CGObjectInstance.h"
#include "IMarket.h"
#include "../CArtHandler.h"

VCMI_LIB_NAMESPACE_BEGIN

class MarketInstanceConstructor;

class DLL_LINKAGE CGMarket : public CGObjectInstance, public IMarket
{
protected:
	std::shared_ptr<MarketInstanceConstructor> getMarketHandler() const;

public:
	CGMarket(IGameCallback *cb);
	///IObjectInterface
	void onHeroVisit(const CGHeroInstance * h) const override; //open trading window
	void initObj(vstd::RNG & rand) override;//set skills for trade

	std::string getPopupText(PlayerColor player) const override;
	std::string getPopupText(const CGHeroInstance * hero) const override;

	///IMarket
	ObjectInstanceID getObjInstanceID() const override;
	int getMarketEfficiency() const override;
	int availableUnits(EMarketMode mode, int marketItemSerial) const override; //-1 if unlimited
	std::set<EMarketMode> availableModes() const override;

	template <typename Handler>
	void serialize(Handler &h)
	{
		h & static_cast<CGObjectInstance&>(*this);
		if (h.version < Handler::Version::NEW_MARKETS)
		{
			std::set<EMarketMode> marketModes;
			h & marketModes;
		}

		if (h.version < Handler::Version::MARKET_TRANSLATION_FIX)
		{
			int unused = 0;
			h & unused;
		}

		if (h.version < Handler::Version::NEW_MARKETS)
		{
			std::string speech;
			std::string title;
			h & speech;
			h & title;
		}
	}

	template <typename Handler> void serializeArtifactsAltar(Handler &h)
	{
		serialize(h);
		IMarket::serializeArtifactsAltar(h);
	}
};

class DLL_LINKAGE CGBlackMarket : public CGMarket
{
public:
	using CGMarket::CGMarket;

	std::vector<ArtifactID> artifacts; //available artifacts

	void newTurn(vstd::RNG & rand) const override; //reset artifacts for black market every month
	std::vector<TradeItemBuy> availableItemsIds(EMarketMode mode) const override;

	template <typename Handler> void serialize(Handler &h)
	{
		h & static_cast<CGMarket&>(*this);
		if (h.version < Handler::Version::REMOVE_VLC_POINTERS)
		{
			int32_t size = 0;
			h & size;
			for (int32_t i = 0; i < size; ++i)
			{
				bool isNull = false;
				ArtifactID artifact;
				h & isNull;
				if (!isNull)
					h & artifact;
				artifacts.push_back(artifact);
			}
		}
		else
		{
			h & artifacts;
		}
	}
};

class DLL_LINKAGE CGUniversity : public CGMarket
{
public:
	using CGMarket::CGMarket;

	std::string getSpeechTranslated() const;

	std::vector<TradeItemBuy> skills; //available skills

	std::vector<TradeItemBuy> availableItemsIds(EMarketMode mode) const override;
	void onHeroVisit(const CGHeroInstance * h) const override; //open window

	template <typename Handler> void serialize(Handler &h)
	{
		h & static_cast<CGMarket&>(*this);
		h & skills;
		if (h.version >= Handler::Version::NEW_MARKETS && h.version < Handler::Version::MARKET_TRANSLATION_FIX)
		{
			std::string temp;
			h & temp;
			h & temp;
		}
	}
};

VCMI_LIB_NAMESPACE_END