メインページ | ネームスペース一覧 | クラス階層 | アルファベット順一覧 | 構成 | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ

item.hh

説明を見る。
00001 #ifndef ITEM_HH_
00002 # define ITEM_HH_
00003 
00004 # include <string>
00005 # include <map>
00006 # include <iostream>
00007 
00008 # include "objects_fwd.hh"
00009 
00010 # define UNKNOWN_ITEM (-1)
00011 
00012 namespace objects
00013 {
00014   class ItemFactory
00015   {
00016   public:
00017     ItemFactory();
00018     ~ItemFactory();
00019 
00020     static ItemFactory &get_instance();
00021     const Item &get(int id);
00022 
00023   protected:
00024     std::map<int, Item *> _item_map;
00025 
00026     void register_item(Item &i);
00027   };
00028   
00029   class Item
00030   {
00031   public:
00032     Item();
00033 
00034     static const Item &get(int id);
00035     virtual void accept(ItemVisitor &iv) = 0;
00036     virtual void print(std::ostream &os) = 0;
00037 
00038     virtual int get_id() const = 0;
00039     virtual const std::string &get_name() = 0;
00040 
00041     virtual bool heals_hp() const;
00042     virtual bool heals_mp() const;
00043 
00044     bool operator ==(const Item &i) const;
00045   };
00046 
00047   template<int ITEM_ID>
00048   class ItemID : public Item
00049   {
00050   public:
00051     ItemID();
00052 
00053     static const int id = ITEM_ID;
00054     void accept(ItemVisitor &iv);
00055     void print(std::ostream &os);
00056     static const ItemID<ITEM_ID> &get_instance();
00057 
00058     int get_id() const;
00059     const std::string &get_name();
00060   };
00061   
00062   class HealingItem : public Item
00063   {
00064   protected:
00065     HealingItem();
00066 
00067   public:
00068     virtual bool heals_hp() const;
00069     virtual bool heals_mp() const;
00070     virtual int get_hp_healing() const;
00071     virtual int get_mp_healing() const;
00072 
00073     virtual int get_price() const;
00074 
00075     double get_hp_healing_cost() const;
00076     double get_mp_healing_cost() const;
00077   };
00078 
00079   template<int ITEM_ID, int HP_HEALING, int MP_HEALING, int PRICE>
00080   class HealingItemID : public HealingItem
00081   {
00082   public:
00083     HealingItemID();
00084 
00085     static const int id = ITEM_ID;
00086     void accept(ItemVisitor &iv);
00087     void print(std::ostream &os);
00088 
00089     int get_id() const;
00090     const std::string &get_name();
00091     static const HealingItemID<ITEM_ID, HP_HEALING, 
00092       MP_HEALING, PRICE> &get_instance();
00093 
00094     int get_hp_healing() const;
00095     int get_mp_healing() const;
00096     int get_price() const;
00097   };
00098 
00099   template<int ITEM_ID, int HP_PERCENTAGE_HEALING, int MP_PERCENTAGE_HEALING, int PRICE>
00100   class PercentageHealingItemID : public HealingItem
00101   {
00102   public:
00103     PercentageHealingItemID();
00104 
00105     static const int id = ITEM_ID;
00106     void accept(ItemVisitor &iv);
00107     void print(std::ostream &os);
00108     static const PercentageHealingItemID<ITEM_ID, HP_PERCENTAGE_HEALING, 
00109       MP_PERCENTAGE_HEALING, PRICE> &get_instance();
00110 
00111     int get_id() const;
00112     const std::string &get_name();
00113 
00114     int get_hp_healing() const;
00115     int get_mp_healing() const;
00116     int get_price() const;
00117   };
00118 
00119   std::ostream &operator <<(std::ostream &os, const Item &i);
00120 }
00121 
00122 # include "item.hxx"
00123 
00124 #endif

Cronous Emulatorに対してWed Aug 17 06:01:25 2005に生成されました。  doxygen 1.4.2-20050421