OSDN Git Service

[BUGGY] Reset Header files.
[deeangband/Deeangband-new.git] / Deeangband / GameWorld.h
1 /*!
2 * @file GameWorld.h
3 * @brief \83Q\81[\83\80\90¢\8aE\82Ì\83v\83\8d\83g\83^\83C\83v\90é\8c¾
4 * @date 2013/02/01
5 * @author Deskull
6 * 2013-2014 Sikabane Works.
7 */
8
9 #pragma once
10
11 #include "stdafx.h"
12 #include "Deeangband.h"
13 #include "GameSurface.h"
14
15 #include "Authority.h"
16 #include "Building.h"
17 #include "Camp.h"
18 #include "Creature.h"
19 #include "CreatureTrait.h"
20 #include "Dungeon.h"
21 #include "Effect.h"
22 #include "Feature.h"
23 #include "FixedArtifact.h"
24 #include "GameSurface.h"
25 #include "ItemBase.h"
26 #include "ItemEgo.h"
27 #include "ItemTrait.h"
28 #include "Karma.h"
29 #include "Quest.h"
30 #include "Skill.h"
31 #include "Species.h"
32 #include "TrapBase.h"
33
34 #include "Item.h"
35 #include "Creature.h"
36 #include "Floor.h"
37 #include "Trap.h"
38
39 BOOST_CLASS_VERSION(GameWorld, 1);
40
41 namespace Deeangband
42 {
43
44         /*!
45         * @class GameWorld
46         * @brief \83Q\81[\83\80\90¢\8aE\82Ì\83N\83\89\83X
47         */
48         class GameWorld
49         {
50         private:
51                 GameSurface *gameSurface;
52
53                 //\90Ã\93I\83f\81[\83^\83\8a\83X\83g
54                 std::map<TAG, std::shared_ptr<Authority>> authorityList;          /*!<\91S\8c \94\\83\8a\83X\83g*/
55                 std::map<TAG, std::shared_ptr<Building>> buildingList;            /*!<\91S\8e{\90Ý\83\8a\83X\83g*/
56                 std::map<TAG, std::shared_ptr<Camp>> campList;                    /*!<\91S\90w\89c\83\8a\83X\83g*/
57                 std::map<TAG, std::shared_ptr<CreatureTrait>> creatureTraitList;  /*!<\91S\83N\83\8a\81[\83`\83\83\81[\93Á\90«\83\8a\83X\83g*/
58                 std::map<TAG, std::shared_ptr<Dungeon>> dungeonList;              /*!<\91S\83_\83\93\83W\83\87\83\93\83\8a\83X\83g*/
59                 std::map<TAG, std::shared_ptr<Effect>> effectList;                /*!<\91S\8cø\89Ê\91®\90«\83\8a\83X\83g*/
60                 std::map<TAG, std::shared_ptr<Feature>> featureList;              /*!<\91S\92n\8c`\83\8a\83X\83g*/
61                 std::map<TAG, std::shared_ptr<FixedArtifact>> fixedArtifactList;  /*!<\91S\8cÅ\92è\83A\81[\83e\83B\83t\83@\83N\83g\83\8a\83X\83g*/
62                 std::map<TAG, std::shared_ptr<ItemBase>> itemBaseList;            /*!<\91S\83A\83C\83e\83\80\83x\81[\83X\83\8a\83X\83g*/
63                 std::map<TAG, std::shared_ptr<ItemEgo>> itemEgoList;              /*!<\91S\83A\83C\83e\83\80\83G\83S\83\8a\83X\83g*/
64                 std::map<TAG, std::shared_ptr<ItemTrait>> itemTraitList;          /*!<\91S\83A\83C\83e\83\80\93Á\90«\83\8a\83X\83g*/
65                 std::map<TAG, std::shared_ptr<Karma>> karmaList;                  /*!<\91S\83J\83\8b\83}\83\8a\83X\83g*/
66                 std::map<TAG, std::shared_ptr<Quest>> questList;                  /*!<\91S\83N\83G\83X\83g\93Á\90«\83\8a\83X\83g*/
67                 std::map<TAG, std::shared_ptr<Skill>> skillList;                  /*!<\91S\83X\83L\83\8b\83\8a\83X\83g*/
68                 std::map<TAG, std::shared_ptr<Species>> speciesList;              /*!<\91S\83N\83\8a\81[\83`\83\83\81[\8eí\95Ê\83\8a\83X\83g*/
69                 std::map<TAG, std::shared_ptr<TrapBase>> trapBaseList;            /*!<\91S\83g\83\89\83b\83v\83x\81[\83X\8eí\95Ê\83\8a\83X\83g*/
70
71                 //\93®\93I\83f\81[\83^\83\8a\83X\83g
72                 std::map<ID, std::shared_ptr<Item>> itemList;                    /*!<\91S\83A\83C\83e\83\80\83\8a\83X\83g*/
73                 std::map<ID, std::shared_ptr<Creature>> creatureList;            /*!<\91S\83N\83\8a\81[\83`\83\83\81[\83\8a\83X\83g*/
74                 std::map<ID, std::shared_ptr<Floor>> floorList;                  /*!<\91S\83t\83\8d\83A\83\8a\83X\83g*/
75                 std::map<ID, std::shared_ptr<Trap>> trapList;                    /*!<\91S\83g\83\89\83b\83v\83\8a\83X\83g*/
76
77                 GAME_TIME gameTime; //!<\83Q\81[\83\80\8e\9e\8aÔ
78
79                 friend class boost::serialization::access;
80
81                 /*!
82                 * @brief \83N\83\89\83X\82Ì\83V\83\8a\83A\83\89\83C\83Y\89»\82ð\90Ý\92è\82·\82é
83                 * @param archive \83A\81[\83J\83C\83u\89»\82·\82é\83N\83\89\83X\82Ì\83A\83h\83\8c\83X
84                 * @param fileVersion \83t\83@\83C\83\8b\83o\81[\83W\83\87\83\93
85                 * @return XMLSerialize\83e\83\93\83v\83\8c\81[\83g
86                 */
87                 template<class Archive> void serialize(Archive &archive, const unsigned int fileVersion) 
88                 {
89                         archive & BOOST_SERIALIZATION_NVP(creatureList);
90                         archive & BOOST_SERIALIZATION_NVP(itemList);
91                         archive & BOOST_SERIALIZATION_NVP(floorList);
92                         archive & BOOST_SERIALIZATION_NVP(trapList);
93                 }
94
95         public:
96
97                 /*!
98                 * @brief GameWorld\83N\83\89\83X\82Ì\83R\83\93\83X\83g\83\89\83N\83^
99                 * @param gSurface \83Q\81[\83\80\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82Æ\82È\82é GameSurface \8eQ\8fÆ
100                 */
101                 GameWorld(GameSurface *gSurface);
102
103                 /*!
104                 * @brief GameWorld\83N\83\89\83X\82Ì\83f\83X\83g\83\89\83N\83^
105                 */
106                 ~GameWorld();
107
108                 /*!
109                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\8c \94\\82ð\95Ô\82·
110                 * @param tag \8c \94\\82Ì\83^\83O
111                 * @return \8c \94\\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
112                 */
113                 Authority *GameWorld::GetAuthority(TAG tag);
114
115                 /*!
116                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83N\83\8a\81[\83`\83\83\81[\93Á\90«\82ð\95Ô\82·
117                 * @param tag \83N\83\8a\81[\83`\83\83\81[\93Á\90«\82Ì\83^\83O
118                 * @return \83N\83\8a\81[\83`\83\83\81[\93Á\90«\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
119                 */
120                 CreatureTrait *GameWorld::GetCreatureTrait(TAG tag);
121
122                 /*!
123                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\8cø\89Ê\91®\90«\82ð\95Ô\82·
124                 * @param tag \8cø\89Ê\91®\90«\82Ì\83^\83O
125                 * @return \8cø\89Ê\91®\90«\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
126                 */
127                 Effect *GameWorld::GetEffect(TAG tag);
128
129                 /*!
130                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\8cÅ\92è\83A\81[\83e\83B\83t\83@\83N\83g\82ð\95Ô\82·
131                 * @param tag \8cø\89Ê\91®\90«\82Ì\83^\83O
132                 * @return \8cÅ\92è\83A\81[\83e\83B\83t\83@\83N\83g\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
133                 */
134                 FixedArtifact *GameWorld::GetFixedArtifact(TAG tag);
135
136                 /*!
137                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\92n\8c`\82ð\95Ô\82·
138                 * @param tag \92n\8c`\82Ì\83^\83O
139                 * @return \92n\8c`\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
140                 */
141                 Feature *GameWorld::GetFeature(TAG tag);
142
143                 /*!
144                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83x\81[\83X\83A\83C\83e\83\80\82ð\95Ô\82·
145                 * @param tag \83x\81[\83X\83A\83C\83e\83\80\82Ì\83^\83O
146                 * @return \83x\81[\83X\83A\83C\83e\83\80\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
147                 */
148                 ItemBase *GameWorld::GetItemBase(TAG tag);
149
150                 /*!
151                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83A\83C\83e\83\80\83G\83S\82ð\95Ô\82·
152                 * @param tag \83A\83C\83e\83\80\83G\83S\82Ì\83^\83O
153                 * @return \83A\83C\83e\83\80\83G\83S\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
154                 */
155                 ItemEgo *GameWorld::GetItemEgo(TAG tag);
156
157                 /*!
158                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83A\83C\83e\83\80\93Á\90«\82ð\95Ô\82·
159                 * @param tag \83A\83C\83e\83\80\93Á\90«\82Ì\83^\83O
160                 * @return \83A\83C\83e\83\80\93Á\90«\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
161                 */
162                 ItemTrait *GameWorld::GetItemTrait(TAG tag);
163
164                 /*!
165                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83J\83\8b\83}\82ð\95Ô\82·
166                 * @param tag \83J\83\8b\83}\82Ì\83^\83O
167                 * @return \83J\83\8b\83}\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
168                 */
169                 Karma *GameWorld::GetKarma(TAG tag);
170
171                 /*!
172                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83X\83L\83\8b\82ð\95Ô\82·
173                 * @param tag \83X\83L\83\8b\82Ì\83^\83O
174                 * @return \83X\83L\83\8b\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
175                 */
176                 Skill *GameWorld::GetSkill(TAG tag);
177
178                 /*!
179                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83X\83L\83\8b\82ð\95Ô\82·
180                 * @param tag \83X\83L\83\8b\82Ì\83^\83O
181                 * @return \83X\83L\83\8b\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
182                 */
183                 Species *GameWorld::GetSpecies(TAG tag);
184
185                 /*!
186                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83g\83\89\83b\83v\8eí\95Ê\82ð\95Ô\82·
187                 * @param tag \83g\83\89\83b\83v\8eí\95Ê\82Ì\83^\83O
188                 * @return \83g\83\89\83b\83v\8eí\95Ê\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
189                 */
190                 TrapBase *GameWorld::GetTrapBase(TAG tag);
191
192                 /*!
193                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\8e{\90Ý\82ð\95Ô\82·
194                 * @param tag \8e{\90Ý\82Ì\83^\83O
195                 * @return \8e{\90Ý\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
196                 */
197                 Building *GameWorld::GetBuilding(TAG tag);
198
199                 /*!
200                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\90w\89c\82ð\95Ô\82·
201                 * @param tag \90w\89c\82Ì\83^\83O
202                 * @return \90w\89c\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
203                 */
204                 Camp *GameWorld::GetCamp(TAG tag);
205
206                 /*!
207                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83_\83\93\83W\83\87\83\93\82ð\95Ô\82·
208                 * @param tag \83_\83\93\83W\83\87\83\93\82Ì\83^\83O
209                 * @return \83_\83\93\83W\83\87\83\93\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
210                 */
211                 Dungeon *GameWorld::GetDungeon(TAG tag);
212
213                 /*!
214                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83A\83C\83e\83\80\82ð\95Ô\82·
215                 * @param id \83A\83C\83e\83\80\82ÌID
216                 * @return \83A\83C\83e\83\80\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
217                 */
218                 Item *GameWorld::GetItem(ID id);
219
220                 /*!
221                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83t\83\8d\83A\82ð\95Ô\82·
222                 * @param id \83t\83\8d\83A\82ÌID
223                 * @return \83t\83\8d\83A\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
224                 */
225                 Floor *GameWorld::GetFloor(ID id);
226
227                 /*!
228                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83N\83\8a\81[\83`\83\83\81[\82ð\95Ô\82·
229                 * @param id \83N\83\8a\81[\83`\83\83\81[\82ÌID
230                 * @return \83N\83\8a\81[\83`\83\83\81[\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
231                 */
232                 Creature *GameWorld::GetCreature(ID id);
233
234                 /*!
235                 * @brief GameWorld\92\86\82É\91\8dÝ\82·\82é\83N\83G\83X\83g\82ð\95Ô\82·
236                 * @param tag \83N\83G\83X\83g\82Ì\83^\83O
237                 * @return \83N\83G\83X\83g\82Ì\8eQ\8fÆ\83|\83C\83\93\83^\81A\91\8dÝ\82µ\82È\82¯\82ê\82ÎNULL\82ð\95Ô\82·\81B
238                 */
239                 Quest *GameWorld::GetQuest(TAG tag);
240
241                 /*
242                 * @brief \83v\83\8c\83C\8f\88\97\9d\83\81\83C\83\93\83\8b\81[\83v
243                 * @return \83Q\81[\83\80\8fI\97¹\83R\81[\83h
244                 */
245                 PLAY_EXIT_CODE PlayLoop(void);
246
247                 /*
248                 * @brief \8eó\82¯\8eæ\82Á\82½\83Q\81[\83\80\83R\83}\83\93\83h\82ð\8f\88\97\9d\82·\82é
249                 * @param command \8eÀ\8ds\82·\82é\83Q\81[\83\80\83R\83}\83\93\83h
250                 * @return \83Q\81[\83\80\8fI\97¹\83R\81[\83h
251                 */
252                 PLAY_EXIT_CODE DoGameCommand(GAME_COMMAND command);
253
254                 /*!
255                 * @brief \83Q\81[\83\80\8e\9e\8aÔ\82ð\95Ô\82·
256                 * @return \83Q\81[\83\80\8e\9e\8aÔ
257                 */
258                 GAME_TIME GameWorld::GetGameTime(void);
259
260                 /*!
261                 * @brief XML\83V\83\8a\83A\83\89\83C\83Y\82É\82æ\82é\83Q\81[\83\80\83f\81[\83^\95Û\91\8f\88\97\9d
262                 * @return \82È\82µ
263                 */
264                 void GameWorld::XMLSave(void);
265
266         };
267
268 }