00001 #ifndef SKILL_HXX_
00002 # define SKILL_HXX_
00003
00004 # include "skill_name.hh"
00005
00006 namespace objects
00007 {
00008 inline bool Skill::is_support() const
00009 {
00010 return false;
00011 }
00012
00013 inline bool Skill::is_attack() const
00014 {
00015 return false;
00016 }
00017
00018 inline int Skill::get_class() const
00019 {
00020 return -1;
00021 }
00022
00023 inline bool SupportSkill::is_support() const
00024 {
00025 return true;
00026 }
00027
00028 inline bool AttackSkill::is_attack() const
00029 {
00030 return true;
00031 }
00032
00033
00034
00035 template<int SKILL_ID, int CLASS_ID>
00036 SkillID<SKILL_ID, CLASS_ID>::SkillID() : Skill()
00037 {
00038 }
00039
00040 template<int SKILL_ID, int CLASS_ID>
00041 inline int
00042 SkillID<SKILL_ID, CLASS_ID>::get_id() const
00043 {
00044 return id;
00045 }
00046
00047 template<int SKILL_ID, int CLASS_ID>
00048 void
00049 SkillID<SKILL_ID, CLASS_ID>::accept(SkillVisitor &sv)
00050 {
00051 sv(*this);
00052 }
00053
00054 template<int SKILL_ID, int CLASS_ID>
00055 const std::string &
00056 SkillID<SKILL_ID, CLASS_ID>::get_name()
00057 {
00058 SkillName sn;
00059 sn(*this);
00060 return sn.result();
00061 }
00062
00063 template<int SKILL_ID, int CLASS_ID>
00064 inline int
00065 SkillID<SKILL_ID, CLASS_ID>::get_class() const
00066 {
00067 return CLASS_ID;
00068 }
00069
00070
00071
00072 template<int SKILL_ID, int CLASS_ID, int STATUS_FLAG>
00073 SupportSkillID<SKILL_ID, CLASS_ID, STATUS_FLAG>::
00074 SupportSkillID() : SupportSkill()
00075 {
00076 }
00077
00078 template<int SKILL_ID, int CLASS_ID, int STATUS_FLAG>
00079 inline int
00080 SupportSkillID<SKILL_ID, CLASS_ID, STATUS_FLAG>::
00081 get_id() const
00082 {
00083 return id;
00084 }
00085
00086 template<int SKILL_ID, int CLASS_ID, int STATUS_FLAG>
00087 void
00088 SupportSkillID<SKILL_ID, CLASS_ID, STATUS_FLAG>::
00089 accept(SkillVisitor &sv)
00090 {
00091 sv(*this);
00092 }
00093
00094 template<int SKILL_ID, int CLASS_ID, int STATUS_FLAG>
00095 const std::string &
00096 SupportSkillID<SKILL_ID, CLASS_ID, STATUS_FLAG>::
00097 get_name()
00098 {
00099 SkillName sn;
00100 sn(*this);
00101 return sn.result();
00102 }
00103
00104 template<int SKILL_ID, int CLASS_ID, int STATUS_FLAG>
00105 int
00106 SupportSkillID<SKILL_ID, CLASS_ID, STATUS_FLAG>::
00107 get_class() const
00108 {
00109 return CLASS_ID;
00110 }
00111
00112 template<int SKILL_ID, int CLASS_ID, int STATUS_FLAG>
00113 int
00114 SupportSkillID<SKILL_ID, CLASS_ID, STATUS_FLAG>::
00115 get_status_flag() const
00116 {
00117 return STATUS_FLAG;
00118 }
00119
00120
00121
00122 template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00123 AttackSkillID<SKILL_ID, CLASS_ID, TARGETABLE, MULTIPLE>::
00124 AttackSkillID() : AttackSkill()
00125 {
00126 }
00127
00128 template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00129 inline int
00130 AttackSkillID<SKILL_ID, CLASS_ID, TARGETABLE, MULTIPLE>::
00131 get_id() const
00132 {
00133 return id;
00134 }
00135
00136 template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00137 void
00138 AttackSkillID<SKILL_ID, CLASS_ID, TARGETABLE, MULTIPLE>::
00139 accept(SkillVisitor &sv)
00140 {
00141 sv(*this);
00142 }
00143
00144 template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00145 const std::string &
00146 AttackSkillID<SKILL_ID, CLASS_ID, TARGETABLE, MULTIPLE>::
00147 get_name()
00148 {
00149 SkillName sn;
00150 sn(*this);
00151 return sn.result();
00152 }
00153
00154 template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00155 int
00156 AttackSkillID<SKILL_ID, CLASS_ID, TARGETABLE, MULTIPLE>::
00157 get_class() const
00158 {
00159 return CLASS_ID;
00160 }
00161
00162 template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00163 bool
00164 AttackSkillID<SKILL_ID, CLASS_ID, TARGETABLE, MULTIPLE>::
00165 is_targetable() const
00166 {
00167 return TARGETABLE;
00168 }
00169
00170 template<int SKILL_ID, int CLASS_ID, bool TARGETABLE, bool MULTIPLE>
00171 bool
00172 AttackSkillID<SKILL_ID, CLASS_ID, TARGETABLE, MULTIPLE>::
00173 is_multiple() const
00174 {
00175 return MULTIPLE;
00176 }
00177 }
00178
00179 #endif