00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MULTIPLAYER_CONNECT_H_INCLUDED
00019 #define MULTIPLAYER_CONNECT_H_INCLUDED
00020
00021 #include "config.hpp"
00022 #include "gamestatus.hpp"
00023 #include "leader_list.hpp"
00024 #include "multiplayer_ui.hpp"
00025 #include "multiplayer_create.hpp"
00026 #include "network.hpp"
00027 #include "widgets/scrollpane.hpp"
00028
00029 #include <string>
00030
00031 namespace mp {
00032
00033 class connect : public mp::ui
00034 {
00035 public:
00036 struct connected_user {
00037 connected_user(const std::string& name, mp::controller controller,
00038 network::connection connection) :
00039 name(name), controller(controller), connection(connection)
00040 {};
00041 std::string name;
00042 mp::controller controller;
00043 network::connection connection;
00044 };
00045
00046 typedef std::vector<connected_user> connected_user_list;
00047
00048 class side {
00049 public:
00050 side(connect& parent, const config& cfg, int index);
00051
00052 side(const side& a);
00053
00054 void add_widgets_to_scrollpane(gui::scrollpane& pane, int pos);
00055
00056 void process_event();
00057
00058
00059 bool changed();
00060
00061
00062
00063
00064 config get_config() const;
00065
00066
00067
00068 bool available() const;
00069
00070
00071 bool allow_player() const;
00072
00073
00074 void set_controller(mp::controller controller);
00075 mp::controller get_controller() const;
00076
00077
00078 void update_user_list();
00079
00080
00081 const std::string& get_id() const;
00082
00083 void set_id(const std::string& id);
00084
00085 const std::string& get_save_id() const;
00086
00087
00088
00089 void import_network_user(const config& data);
00090
00091
00092 void reset(mp::controller controller);
00093
00094
00095 void resolve_random();
00096 void hide_ai_algorithm_combo(bool invis);
00097 private:
00098 void init_ai_algorithm_combo();
00099 void update_ai_algorithm_combo() {hide_ai_algorithm_combo(parent_->hidden());}
00100 void update_controller_ui();
00101 void update_ui();
00102
00103
00104
00105 connect* parent_;
00106
00107
00108
00109 config cfg_;
00110
00111
00112 int index_;
00113 std::string id_;
00114 std::string save_id_;
00115 mp::controller controller_;
00116 int faction_;
00117 int team_;
00118 int colour_;
00119 int gold_;
00120 int income_;
00121 std::string leader_;
00122 std::string gender_;
00123 std::string ai_algorithm_;
00124
00125
00126
00127 gui::label player_number_;
00128 gui::combo combo_controller_;
00129 gui::label orig_controller_;
00130 gui::combo combo_ai_algorithm_;
00131 gui::combo combo_faction_;
00132 gui::combo combo_leader_;
00133 gui::combo combo_gender_;
00134 gui::combo combo_team_;
00135 gui::combo combo_colour_;
00136 gui::slider slider_gold_;
00137 gui::slider slider_income_;
00138 gui::label label_gold_;
00139 gui::label label_income_;
00140
00141 bool allow_player_;
00142 bool enabled_;
00143 bool changed_;
00144 leader_list_manager llm_;
00145 };
00146
00147 friend class side;
00148
00149 typedef std::vector<side> side_list;
00150
00151
00152 connect(game_display& disp, const config& game_config,
00153 chat& c, config& gamelist, const create::parameters& params,
00154 mp::controller default_controller);
00155
00156 virtual void process_event();
00157
00158
00159
00160
00161 const game_state& get_state();
00162
00163
00164
00165
00166 void start_game();
00167
00168 protected:
00169 virtual void layout_children(const SDL_Rect& rect);
00170
00171 virtual void process_network_data(const config& data, const network::connection sock);
00172 virtual void process_network_error(network::error& error);
00173 virtual bool accept_connections();
00174 virtual void process_network_connection(const network::connection sock);
00175
00176 virtual void hide_children(bool hide=true);
00177
00178 private:
00179
00180
00181 void load_game();
00182 void lists_init();
00183
00184
00185 config* current_config();
00186
00187
00188 void update_level();
00189
00190
00191 void update_and_send_diff(bool update_time_of_day = false);
00192
00193
00194 bool sides_available();
00195
00196
00197
00198
00199 void update_playerlist_state(bool silent=true);
00200
00201
00202 connected_user_list::iterator find_player(const std::string& id);
00203
00204
00205 int find_player_side(const std::string& id) const;
00206
00207
00208 void update_user_combos();
00209
00210
00211 void kick_player(const std::string& name);
00212
00213 config level_;
00214
00215
00216 game_state state_;
00217
00218 create::parameters params_;
00219
00220
00221 config::child_list era_sides_;
00222
00223
00224 std::vector<std::string> player_types_;
00225 std::vector<std::string> player_factions_;
00226 std::vector<std::string> player_teams_;
00227 std::vector<std::string> player_colours_;
00228 std::vector<std::string> ai_algorithms_;
00229
00230
00231 std::vector<std::string> team_names_;
00232 std::vector<std::string> user_team_names_;
00233 const std::string team_prefix_;
00234
00235 side_list sides_;
00236 connected_user_list users_;
00237
00238 gui::label waiting_label_;
00239 bool message_full_;
00240
00241 controller default_controller_;
00242
00243
00244 gui::scrollpane scroll_pane_;
00245
00246 gui::label type_title_label_;
00247 gui::label faction_title_label_;
00248 gui::label team_title_label_;
00249 gui::label colour_title_label_;
00250 gui::label gold_title_label_;
00251 gui::label income_title_label_;
00252
00253 gui::button launch_;
00254 gui::button cancel_;
00255
00256 };
00257
00258 }
00259
00260 #endif
00261