Freeciv-3.3
Loading...
Searching...
No Matches
unitlist.c
Go to the documentation of this file.
1/****************************************************************************
2 Freeciv - Copyright (C) 2005 - The Freeciv Project
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12****************************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18/* utility */
19#include "log.h"
20
21/* common */
22#include "game.h"
23#include "movement.h"
24#include "unitlist.h"
25
26/************************************************************************/
30struct unit *unit_list_find(const struct unit_list *punitlist, int unit_id)
31{
33 if (punit->id == unit_id) {
34 return punit;
35 }
37
38 return NULL;
39}
40
41/************************************************************************/
51static int compar_unit_ord_map(const struct unit *const *ua,
52 const struct unit *const *ub)
53{
54 return (*ua)->server.ord_map - (*ub)->server.ord_map;
55}
56
57/************************************************************************/
62static int compar_unit_ord_city(const struct unit *const *ua,
63 const struct unit *const *ub)
64{
65 return (*ua)->server.ord_city - (*ub)->server.ord_city;
66}
67
68/************************************************************************/
79
80/************************************************************************/
91
92/************************************************************************/
95bool can_units_do(const struct unit_list *punits,
96 bool (can_fn)(const struct unit *punit))
97{
99 if (can_fn(punit)) {
100 return TRUE;
101 }
103
104 return FALSE;
105}
106
107/************************************************************************/
112 const struct unit_list *punits,
113 bool (can_fn)(const struct civ_map *nmap,
114 const struct unit *punit))
115{
117 if (can_fn(nmap, punit)) {
118 return TRUE;
119 }
121
122 return FALSE;
123}
124
125/************************************************************************/
129 const struct unit_list *punits,
131 enum gen_action action)
132{
135 return TRUE;
136 }
138
139 return FALSE;
140}
141
142/************************************************************************/
146 const struct unit_list *punits,
148 enum gen_action action,
149 struct extra_type *pextra)
150{
153 return TRUE;
154 }
156
157 return FALSE;
158}
159
160/************************************************************************/
164 const struct unit_list *punits)
165{
168 struct road_type *proad = extra_road_get(pextra);
169
171 return TRUE;
172 }
175
176 return FALSE;
177}
178
179/************************************************************************/
182bool can_units_do_base_gui(const struct unit_list *punits,
184{
188
189 if (pbase) {
190 /* Some unit can build base of given gui_type */
191 return TRUE;
192 }
194
195 return FALSE;
196}
197
198/************************************************************************/
204bool units_have_type_flag(const struct unit_list *punits,
205 enum unit_type_flag_id flag, bool has_flag)
206{
208 if (EQ(has_flag, unit_has_type_flag(punit, flag))) {
209 return TRUE;
210 }
212
213 return FALSE;
214}
215
216/************************************************************************/
219bool units_contain_cityfounder(const struct unit_list *punits)
220{
222 return FALSE;
223 }
224
227 return TRUE;
228 }
230
231 return FALSE;
232}
233
234/************************************************************************/
241bool units_can_do_action(const struct unit_list *punits,
242 action_id act_id, bool can_do)
243{
245 if (EQ(can_do, unit_can_do_action(punit, act_id))) {
246 return TRUE;
247 }
249
250 return FALSE;
251}
252
253/************************************************************************/
260bool units_can_do_action_with_result(const struct unit_list *punits,
261 enum action_result result, bool can_do)
262{
264 if (EQ(can_do, unit_can_do_action_result(punit, result))) {
265 return TRUE;
266 }
268
269 return FALSE;
270}
271
272/************************************************************************/
275bool units_are_occupied(const struct unit_list *punits)
276{
279 return TRUE;
280 }
282
283 return FALSE;
284}
285
286/************************************************************************/
289bool units_can_load(const struct unit_list *punits)
290{
292 if (unit_can_load(punit)) {
293 return TRUE;
294 }
296
297 return FALSE;
298}
299
300/************************************************************************/
303bool units_can_unload(const struct civ_map *nmap,
304 const struct unit_list *punits)
305{
310 return TRUE;
311 }
313
314 return FALSE;
315}
316
317/************************************************************************/
321bool units_have_activity_on_tile(const struct unit_list *punits,
322 enum unit_activity activity)
323{
325 if (is_unit_activity_on_tile(activity, unit_tile(punit))) {
326 return TRUE;
327 }
329
330 return FALSE;
331}
332
333/************************************************************************/
337bool units_can_upgrade(const struct civ_map *nmap,
338 const struct unit_list *punits)
339{
342 return TRUE;
343 }
345
346 return FALSE;
347}
348
349/************************************************************************/
352bool units_can_convert(const struct civ_map *nmap,
353 const struct unit_list *punits)
354{
358 return TRUE;
359 }
361
362 return FALSE;
363}
struct base_type * get_base_by_gui_type(enum base_gui_type type, const struct unit *punit, const struct tile *ptile)
Definition base.c:143
char * incite_cost
Definition comments.c:76
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
Definition dialogs_g.h:74
#define extra_road_get(_e_)
Definition extras.h:191
#define extra_type_by_cause_iterate_end
Definition extras.h:339
#define extra_type_by_cause_iterate(_cause, _extra)
Definition extras.h:333
static bool is_server(void)
int action_id
Definition fc_types.h:248
struct civ_game game
Definition game.c:61
#define fc_assert_ret(condition)
Definition log.h:192
bool can_unit_exist_at_tile(const struct civ_map *nmap, const struct unit *punit, const struct tile *ptile)
Definition movement.c:350
bool unit_can_load(const struct unit *punit)
Definition movement.c:916
bool can_build_road(const struct civ_map *nmap, struct road_type *proad, const struct unit *punit, const struct tile *ptile)
Definition road.c:301
#define EQ(p, q)
Definition shared.h:72
struct packet_scenario_info scenario
Definition game.h:87
Definition unit.h:140
enum unit_activity activity
Definition unit.h:159
int id
Definition unit.h:147
int ord_map
Definition unit.h:244
struct unit::@84::@87 server
#define TRUE
Definition support.h:46
#define FALSE
Definition support.h:47
int get_transporter_occupancy(const struct unit *ptrans)
Definition unit.c:1846
struct unit * unit_transport_get(const struct unit *pcargo)
Definition unit.c:2544
bool is_unit_activity_on_tile(enum unit_activity activity, const struct tile *ptile)
Definition unit.c:1177
bool unit_can_do_action(const struct unit *punit, const action_id act_id)
Definition unit.c:401
bool unit_can_do_action_result(const struct unit *punit, enum action_result result)
Definition unit.c:411
bool can_unit_do_activity(const struct civ_map *nmap, const struct unit *punit, enum unit_activity activity, enum gen_action action)
Definition unit.c:913
enum unit_upgrade_result unit_upgrade_test(const struct civ_map *nmap, const struct unit *punit, bool is_free)
Definition unit.c:2051
bool unit_transported(const struct unit *pcargo)
Definition unit.c:2528
bool can_unit_unload(const struct unit *pcargo, const struct unit *ptrans)
Definition unit.c:794
bool unit_can_convert(const struct civ_map *nmap, const struct unit *punit)
Definition unit.c:2098
bool can_unit_do_activity_targeted(const struct civ_map *nmap, const struct unit *punit, enum unit_activity activity, enum gen_action action, struct extra_type *target)
Definition unit.c:954
#define unit_tile(_pu)
Definition unit.h:407
@ UU_OK
Definition unit.h:62
bool units_can_convert(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:352
bool units_are_occupied(const struct unit_list *punits)
Definition unitlist.c:275
bool units_can_do_action_with_result(const struct unit_list *punits, enum action_result result, bool can_do)
Definition unitlist.c:260
bool units_can_unload(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:303
static int compar_unit_ord_city(const struct unit *const *ua, const struct unit *const *ub)
Definition unitlist.c:62
bool can_units_do_base_gui(const struct unit_list *punits, enum base_gui_type base_gui)
Definition unitlist.c:182
bool units_contain_cityfounder(const struct unit_list *punits)
Definition unitlist.c:219
void unit_list_sort_ord_map(struct unit_list *punitlist)
Definition unitlist.c:73
bool can_units_do_activity(const struct civ_map *nmap, const struct unit_list *punits, enum unit_activity activity, enum gen_action action)
Definition unitlist.c:128
bool can_units_do_any_road(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:163
bool can_units_do_activity_targeted(const struct civ_map *nmap, const struct unit_list *punits, enum unit_activity activity, enum gen_action action, struct extra_type *pextra)
Definition unitlist.c:145
struct unit * unit_list_find(const struct unit_list *punitlist, int unit_id)
Definition unitlist.c:30
bool units_can_upgrade(const struct civ_map *nmap, const struct unit_list *punits)
Definition unitlist.c:337
static int compar_unit_ord_map(const struct unit *const *ua, const struct unit *const *ub)
Definition unitlist.c:51
bool units_have_activity_on_tile(const struct unit_list *punits, enum unit_activity activity)
Definition unitlist.c:321
bool units_have_type_flag(const struct unit_list *punits, enum unit_type_flag_id flag, bool has_flag)
Definition unitlist.c:204
bool can_units_do(const struct unit_list *punits, bool(can_fn)(const struct unit *punit))
Definition unitlist.c:95
bool units_can_do_action(const struct unit_list *punits, action_id act_id, bool can_do)
Definition unitlist.c:241
bool units_can_load(const struct unit_list *punits)
Definition unitlist.c:289
void unit_list_sort_ord_city(struct unit_list *punitlist)
Definition unitlist.c:85
bool can_units_do_on_map(const struct civ_map *nmap, const struct unit_list *punits, bool(can_fn)(const struct civ_map *nmap, const struct unit *punit))
Definition unitlist.c:111
#define unit_list_iterate(unitlist, punit)
Definition unitlist.h:31
#define unit_list_iterate_end
Definition unitlist.h:33
const struct unit_type * unit_type_get(const struct unit *punit)
Definition unittype.c:123
bool unit_has_type_flag(const struct unit *punit, enum unit_type_flag_id flag)
Definition unittype.c:194
bool utype_can_do_action(const struct unit_type *putype, const action_id act_id)
Definition unittype.c:375