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

skill.hh

説明を見る。
00001 #ifndef SKILL_HH_
00002 # define SKILL_HH_
00003 
00004 # include <map>
00005 # include <string>
00006 
00007 # include "objects_fwd.hh"
00008 
00009 # define UNKNOWN_SKILL (-1)
00010 
00011 namespace objects
00012 {
00013   class SkillFactory
00014   {
00015   public:
00016     typedef std::map<int, Skill *> SkillMap;
00017     typedef std::map<int, const Skill *> ConstSkillMap;
00018 
00019   public:
00020     SkillFactory();
00021     ~SkillFactory();
00022 
00023     static SkillFactory &get_instance();
00024     const Skill &get(int id);
00025     void get_class_skills(ConstSkillMap &sm, int class_id) const;
00026 
00027   protected:
00028     SkillMap _skill_map;
00029 
00030     void register_skill(Skill &s);
00031   };
00032 
00033   class Skill
00034   {
00035   public:
00036     Skill();
00037 
00038     static const Skill &get(int id);
00039     virtual void accept(SkillVisitor &iv) = 0;
00040 
00041     virtual bool is_support() const;
00042     virtual bool is_attack() const;
00043     virtual int get_class() const;
00044 
00045     virtual int get_id() const = 0;
00046     virtual const std::string &get_name() = 0;
00047   };
00048 
00049   class SupportSkill : public Skill
00050   {
00051   public:
00052     SupportSkill();
00053     virtual ~SupportSkill();
00054 
00055     bool is_support() const;
00056     virtual int get_status_flag() const = 0;
00057 
00058     virtual int get_id() const = 0;
00059     virtual const std::string &get_name() = 0;
00060   };
00061 
00062   class AttackSkill : public Skill
00063   {
00064   public:
00065     AttackSkill();
00066     virtual ~AttackSkill();
00067 
00068     virtual bool is_attack() const;
00069     virtual bool is_targetable() const = 0;
00070     virtual bool is_multiple() const = 0;
00071 
00072     virtual int get_id() const = 0;
00073     virtual const std::string &get_name() = 0;
00074   };
00075 
00076   template<int SKILL_ID, int CLASS_ID>
00077   class SkillID : public Skill
00078   {
00079   public:
00080     SkillID();
00081 
00082     static const int id = SKILL_ID;
00083     int get_id() const;
00084     void accept(SkillVisitor &sv);
00085     const std::string &get_name();
00086 
00087     int get_class() const;
00088   };
00089 
00090   template<int SKILL_ID, int CLASS_ID, int STATUS_FLAG>
00091   class SupportSkillID : public SupportSkill
00092   {
00093   public:
00094     SupportSkillID();
00095 
00096     static const int id = SKILL_ID;
00097     int get_id() const;
00098     void accept(SkillVisitor &sv);
00099     const std::string &get_name();
00100 
00101     int get_class() const;
00102     int get_status_flag() const;
00103   };
00104 
00105   template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00106   class AttackSkillID : public AttackSkill
00107   {
00108   public:
00109     AttackSkillID();
00110 
00111     static const int id = SKILL_ID;
00112     int get_id() const;
00113     void accept(SkillVisitor &sv);
00114     const std::string &get_name();
00115 
00116     int get_class() const;
00117     bool is_targetable() const;
00118     bool is_multiple() const;
00119   };
00120 }
00121 
00122 # include "skill.hxx"
00123 
00124 #endif

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