1 #include "MagazineModel.h"
2 
3 #include "AmmoTypeModel.h"
4 #include "CalibreModel.h"
5 #include "JsonObject.h"
6 #include <utility>
7 
MagazineModel(uint16_t itemIndex_,ST::string internalName_,uint32_t itemClass_,const CalibreModel * calibre_,uint16_t capacity_,const AmmoTypeModel * ammoType_,bool dontUseAsDefaultMagazine_)8 MagazineModel::MagazineModel(uint16_t itemIndex_,
9 				ST::string internalName_,
10 				uint32_t itemClass_,
11 				const CalibreModel *calibre_,
12 				uint16_t capacity_,
13 				const AmmoTypeModel *ammoType_,
14 				bool dontUseAsDefaultMagazine_
15 )
16 	:ItemModel(itemIndex_, std::move(internalName_), itemClass_, 0, INVALIDCURS),
17 	calibre(calibre_), capacity(capacity_), ammoType(ammoType_),
18 	dontUseAsDefaultMagazine(dontUseAsDefaultMagazine_)
19 {
20 }
21 
22 #include "ContentManager.h"
23 #include "GameInstance.h"
24 #include "Items.h"
25 
serializeTo(JsonObject & obj) const26 void MagazineModel::serializeTo(JsonObject &obj) const
27 {
28 	obj.AddMember("itemIndex",            itemIndex);
29 	obj.AddMember("internalName",         internalName.c_str());
30 	obj.AddMember("calibre",              calibre->internalName);
31 	obj.AddMember("capacity",             capacity);
32 	obj.AddMember("ammoType",             ammoType->internalName);
33 
34 	obj.AddMember("ubGraphicType",        getGraphicType());
35 	obj.AddMember("ubGraphicNum",         getGraphicNum());
36 	obj.AddMember("ubWeight",             getWeight());
37 	obj.AddMember("ubPerPocket",          getPerPocket());
38 	obj.AddMember("usPrice",              getPrice());
39 	obj.AddMember("ubCoolness",           getCoolness());
40 
41 	if(isInBigGunList())
42 	{
43 		obj.AddMember("standardReplacement", standardReplacement);
44 	}
45 
46 	serializeFlags(obj);
47 
48 	if(dontUseAsDefaultMagazine)
49 	{
50 		obj.AddMember("dontUseAsDefaultMagazine", dontUseAsDefaultMagazine);
51 	}
52 }
53 
deserialize(JsonObjectReader & obj,const std::map<ST::string,const CalibreModel * > & calibreMap,const std::map<ST::string,const AmmoTypeModel * > & ammoTypeMap)54 MagazineModel* MagazineModel::deserialize(
55 	JsonObjectReader &obj,
56 	const std::map<ST::string, const CalibreModel*> &calibreMap,
57 	const std::map<ST::string, const AmmoTypeModel*> &ammoTypeMap)
58 {
59 	int itemIndex                 = obj.GetInt("itemIndex");
60 	ST::string internalName       = obj.GetString("internalName");
61 	const CalibreModel *calibre   = getCalibre(obj.GetString("calibre"), calibreMap);
62 	uint32_t itemClass            = (calibre->index != NOAMMO) ? IC_AMMO : IC_NONE;
63 	uint16_t capacity             = obj.GetInt("capacity");
64 	const AmmoTypeModel *ammoType = getAmmoType(obj.GetString("ammoType"), ammoTypeMap);
65 	bool dontUseAsDefaultMagazine = obj.getOptionalBool("dontUseAsDefaultMagazine");
66 	MagazineModel *mag = new MagazineModel(itemIndex, internalName, itemClass, calibre, capacity, ammoType,
67 						dontUseAsDefaultMagazine);
68 
69 	mag->fFlags = mag->deserializeFlags(obj);
70 
71 	mag->ubGraphicType    = obj.GetInt("ubGraphicType");
72 	mag->ubGraphicNum     = obj.GetInt("ubGraphicNum");
73 	mag->ubWeight         = obj.GetInt("ubWeight");
74 	mag->ubPerPocket      = obj.GetInt("ubPerPocket");
75 	mag->usPrice          = obj.GetInt("usPrice");
76 	mag->ubCoolness       = obj.GetInt("ubCoolness");
77 
78 	ST::string replacement = obj.getOptionalString("standardReplacement");
79 	if (!replacement.empty())
80 	{
81 		mag->standardReplacement = replacement;
82 	}
83 
84 	return mag;
85 }
86 
87 
getStandardReplacement() const88 const ST::string & MagazineModel::getStandardReplacement() const
89 {
90 	return standardReplacement;
91 }
92