1 #pragma once
2 #include "Item_Types.h"
3 #include <string_theory/string>
4 
5 class JsonObject;
6 class JsonObjectReader;
7 struct MagazineModel;
8 struct WeaponModel;
9 
10 struct ItemModel
11 {
12 	ItemModel(
13 		uint16_t itemIndex,
14 		ST::string internalName,
15 		uint32_t usItemClass,
16 		uint8_t classIndex=0,
17 		ItemCursor cursor=INVALIDCURS);
18 
19 	ItemModel(
20 		uint16_t   itemIndex,
21 		ST::string internalName,
22 		uint32_t   usItemClass,
23 		uint8_t    ubClassIndex,
24 		ItemCursor ubCursor,
25 		uint8_t    ubGraphicType,
26 		uint8_t    ubGraphicNum,
27 		uint8_t    ubWeight,
28 		uint8_t    ubPerPocket,
29 		uint16_t   usPrice,
30 		uint8_t    ubCoolness,
31 		int8_t     bReliability,
32 		int8_t     bRepairEase,
33 		uint16_t   fFlags);
34 
35 	// This could be default in C++11
36 	virtual ~ItemModel();
37 
38 	const virtual ST::string& getInternalName() const;
39 
40 	virtual uint16_t        getItemIndex() const;
41 	virtual uint32_t        getItemClass() const;
42 	virtual uint8_t         getClassIndex() const;
43 	virtual ItemCursor      getCursor() const;
44 	virtual uint8_t         getGraphicType() const;
45 	virtual uint8_t         getGraphicNum() const;
46 	virtual uint8_t         getWeight() const;
47 	virtual uint8_t         getPerPocket() const;
48 	virtual uint16_t        getPrice() const;
49 	virtual uint8_t         getCoolness() const;
50 	virtual int8_t          getReliability() const;
51 	virtual int8_t          getRepairEase() const;
52 	virtual uint16_t        getFlags() const;
53 
54 	virtual bool isAmmo() const;
55 	virtual bool isArmour() const;
56 	virtual bool isBlade() const;
57 	virtual bool isBomb() const;
58 	virtual bool isExplosive() const;
59 	virtual bool isFace() const;
60 	virtual bool isGrenade() const;
61 	virtual bool isGun() const;
62 	virtual bool isKey() const;
63 	virtual bool isKit() const;
64 	virtual bool isLauncher() const;
65 	virtual bool isMedkit() const;
66 	virtual bool isMisc() const;
67 	virtual bool isMoney() const;
68 	virtual bool isPunch() const;
69 	virtual bool isTentacles() const;
70 	virtual bool isThrowingKnife() const;
71 	virtual bool isThrown() const;
72 	virtual bool isWeapon() const;
73 
74 	virtual bool isTwoHanded() const;
75 	virtual bool isInBigGunList() const;
76 
asWeaponItemModel77 	virtual const WeaponModel* asWeapon() const   { return NULL; }
asAmmoItemModel78 	virtual const MagazineModel* asAmmo() const   { return NULL; }
79 
80 	/** Check if the given attachment can be attached to the item. */
81 	virtual bool canBeAttached(uint16_t attachment) const;
82 
83 	virtual void serializeTo(JsonObject &obj) const;
84 	static const ItemModel* deserialize(JsonObjectReader &obj);
85 
86 protected:
87 	uint16_t   itemIndex;
88 	ST::string internalName;
89 	uint32_t   usItemClass;
90 	uint8_t    ubClassIndex;
91 	ItemCursor ubCursor;
92 	uint8_t    ubGraphicType;
93 	uint8_t    ubGraphicNum;
94 	uint8_t    ubWeight; //2 units per kilogram; roughly 1 unit per pound
95 	uint8_t    ubPerPocket;
96 	uint16_t   usPrice;
97 	uint8_t    ubCoolness;
98 	int8_t     bReliability;
99 	int8_t     bRepairEase;
100 	uint16_t   fFlags;
101 
102 	void serializeFlags(JsonObject &obj) const;
103 	uint32_t deserializeFlags(JsonObjectReader &obj) const;
104 };
105