From ce2d46f78308991a6fc2d0da3830fcc890ba9768 Mon Sep 17 00:00:00 2001 From: TurfIt Date: Thu, 31 Aug 2017 21:06:34 -0400 Subject: [PATCH] def_param -> custom_data --- simtool.cc | 138 +++++++++++++++++++------------------------------------------ simtool.h | 38 +++++++---------- 2 files changed, 58 insertions(+), 118 deletions(-) diff --git a/simtool.cc b/simtool.cc index 8544995..5e34e88 100644 --- a/simtool.cc +++ b/simtool.cc @@ -2190,19 +2190,10 @@ const char *tool_schedule_ins_t::work( player_t *player, koord3d pos ) /* way construction */ const way_desc_t *tool_build_way_t::defaults[17] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -char tool_build_way_t::toolstring[256]; const way_desc_t *tool_build_way_t::get_desc( uint16 timeline_year_month, bool remember ) const { - char name[256]=""; - uint32 i; - if( default_param ) { - for(i=0; default_param[i]!=0 && default_param[i]!=','; i++) { - name[i]=default_param[i]; - } - name[i]=0; - } - const way_desc_t *desc = default_param ? way_builder_t::get_desc(name,0) :NULL; + const way_desc_t *desc = default_param ? way_builder_t::get_desc(default_param,0) :NULL; if( desc==NULL && default_param ) { waytype_t wt = (waytype_t)atoi(default_param); desc = defaults[wt&63]; @@ -2270,8 +2261,7 @@ const char* tool_build_way_t::get_default_param(player_t *player) const return default_param; } if (desc) { - sprintf(toolstring,"%s,%d",desc->get_name(),overtaking_mode[player_number]); - return toolstring; + return desc->get_name(); } else { if (default_param == NULL) { @@ -2288,6 +2278,7 @@ const char* tool_build_way_t::get_default_param(player_t *player) const } } + bool tool_build_way_t::is_selected() const { tool_t const* const tool = welt->get_tool(welt->get_active_player_nr()); @@ -2301,7 +2292,6 @@ bool tool_build_way_t::is_selected() const bool tool_build_way_t::init( player_t *player ) { two_click_tool_t::init( player ); - player_number = player->get_player_nr(); if( ok_sound == NO_SOUND ) { ok_sound = SFX_CASH; } @@ -2334,7 +2324,7 @@ void tool_build_way_t::draw_after(scr_coord k, bool dirty) const if( icon!=IMG_EMPTY && is_selected() ) { display_img_blend( icon, k.x, k.y, TRANSPARENT50_FLAG|OUTLINE_FLAG|color_idx_to_rgb(COL_BLACK), false, dirty ); char level_str[16]; - tool_build_way_t::set_mode_str(level_str, overtaking_mode[player_number]); + tool_build_way_t::set_mode_str(level_str, overtaking_mode); display_proportional_rgb( k.x+4, k.y+4, level_str, ALIGN_LEFT, color_idx_to_rgb(COL_YELLOW), true ); } } else { @@ -2461,20 +2451,9 @@ void tool_build_way_t::calc_route( way_builder_t &bauigel, const koord3d &start, const char *tool_build_way_t::do_work( player_t *player, const koord3d &start, const koord3d &end ) { - // First, we have to check default_param to set overtaking_mode correct. - uint32 i; - overtaking_mode_t mode = twoway_mode; - for(i=0; default_param[i]!=0 && default_param[i]!=','; i++) {} - if( desc && default_param[i] ) { - sint8 o_mode_i = overtaking_mode[player_number]; - sscanf(default_param+i, ",%d", &o_mode_i); - mode = (overtaking_mode_t)o_mode_i; - } else { - mode = overtaking_mode[player_number]; - } way_builder_t bauigel(player); calc_route( bauigel, start, end ); - bauigel.set_overtaking_mode(mode); + bauigel.set_overtaking_mode(overtaking_mode); if( bauigel.get_route().get_count()>1 ) { welt->mute_sound(true); bauigel.build(); @@ -2485,6 +2464,16 @@ const char *tool_build_way_t::do_work( player_t *player, const koord3d &start, c return ""; } + +void tool_build_way_t::rdwr_custom_data(memory_rw_t *packet) +{ + two_click_tool_t::rdwr_custom_data(packet); + sint8 i = overtaking_mode; + packet->rdwr_byte(i); + overtaking_mode = (overtaking_mode_t)i; +} + + void tool_build_way_t::mark_tiles( player_t *player, const koord3d &start, const koord3d &end ) { way_builder_t bauigel(player); @@ -2563,7 +2552,7 @@ const char *tool_build_cityroad::do_work( player_t *player, const koord3d &start { way_builder_t bauigel(player); bauigel.set_build_sidewalk(true); - bauigel.set_overtaking_mode(overtaking_mode[player->get_player_nr()]); + bauigel.set_overtaking_mode(overtaking_mode); calc_route( bauigel, start, end ); if( bauigel.get_route().get_count()>1 ) { welt->mute_sound(true); @@ -2577,11 +2566,9 @@ const char *tool_build_cityroad::do_work( player_t *player, const koord3d &start /* bridge construction */ -char tool_build_bridge_t::toolstring[256]; - const char* tool_build_bridge_t::get_tooltip(const player_t *) const { - const bridge_desc_t * desc = get_desc(); + const bridge_desc_t * desc = bridge_builder_t::get_desc(default_param); if (desc == NULL) { return ""; } @@ -2598,64 +2585,22 @@ const char* tool_build_bridge_t::get_tooltip(const player_t *) const waytype_t tool_build_bridge_t::get_waytype() const { - const bridge_desc_t * desc = get_desc(); + const bridge_desc_t * desc = bridge_builder_t::get_desc(default_param); return desc ? desc->get_waytype() : invalid_wt; } -/* -const char* tool_build_bridge_t::get_default_param(player_t* player) const { - if(player==NULL) { - return default_param; - } - char name[256]; - if( default_param ) { - uint8 i=0; - for(; default_param[i]!=0 && default_param[i]!=','; i++) { - name[i] = default_param[i]; - } - if(i>0) { - sprintf(toolstring,"%s,%d",name,overtaking_mode[player->get_player_nr()]); - return toolstring; - } - } - return default_param; -} -*/ - - -bridge_desc_t const* tool_build_bridge_t::get_desc() const { - char name[256]=""; - uint32 i = 0; - if( default_param ) { - for(i=0; default_param[i]!=0 && default_param[i]!=','; i++) { - name[i]=default_param[i]; - } - name[i]=0; - } - if( i>0 && default_param ) { - return bridge_builder_t::get_desc(name); - } - return NULL; -} - bool tool_build_bridge_t::init( player_t *player ) { two_click_tool_t::init( player ); - player_number = player->get_player_nr(); // now get current desc - const bridge_desc_t *desc = get_desc(); + const bridge_desc_t *desc = bridge_builder_t::get_desc(default_param); if( desc && !desc->is_available(welt->get_timeline_year_month()) && player!=NULL && player!=welt->get_public_player() ) { return false; } if (is_ctrl_pressed() && can_use_gui() && desc->get_waytype()==road_wt ) { create_win(new overtaking_mode_frame_t(player, this), w_info, (ptrdiff_t)this); } - // update default_param - if( desc && player ) { - sprintf(toolstring,"%s,%d",desc->get_name(),overtaking_mode[player_number]); - // set_default_param(toolstring); - } return desc!=NULL; } @@ -2668,12 +2613,12 @@ bool tool_build_bridge_t::exit( player_t *player ) void tool_build_bridge_t::draw_after(scr_coord k, bool dirty) const { - const bridge_desc_t *desc = get_desc(); + const bridge_desc_t *desc = bridge_builder_t::get_desc(default_param); if( desc && desc->get_waytype()==road_wt ) { if( icon!=IMG_EMPTY && is_selected() ) { display_img_blend( icon, k.x, k.y, TRANSPARENT50_FLAG|OUTLINE_FLAG|color_idx_to_rgb(COL_BLACK), false, dirty ); char level_str[16]; - tool_build_way_t::set_mode_str(level_str, overtaking_mode[player_number]); + tool_build_way_t::set_mode_str(level_str, overtaking_mode); display_proportional_rgb( k.x+4, k.y+4, level_str, ALIGN_LEFT, color_idx_to_rgb(COL_YELLOW), true ); } } else { @@ -2683,19 +2628,9 @@ void tool_build_bridge_t::draw_after(scr_coord k, bool dirty) const const char *tool_build_bridge_t::do_work( player_t *player, const koord3d &start, const koord3d &end ) { - overtaking_mode_t mode = twoway_mode; - const bridge_desc_t *desc = get_desc(); - uint8 i=0; - for(i=0; default_param[i]!=0 && default_param[i]!=','; i++) {} - if( desc && default_param[i] ) { - sint8 o_mode_i = overtaking_mode[player->get_player_nr()]; - sscanf(default_param+i, ",%d", &o_mode_i); - mode = (overtaking_mode_t)o_mode_i; - } else { - mode = overtaking_mode[player->get_player_nr()]; - } + const bridge_desc_t *desc = bridge_builder_t::get_desc(default_param); if (end==koord3d::invalid) { - return bridge_builder_t::build( player, start, desc, mode ); + return bridge_builder_t::build( player, start, desc, overtaking_mode ); } else { const koord zv(ribi_type(end-start)); @@ -2705,7 +2640,7 @@ const char *tool_build_bridge_t::do_work( player_t *player, const koord3d &start if (end2 != end) { return "End position is not valid"; // could only happen for scripts } - bridge_builder_t::build_bridge( player, start, end, zv, bridge_height, desc, way_builder_t::weg_search(desc->get_waytype(), desc->get_topspeed(), welt->get_timeline_year_month(), type_flat), mode); + bridge_builder_t::build_bridge( player, start, end, zv, bridge_height, desc, way_builder_t::weg_search(desc->get_waytype(), desc->get_topspeed(), welt->get_timeline_year_month(), type_flat), overtaking_mode); return NULL; // all checks are performed before building. } } @@ -2716,13 +2651,17 @@ void tool_build_bridge_t::rdwr_custom_data(memory_rw_t *packet) uint8 i = ribi; packet->rdwr_byte(i); ribi = (ribi_t::ribi)i; + + sint8 j = overtaking_mode; + packet->rdwr_byte(j); + overtaking_mode = (overtaking_mode_t)j; } void tool_build_bridge_t::mark_tiles( player_t *player, const koord3d &start, const koord3d &end ) { const ribi_t::ribi ribi_mark = ribi_type(end-start); const koord zv(ribi_mark); - const bridge_desc_t *desc = get_desc(); + const bridge_desc_t *desc = bridge_builder_t::get_desc(default_param); const char *error; sint8 bridge_height; koord3d end2 = bridge_builder_t::find_end_pos(player, start, zv, desc, error, bridge_height, false, koord_distance(start, end), is_ctrl_pressed()); @@ -2835,7 +2774,7 @@ void tool_build_bridge_t::mark_tiles( player_t *player, const koord3d &start, c uint8 tool_build_bridge_t::is_valid_pos( player_t *player, const koord3d &pos, const char *&error, const koord3d &start ) { - const bridge_desc_t *desc = get_desc(); + const bridge_desc_t *desc = bridge_builder_t::get_desc(default_param); const waytype_t wt = desc->get_waytype(); error = NULL; @@ -2959,7 +2898,6 @@ waytype_t tool_build_tunnel_t::get_waytype() const bool tool_build_tunnel_t::init( player_t *player ) { two_click_tool_t::init( player ); - player_number = player->get_player_nr(); // now get current desc const tunnel_desc_t *desc = tunnel_builder_t::get_desc(default_param); if( desc && !desc->is_available(welt->get_timeline_year_month()) && player!=NULL && player!=welt->get_public_player() ) { @@ -2978,7 +2916,7 @@ void tool_build_tunnel_t::draw_after(scr_coord k, bool dirty) const if( icon!=IMG_EMPTY && is_selected() ) { display_img_blend( icon, k.x, k.y, TRANSPARENT50_FLAG|OUTLINE_FLAG|color_idx_to_rgb(COL_BLACK), false, dirty ); char level_str[16]; - tool_build_way_t::set_mode_str(level_str, overtaking_mode[player_number]); + tool_build_way_t::set_mode_str(level_str, overtaking_mode); display_proportional_rgb( k.x+4, k.y+4, level_str, ALIGN_LEFT, color_idx_to_rgb(COL_YELLOW), true ); } } else { @@ -3025,7 +2963,7 @@ const char *tool_build_tunnel_t::do_work( player_t *player, const koord3d &start // Build tunnel mouths if (welt->lookup_kartenboden(start.get_2d())->get_hoehe() == start.z) { const tunnel_desc_t *desc = tunnel_builder_t::get_desc(default_param); - return tunnel_builder_t::build( player, start.get_2d(), desc, !is_ctrl_pressed(), overtaking_mode[player->get_player_nr()] ); + return tunnel_builder_t::build( player, start.get_2d(), desc, !is_ctrl_pressed(), overtaking_mode ); } else { return ""; @@ -3036,7 +2974,7 @@ const char *tool_build_tunnel_t::do_work( player_t *player, const koord3d &start way_builder_t bauigel(player); calc_route( bauigel, start, end ); welt->mute_sound(true); - bauigel.set_overtaking_mode(overtaking_mode[player->get_player_nr()]); + bauigel.set_overtaking_mode(overtaking_mode); bauigel.build(); welt->mute_sound(false); welt->lookup_kartenboden(end.get_2d())->clear_flag(grund_t::marked); @@ -3044,6 +2982,16 @@ const char *tool_build_tunnel_t::do_work( player_t *player, const koord3d &start } } + +void tool_build_tunnel_t::rdwr_custom_data(memory_rw_t *packet) +{ + two_click_tool_t::rdwr_custom_data(packet); + sint8 i = overtaking_mode; + packet->rdwr_byte(i); + overtaking_mode = (overtaking_mode_t)i; +} + + uint8 tool_build_tunnel_t::is_valid_pos( player_t *player, const koord3d &pos, const char *&error, const koord3d & ) { if( !is_first_click() ) { diff --git a/simtool.h b/simtool.h index 8881684..2dc1abc 100644 --- a/simtool.h +++ b/simtool.h @@ -29,8 +29,6 @@ class way_builder_t; class building_desc_t; class roadsign_desc_t; class way_desc_t; -class bridge_desc_t; -class tunnel_desc_t; class route_t; class way_obj_desc_t; @@ -262,17 +260,14 @@ public: class tool_build_way_t : public two_click_tool_t { private: static const way_desc_t *defaults[17]; // default ways for all types - uint8 player_number; char const* do_work(player_t*, koord3d const&, koord3d const&) OVERRIDE; void mark_tiles(player_t*, koord3d const&, koord3d const&) OVERRIDE; uint8 is_valid_pos(player_t*, koord3d const&, char const*&, koord3d const&) OVERRIDE; - static char toolstring[256]; - protected: const way_desc_t *desc; - overtaking_mode_t overtaking_mode[MAX_PLAYER_COUNT]; + overtaking_mode_t overtaking_mode; virtual way_desc_t const* get_desc(uint16, bool) const; void calc_route( way_builder_t &bauigel, const koord3d &, const koord3d & ); @@ -280,12 +275,13 @@ protected: public: tool_build_way_t(uint16 const id = TOOL_BUILD_WAY | GENERAL_TOOL) : two_click_tool_t(id), desc() { - for(int i = 0; i < MAX_PLAYER_COUNT; i++) overtaking_mode[i] = twoway_mode; //initialize overtaking_mode + overtaking_mode = twoway_mode; } image_id get_icon(player_t*) const OVERRIDE; char const* get_tooltip(player_t const*) const OVERRIDE; char const* get_default_param(player_t*) const OVERRIDE; bool is_selected() const OVERRIDE; + void rdwr_custom_data(memory_rw_t*) OVERRIDE; bool init(player_t*) OVERRIDE; bool exit(player_t*) OVERRIDE; void draw_after(scr_coord, bool dirty) const OVERRIDE; @@ -293,8 +289,8 @@ public: waytype_t get_waytype() const OVERRIDE; // remove preview necessary while building elevated ways bool remove_preview_necessary() const OVERRIDE { return !is_first_click() && (desc && (desc->get_styp() == type_elevated && desc->get_wtyp() != air_wt)); } - void set_overtaking_mode(overtaking_mode_t ov) { overtaking_mode[player_number] = ov; } - overtaking_mode_t get_overtaking_mode() const { return overtaking_mode[player_number]; } + void set_overtaking_mode(overtaking_mode_t ov) { overtaking_mode = ov; } + overtaking_mode_t get_overtaking_mode() const { return overtaking_mode; } static void set_mode_str(char* str, overtaking_mode_t overtaking_mode); }; @@ -313,22 +309,19 @@ public: class tool_build_bridge_t : public two_click_tool_t { private: ribi_t::ribi ribi; - overtaking_mode_t overtaking_mode[MAX_PLAYER_COUNT]; - uint8 player_number; + overtaking_mode_t overtaking_mode; char const* do_work(player_t*, koord3d const&, koord3d const&) OVERRIDE; void mark_tiles(player_t*, koord3d const&, koord3d const&) OVERRIDE; uint8 is_valid_pos(player_t*, koord3d const&, char const*&, koord3d const&) OVERRIDE; - bridge_desc_t const* get_desc() const; - static char toolstring[256]; public: tool_build_bridge_t() : two_click_tool_t(TOOL_BUILD_BRIDGE | GENERAL_TOOL) { - for(int i = 0; i < MAX_PLAYER_COUNT; i++) overtaking_mode[i] = twoway_mode; //initialize overtaking_mode + overtaking_mode = twoway_mode; } image_id get_icon(player_t*) const OVERRIDE { return grund_t::underground_mode==grund_t::ugm_all ? IMG_EMPTY : icon; } char const* get_tooltip(player_t const*) const OVERRIDE; - //char const* get_default_param(player_t*) const OVERRIDE; + bool is_init_network_save() const OVERRIDE { return true; } waytype_t get_waytype() const OVERRIDE; bool remove_preview_necessary() const OVERRIDE { return !is_first_click(); } @@ -336,35 +329,34 @@ public: bool init(player_t*) OVERRIDE; bool exit(player_t*) OVERRIDE; void draw_after(scr_coord, bool dirty) const OVERRIDE; - void set_overtaking_mode(overtaking_mode_t ov) { overtaking_mode[player_number] = ov; } - overtaking_mode_t get_overtaking_mode() const { return overtaking_mode[player_number]; } + void set_overtaking_mode(overtaking_mode_t ov) { overtaking_mode = ov; } + overtaking_mode_t get_overtaking_mode() const { return overtaking_mode; } }; class tool_build_tunnel_t : public two_click_tool_t { private: - overtaking_mode_t overtaking_mode[MAX_PLAYER_COUNT]; - uint8 player_number; + overtaking_mode_t overtaking_mode; void calc_route( way_builder_t &bauigel, const koord3d &, const koord3d &); char const* do_work(player_t*, koord3d const&, koord3d const&) OVERRIDE; void mark_tiles(player_t*, koord3d const&, koord3d const&) OVERRIDE; uint8 is_valid_pos(player_t*, koord3d const&, char const*&, koord3d const&) OVERRIDE; - static char toolstring[256]; public: tool_build_tunnel_t() : two_click_tool_t(TOOL_BUILD_TUNNEL | GENERAL_TOOL) { - for(int i = 0; i < MAX_PLAYER_COUNT; i++) overtaking_mode[i] = twoway_mode; //initialize overtaking_mode + overtaking_mode = twoway_mode; } char const* get_tooltip(player_t const*) const OVERRIDE; char const* check_pos(player_t*, koord3d) OVERRIDE; bool is_init_network_save() const OVERRIDE { return true; } waytype_t get_waytype() const OVERRIDE; bool remove_preview_necessary() const OVERRIDE { return !is_first_click(); } + void rdwr_custom_data(memory_rw_t*) OVERRIDE; bool init(player_t*) OVERRIDE; bool exit(player_t*) OVERRIDE; void draw_after(scr_coord, bool dirty) const OVERRIDE; - void set_overtaking_mode(overtaking_mode_t ov) { overtaking_mode[player_number] = ov; } - overtaking_mode_t get_overtaking_mode() const { return overtaking_mode[player_number]; } + void set_overtaking_mode(overtaking_mode_t ov) { overtaking_mode = ov; } + overtaking_mode_t get_overtaking_mode() const { return overtaking_mode; } }; class tool_wayremover_t : public two_click_tool_t { -- 2.10.0.windows.1