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