1 /***********************************************************************
2  Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
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 #ifndef FC__CLIMISC_H
14 #define FC__CLIMISC_H
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif /* __cplusplus */
19 
20 /* common */
21 #include "fc_types.h"
22 #include "featured_text.h"      /* struct ft_color */
23 #include "events.h"
24 #include "unittype.h"
25 #include "unitlist.h"
26 
27 struct Clause;
28 struct nation_type;
29 struct nation_set;
30 
31 typedef int cid;
32 
33 void client_remove_player(int plrno);
34 void client_remove_city(struct city *pcity);
35 void client_remove_unit(struct unit *punit);
36 
37 void client_change_all(struct universal *from,
38                        struct universal *to);
39 
40 const char *get_embassy_status(const struct player *me,
41 				const struct player *them);
42 const char *get_vision_status(const struct player *me,
43 				const struct player *them);
44 void client_diplomacy_clause_string(char *buf, int bufsiz,
45 				    struct Clause *pclause);
46 
47 void global_warming_scaled(int *chance, int *rate, int max);
48 void nuclear_winter_scaled(int *chance, int *rate, int max);
49 
50 struct sprite *client_research_sprite(void);
51 struct sprite *client_warming_sprite(void);
52 struct sprite *client_cooling_sprite(void);
53 struct sprite *client_government_sprite(void);
54 
55 void center_on_something(void);
56 
57 /*
58  * A compound id (cid) can hold all objects a city can build:
59  * improvements (with wonders) and units. This is achieved by
60  * seperation the value set: a cid < B_LAST denotes a improvement
61  * (including wonders). A cid >= B_LAST denotes a unit with the
62  * unit_type_id of (cid - B_LAST).
63  */
64 
65 cid cid_encode(struct universal target);
66 cid cid_encode_unit(struct unit_type *punittype);
67 cid cid_encode_building(struct impr_type *pimprove);
68 cid cid_encode_from_city(const struct city *pcity);
69 
70 struct universal cid_decode(cid cid);
71 #define cid_production cid_decode
72 
73 bool city_unit_supported(const struct city *pcity,
74                          const struct universal *target);
75 bool city_unit_present(const struct city *pcity,
76                        const struct universal *target);
77 bool city_building_present(const struct city *pcity,
78                            const struct universal *target);
79 
80 struct item {
81   struct universal item;
82   char descr[MAX_LEN_NAME + 40];
83 };
84 
85 typedef bool (*TestCityFunc)(const struct city *, const struct universal *);
86 
87 #define MAX_NUM_PRODUCTION_TARGETS (U_LAST + B_LAST)
88 void name_and_sort_items(struct universal *targets, int num_items,
89                          struct item *items,
90                          bool show_cost, struct city *pcity);
91 int collect_production_targets(struct universal *targets,
92                                struct city **selected_cities,
93                                int num_selected_cities, bool append_units,
94                                bool append_wonders, bool change_prod,
95                                TestCityFunc test_func);
96 int collect_currently_building_targets(struct universal *targets);
97 int collect_buildable_targets(struct universal *targets);
98 int collect_eventually_buildable_targets(struct universal *targets,
99                                          struct city *pcity,
100                                          bool advanced_tech);
101 int collect_already_built_targets(struct universal *targets,
102                                   struct city *pcity);
103 
104 /* the number of units in city */
105 int num_present_units_in_city(struct city* pcity);
106 int num_supported_units_in_city(struct city* pcity);
107 
108 void handle_event(const char *featured_text, struct tile *ptile,
109                   enum event_type event, int turn, int phase, int conn_id);
110 void create_event(struct tile *ptile, enum event_type event,
111                   const struct ft_color color, const char *format, ...)
112                   fc__attribute((__format__ (__printf__, 4, 5)));
113 
114 struct city *get_nearest_city(const struct unit *punit, int *sq_dist);
115 
116 void cityrep_buy(struct city *pcity);
117 void common_taxrates_callback(int i);
118 
119 bool can_units_do_connect(struct unit_list *punits,
120                           enum unit_activity activity,
121                           struct extra_type *tgt);
122 
123 bool can_unit_act_against_own_tile(struct unit *punit);
124 bool can_units_act_against_own_tile(struct unit_list *punits);
125 
126 void client_unit_init_act_prob_cache(struct unit *punit);
127 
128 enum unit_bg_color_type { UNIT_BG_HP_LOSS,
129                           UNIT_BG_LAND,
130                           UNIT_BG_SEA,
131                           UNIT_BG_AMPHIBIOUS,
132                           UNIT_BG_FLYING };
133 
134 enum unit_bg_color_type unit_color_type(const struct unit_type *punittype);
135 
136 void buy_production_in_selected_cities(void);
137 
138 void unit_focus_set_status(struct player *pplayer);
139 
140 void client_player_init(struct player *pplayer);
141 
142 void client_player_maps_reset(void);
143 
144 bool mapimg_client_define(void);
145 bool mapimg_client_createmap(const char *filename);
146 
147 struct nation_set *client_current_nation_set(void);
148 bool client_nation_is_in_current_set(const struct nation_type *pnation);
149 
150 enum ai_level server_ai_level(void);
151 
152 #ifdef __cplusplus
153 }
154 #endif /* __cplusplus */
155 
156 #endif  /* FC__CLIMISC_H */
157