X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcommon%2FItem.h;h=7e757ff245095e8f55e81b8c4f86d5b32595b450;hb=dc2dcbbfa1298bed46a4190fbd337c7ef83cc8af;hp=6ae374b9e4244a3cc58edcf80482326992c21cd5;hpb=0c01d2b65aaf159bfd9bcf9d3f909a1d2ae5247f;p=l2e.git diff --git a/src/common/Item.h b/src/common/Item.h index 6ae374b..7e757ff 100644 --- a/src/common/Item.h +++ b/src/common/Item.h @@ -8,34 +8,35 @@ #ifndef COMMON_ITEM_H_ #define COMMON_ITEM_H_ +#include "fwd.h" #include "HeroGroup.h" #include "TargetingMode.h" +#include "../graphics/fwd.h" #include -namespace graphics { class Sprite; } - namespace common { -class Ikari; - class Item { +public: + static const int TYPE_ID = 303; + public: Item(); public: const char *Name() const { return name; } - bool IsMostUseful() const { return usability & USABILITY_MOST_USEFUL; } - bool IsEquipable() const { return usability & USABILITY_EQUIPABLE; } - bool IsCursed() const { return usability & USABILITY_CURSED; } - bool IsFruit() const { return usability & USABILITY_FRUIT; } - bool IsScenario() const { return usability & USABILITY_SCENARIO; } + bool IsMostUseful() const { return mostUseful; } + bool IsEquipable() const { return equipability; } + bool IsCursed() const { return cursed; } + bool IsFruit() const { return fruit; } + bool IsScenario() const { return scenario; } bool CanSell() const { return !IsScenario(); } bool CanDrop() const { return !IsScenario(); } - bool CanUseOnStatusScreen() const { return usability & USABILITY_STATUS; } - bool CanUseInBattle() const { return usability & USABILITY_BATTLE; } + bool CanUseOnStatusScreen() const { return status; } + bool CanUseInBattle() const { return battle; } TargetingMode &GetTargetingMode() { return targettingMode; } const TargetingMode &GetTargetingMode() const { return targettingMode; } @@ -48,14 +49,17 @@ public: bool HasIkari() const { return ikari; } const Ikari *GetIkari() const { return ikari; } + graphics::Animation *AttackAnimation() { return attackAnimation; } + const graphics::Animation *AttackAnimation() const { return attackAnimation; } + Uint16 Value() const { return value; } - bool CanEquipWeapon() const { return equipable & EQUIPPABLE_WEAPON; } - bool CanEquipArmor() const { return equipable & EQUIPPABLE_ARMOR; } - bool CanEquipShield() const { return equipable & EQUIPPABLE_SHIELD; } - bool CanEquipHelmet() const { return equipable & EQUIPPABLE_HELMET; } - bool CanEquipRing() const { return equipable & EQUIPPABLE_RING; } - bool CanEquipJewel() const { return equipable & EQUIPPABLE_JEWEL; } + bool CanEquipWeapon() const { return equipability & EQUIPPABLE_WEAPON; } + bool CanEquipArmor() const { return equipability & EQUIPPABLE_ARMOR; } + bool CanEquipShield() const { return equipability & EQUIPPABLE_SHIELD; } + bool CanEquipHelmet() const { return equipability & EQUIPPABLE_HELMET; } + bool CanEquipRing() const { return equipability & EQUIPPABLE_RING; } + bool CanEquipJewel() const { return equipability & EQUIPPABLE_JEWEL; } HeroGroup &EquipableBy() { return equipableBy; } const HeroGroup &EquipableBy() const { return equipableBy; } @@ -74,24 +78,20 @@ public: bool HasBattleAnimation() const { return properties & PROPERTY_HAS_BATTLE_ANIMATION; } bool HasIkariEffect() const { return properties & PROPERTY_HAS_IKARI_EFFECT; } + static bool Less(const Item &, const Item &); + // temporary setters public: void SetName(const char *n) { name = n; } void SetMenuIcon(const graphics::Sprite *icon) { menuIcon = icon; } - void SetUsableInBattle() { usability |= USABILITY_BATTLE; } + void SetUsableInBattle() { battle = true; } void SetIkari(const Ikari *i) { ikari = i; } + void SetAttackAnimation(graphics::Animation *a) { attackAnimation = a; } + + static void CreateTypeDescription(); + static void Construct(void *); private: - enum Usability { - USABILITY_MOST_USEFUL = 1, - USABILITY_EQUIPABLE = 2, - // USABILITY_UNUSED = 4, - USABILITY_CURSED = 8, - USABILITY_FRUIT = 16, - USABILITY_SCENARIO = 32, - USABILITY_STATUS = 64, - USABILITY_BATTLE = 128, - }; enum Equipable { EQUIPPABLE_NONE = 0, EQUIPPABLE_WEAPON = 1, @@ -125,15 +125,23 @@ private: const graphics::Sprite *menuIcon; const graphics::Sprite *chestIcon; const Ikari *ikari; + graphics::Animation *attackAnimation; Uint16 value; Uint16 properties; - Uint8 usability; TargetingMode targettingMode; - Uint8 equipable; + int equipability; HeroGroup equipableBy; + // TODO: turn these back into bits as soon as fields are implemented in the loader + bool mostUseful; + bool cursed; + bool fruit; + bool scenario; + bool status; + bool battle; + }; }