OSDN Git Service

Fix serialization of Discipline class.
[deeangband/Deeangband-new.git] / Deeangband / Discipline.h
1 /*!
2 * @file Discipline.h
3 * @brief \8fC\97{\82Ì\83v\83\8d\83g\83^\83C\83v\90é\8c¾
4 * @date 2014/03/04
5 * @author Deskull
6 * 2014 Sikabane Works.
7 */
8
9 #pragma once
10
11 #include "stdafx.h"
12 #include "Deeangband.h"
13
14 namespace Deeangband
15 {
16
17         /*!
18         * @brief \8fC\97{\91®\90«\82Ì\97ñ\8b\93\91Ì
19         */
20         typedef enum DISCIPLINE_TYPE
21         {
22                 DISCIPLINE_TYPE_GOOD,    //!< \8fC\97{\91®\90«:\91P
23                 DISCIPLINE_TYPE_EVIL,    //!< \8fC\97{\91®\90«:\88«
24                 DISCIPLINE_TYPE_ORDER,   //!< \8fC\97{\91®\90«:\92\81\8f\98
25                 DISCIPLINE_TYPE_CHAOS,   //!< \8fC\97{\91®\90«:\8d¬\93×
26                 DISCIPLINE_TYPE_BALANCE, //!< \8fC\97{\91®\90«:\93V\94\89
27                 MAX_DISCIPLINE_TYPES,    //!< \8fC\97{\91®\90«\90\94
28         } DISCIPLINE_TYPE;
29
30
31         /*! 
32         * @class Discipline
33         * @brief \8fC\97{\82Ì\83N\83\89\83X
34         */
35         class Discipline
36         {
37         private:
38
39                 NAME name;
40                 int disciplinePoint[MAX_DISCIPLINE_TYPES];
41
42                 friend class boost::serialization::access;
43
44                 /*!
45                 * @brief \83N\83\89\83X\82Ì\83V\83\8a\83A\83\89\83C\83Y\82ð\90Ý\92è\82·\82é
46                 * @param archive \83A\81[\83J\83C\83u\89»\82·\82é\83N\83\89\83X\82Ì\83A\83h\83\8c\83X
47                 * @param version \83t\83@\83C\83\8b\83o\81[\83W\83\87\83\93
48                 * @return XMLSerialize\83e\83\93\83v\83\8c\81[\83g
49                 */
50                 template<class Archive> void serialize(Archive &archive, const unsigned int version) 
51                 {
52                         if(version <= 10)
53                         {
54                                 archive & boost::serialization::make_nvp("Point", disciplinePoint);
55                         }
56                         else
57                         {
58                                 archive & boost::serialization::make_nvp("Good", disciplinePoint[DISCIPLINE_TYPE_GOOD]);
59                                 archive & boost::serialization::make_nvp("Evil", disciplinePoint[DISCIPLINE_TYPE_EVIL]);
60                                 archive & boost::serialization::make_nvp("Order", disciplinePoint[DISCIPLINE_TYPE_ORDER]);
61                                 archive & boost::serialization::make_nvp("Chaos", disciplinePoint[DISCIPLINE_TYPE_CHAOS]);
62                                 archive & boost::serialization::make_nvp("Balance", disciplinePoint[DISCIPLINE_TYPE_BALANCE]);
63                         }
64                 }
65
66
67         public:
68
69                 /*! 
70                 * @brief Discipline\83N\83\89\83X\82Ì\83R\83\93\83X\83g\83\89\83N\83^
71                 * @param good \91P\82Ì\8fC\97{\92l
72                 * @param evil \88«\82Ì\8fC\97{\92l
73                 * @param order \92\81\8f\98\82Ì\8fC\97{\92l
74                 * @param chaos \8d¬\93×\82Ì\8fC\97{\92l
75                 * @param balance \93V\94\89\82Ì\8fC\97{\92l
76                 */
77                 Discipline::Discipline(int good, int evil, int order, int chaos, int balance);
78
79                 /*! 
80                 * @brief Discipline\83N\83\89\83X\82Ì\83R\83\93\83X\83g\83\89\83N\83^
81                 */
82                 Discipline::Discipline(void);
83
84                 /*! 
85                 * @brief Discipline\83N\83\89\83X\82Ì\83f\83X\83g\83\89\83N\83^
86                 */
87                 Discipline::~Discipline(void);
88
89                 /*! 
90                 * @brief \8fC\97{\92l\82ð\8eæ\93¾\82·\82é
91                 * @param typ \8fC\97{\92l\82Ì\8eí\95Ê
92                 * @return \8fC\97{\92l
93                 */
94                 const DISCIPLINE_POINT Discipline::GetPoint(DISCIPLINE_TYPE typ);
95
96                 /*! 
97                 * @brief \8fC\97{\83\89\83\93\83N\82ð\8eæ\93¾\82·\82é
98                 * @param typ \8fC\97{\92l\82Ì\8eí\95Ê
99                 * @return \8fC\97{\83\89\83\93\83N
100                 */
101                 const DISCIPLINE_POINT Discipline::GetRank(DISCIPLINE_TYPE typ);
102
103                 /*! 
104                 * @brief \8fC\97{\92l\82ð\90Ý\92è\82·\82é
105                 * @param typ \8fC\97{\92l\82Ì\8eí\95Ê
106                 * @param point \91ã\93ü\92l
107                 * @return \82È\82µ
108                 */
109                 void Discipline::SetPoint(DISCIPLINE_TYPE typ, int point);
110
111                 /*! 
112                 * @brief \8fC\97{\92l\82ð\90Ý\92è\82·\82é
113                 * @param good \91P\82Ì\8fC\97{\92l
114                 * @param evil \88«\82Ì\8fC\97{\92l
115                 * @param order \92\81\8f\98\82Ì\8fC\97{\92l
116                 * @param chaos \8d¬\93×\82Ì\8fC\97{\92l
117                 * @param balance \93V\94\89\82Ì\8fC\97{\92l
118                 * @return \82È\82µ
119                 */
120                 void Discipline::SetPoint(int good, int evil, int order, int chaos, int balance);
121
122                 /*! 
123                 * @brief \8fC\97{\92l\82ð\89Á\8c¸\8eZ\82·\82é
124                 * @param typ \8fC\97{\92l\82Ì\8eí\95Ê
125                 * @param point \89Á\8eZ\92l
126                 * @return \82È\82µ
127                 */
128                 void Discipline::PlusPoint(DISCIPLINE_TYPE typ, int point);
129
130                 /*!
131                 * @brief +\89\89\8eZ\8eq\82É\82æ\82é\8fC\97{\92l\91S\89Á\8eZ
132                 * @param plus \89Á\8eZ\8c³
133                 */
134                 Discipline Discipline::operator+(const Discipline& plus);  
135
136                 /*!
137                 * @brief +=\89\89\8eZ\8eq\82É\82æ\82é\8fC\97{\92l\91S\89Á\8eZ
138                 * @param plus \89Á\8eZ\8c³
139                 */
140                 Discipline& Discipline::operator+=(const Discipline& plus);
141
142                 /*!
143                 * @brief \8fC\97{\96¼\82ð\95Ô\82·
144                 * @return \8fC\97{\96¼
145                 */
146                 std::string Discipline::GetName(void);
147
148         };
149
150 }
151
152 BOOST_CLASS_VERSION(Deeangband::Discipline, 11);