22 |
*/ |
*/ |
23 |
|
|
24 |
#include <Foundation/NSArray.h> |
#include <Foundation/NSArray.h> |
25 |
|
#include <Foundation/NSDictionary.h> |
26 |
#include <Foundation/NSException.h> |
#include <Foundation/NSException.h> |
27 |
#include <Foundation/NSCoder.h> |
#include <Foundation/NSCoder.h> |
28 |
|
#include <Foundation/NSValue.h> |
29 |
|
|
30 |
#include "GameEngine/HgGame.h" |
#include "GameEngine/HgGame.h" |
31 |
#include "GameEngine/HgPlayer.h" |
#include "GameEngine/HgPlayer.h" |
39 |
*/ |
*/ |
40 |
@implementation HgGame |
@implementation HgGame |
41 |
|
|
42 |
|
static HgGame *_currentGame = nil; |
43 |
|
|
44 |
|
/** |
45 |
|
* Return the current game in the current processus. |
46 |
|
*/ |
47 |
|
+ (HgGame *) currentGame |
48 |
|
{ |
49 |
|
return _currentGame; |
50 |
|
} |
51 |
|
|
52 |
/** |
/** |
53 |
* Initialize a new game, with a given name. |
* Initialize a new game, with a given name. |
54 |
*/ |
*/ |
57 |
NSParameterAssert (name); |
NSParameterAssert (name); |
58 |
NSParameterAssert ([name length] != 0); |
NSParameterAssert ([name length] != 0); |
59 |
|
|
60 |
|
NSAssert (!_currentGame, @"A game is already launched"); |
61 |
|
|
62 |
self = [super init]; |
self = [super init]; |
63 |
if (self != nil) |
if (self != nil) |
64 |
{ |
{ |
65 |
_name = RETAIN(name); |
_name = RETAIN(name); |
66 |
_players = [[NSMutableArray alloc] init]; |
_players = [[NSMutableDictionary alloc] init]; |
67 |
_teams = [[NSMutableArray alloc] init]; |
_teams = [[NSMutableDictionary alloc] init]; |
68 |
_map = nil; |
_map = nil; |
69 |
_objects = [[NSMutableArray alloc] init]; |
_objects = [[NSMutableDictionary alloc] init]; |
70 |
|
|
71 |
|
_currentGame = self; |
72 |
} |
} |
73 |
|
|
74 |
return self; |
return self; |
75 |
} |
} |
76 |
|
|
77 |
/** |
// /** |
78 |
* Initialize a new game, with an existing game. |
// * Initialize a new game, with an existing game. |
79 |
*/ |
// */ |
80 |
- (id) initWithGame: (HgGame *)game |
// - (id) initWithGame: (HgGame *)game |
81 |
{ |
// { |
82 |
NSParameterAssert(game); |
// NSParameterAssert(game); |
83 |
|
|
84 |
self = [super init]; |
// self = [super init]; |
85 |
if (self != nil) |
// if (self != nil) |
86 |
{ |
// { |
87 |
_name = RETAIN([game name]); |
// _name = RETAIN([game name]); |
88 |
_players = [[NSMutableArray alloc] initWithArray: [game players]]; |
// _players = [[NSMutableArray alloc] initWithArray: [game players]]; |
89 |
_teams = [[NSMutableArray alloc] initWithArray: [game teams]]; |
// _teams = [[NSMutableArray alloc] initWithArray: [game teams]]; |
90 |
_map = nil; |
// _map = nil; |
91 |
_objects = [[NSMutableArray alloc] initWithArray: [game objects]]; |
// _objects = [[NSMutableArray alloc] initWithArray: [game objects]]; |
92 |
} |
// } |
93 |
|
|
94 |
return self; |
// return self; |
95 |
} |
// } |
96 |
|
|
97 |
/** |
/** |
98 |
* Dealloc the current game. |
* Dealloc the current game. |
99 |
*/ |
*/ |
100 |
- (void) dealloc |
- (void) dealloc |
101 |
{ |
{ |
102 |
|
_currentGame = nil; |
103 |
|
|
104 |
RELEASE(_name); |
RELEASE(_name); |
105 |
RELEASE(_players); |
RELEASE(_players); |
106 |
RELEASE(_teams); |
RELEASE(_teams); |
125 |
- (void) addPlayer: (HgPlayer *)player |
- (void) addPlayer: (HgPlayer *)player |
126 |
{ |
{ |
127 |
NSParameterAssert (player); |
NSParameterAssert (player); |
128 |
NSParameterAssert (![_players containsObject: player]); |
NSParameterAssert ([[_players allKeysForObject: player] count] == 0); |
129 |
|
|
130 |
|
NSNumber *numId = [NSNumber numberWithInt: [player identifier]]; |
131 |
|
|
132 |
[_players addObject: player]; |
[_players setObject: player forKey: numId]; |
133 |
} |
} |
134 |
|
|
135 |
/** |
/** |
139 |
-(void) removePlayer: (HgPlayer *)player |
-(void) removePlayer: (HgPlayer *)player |
140 |
{ |
{ |
141 |
NSParameterAssert (player); |
NSParameterAssert (player); |
142 |
NSParameterAssert ([_players containsObject: player]); |
NSParameterAssert ([[_players allKeysForObject: player] count] != 0); |
143 |
|
|
144 |
[_players removeObject: player]; |
NSNumber *numId = [NSNumber numberWithInt: [player identifier]]; |
145 |
|
|
146 |
|
[_players removeObjectForKey: numId]; |
147 |
} |
} |
148 |
|
|
149 |
/** |
/** |
150 |
* Return the list of players. |
* Return the list of players. |
151 |
*/ |
*/ |
152 |
- (NSArray *) players |
- (NSDictionary *) players |
153 |
{ |
{ |
154 |
return _players; |
return _players; |
155 |
} |
} |
160 |
- (void) addTeam: (HgTeam *)team |
- (void) addTeam: (HgTeam *)team |
161 |
{ |
{ |
162 |
NSParameterAssert (team); |
NSParameterAssert (team); |
163 |
NSParameterAssert (![_teams containsObject: team]); |
NSParameterAssert ([[_teams allKeysForObject: team] count] == 0); |
164 |
|
|
165 |
|
NSNumber *numId = [NSNumber numberWithInt: [team identifier]]; |
166 |
|
|
167 |
[_teams addObject: team]; |
[_teams setObject: team forKey: numId]; |
168 |
} |
} |
169 |
/** |
/** |
170 |
* Remove team from the current game. The team must be contained in |
* Remove team from the current game. The team must be contained in |
171 |
* the game. |
* the game. |
172 |
*/ |
*/ |
173 |
- (void) removeTeam: (HgTeam *)team |
- (void) removeTeam: (HgTeam *)team |
174 |
{ |
{ |
|
|
|
175 |
NSParameterAssert (team); |
NSParameterAssert (team); |
176 |
NSParameterAssert ([_teams containsObject: team]); |
NSParameterAssert ([[_teams allKeysForObject: team] count] != 0); |
177 |
|
|
178 |
[_teams removeObject: team]; |
NSNumber *numId = [NSNumber numberWithInt: [team identifier]]; |
179 |
|
|
180 |
|
[_teams removeObjectForKey: numId]; |
181 |
} |
} |
182 |
|
|
183 |
/** |
/** |
184 |
* Return the current team list. |
* Return the current team list. |
185 |
*/ |
*/ |
186 |
- (NSArray *) teams |
- (NSDictionary *) teams |
187 |
{ |
{ |
188 |
return _teams; |
return _teams; |
189 |
} |
} |
197 |
/* FIXME - map is not declared */ |
/* FIXME - map is not declared */ |
198 |
|
|
199 |
/* |
/* |
200 |
NSParameterAssert (map); |
NSParameterAssert (map); |
201 |
|
|
202 |
if (_map) |
if (_map) |
203 |
RELEASE(_map); |
RELEASE(_map); |
204 |
_map = RETAIN(map);*/ |
_map = RETAIN(map);*/ |
205 |
} |
} |
206 |
|
|
207 |
/** |
/** |
218 |
- (void) addObject: (HgObject *)object |
- (void) addObject: (HgObject *)object |
219 |
{ |
{ |
220 |
NSParameterAssert (object); |
NSParameterAssert (object); |
221 |
NSParameterAssert (![_objects containsObject: object]); |
NSParameterAssert ([[_objects allKeysForObject: object] count] == 0); |
222 |
|
|
223 |
[_objects addObject: object]; |
NSNumber *numId = [NSNumber numberWithInt: [object identifier]]; |
224 |
|
|
225 |
|
[_objects setObject: object forKey: numId]; |
226 |
} |
} |
227 |
|
|
228 |
/** |
/** |
232 |
- (void) removeObject: (HgObject *)object |
- (void) removeObject: (HgObject *)object |
233 |
{ |
{ |
234 |
NSParameterAssert (object); |
NSParameterAssert (object); |
235 |
NSParameterAssert ([_objects containsObject: object]); |
NSParameterAssert ([[_objects allKeysForObject: object] count] != 0); |
236 |
|
|
237 |
|
NSNumber *numId = [NSNumber numberWithInt: [object identifier]]; |
238 |
|
|
239 |
[_objects removeObject: object]; |
[_objects removeObjectForKey: numId]; |
240 |
} |
} |
241 |
|
|
242 |
/** |
/** |
243 |
* Return the current object list. |
* Return the current object list. |
244 |
*/ |
*/ |
245 |
- (NSArray *) objects |
- (NSDictionary *) objects |
246 |
{ |
{ |
247 |
return _objects; |
return _objects; |
248 |
} |
} |
249 |
|
|
250 |
/** |
// /** |
251 |
* |
// * |
252 |
*/ |
// */ |
253 |
- (void) modifWithGame: (HgGame *)game |
// - (void) modifWithGame: (HgGame *)game |
254 |
{ |
// { |
255 |
NSParameterAssert (game); |
// NSParameterAssert (game); |
256 |
|
|
257 |
[_name setString: [game name]]; |
// [_name setString: [game name]]; |
258 |
[_players setArray: [game players]]; |
// [_players setArray: [game players]]; |
259 |
[_teams setArray: [game teams]]; |
// [_teams setArray: [game teams]]; |
260 |
_map = [game map]; |
// _map = [game map]; |
261 |
[_objects setArray: [game objects]]; |
// [_objects setArray: [game objects]]; |
262 |
} |
// } |
|
|
|
|
@end |
|
|
|
|
263 |
|
|
|
@implementation HgGame (Coding) |
|
264 |
|
|
265 |
- (void)encodeWithCoder: (NSCoder *)encoder |
- (void)encodeWithCoder: (NSCoder *)encoder |
266 |
{ |
{ |