From b528610c3ac05801d3f794ce68f8080f3480367c Mon Sep 17 00:00:00 2001 From: gfgtdf Date: Tue, 25 Nov 2014 23:31:22 +0100 Subject: [PATCH 1/3] simplyfy :controller logic --- src/menu_events.cpp | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/menu_events.cpp b/src/menu_events.cpp index e902a1460718..068851b98d57 100644 --- a/src/menu_events.cpp +++ b/src/menu_events.cpp @@ -3309,26 +3309,17 @@ void menu_handler::user_command() void menu_handler::request_control_change ( int side_num, const std::string& player ) { std::string side = str_cast(side_num); - //if this is our side we are always allowed to change the controller - if (teams_[side_num - 1].is_local_human()) { - if (player == preferences::login()) - return; - change_side_controller(side,player); - } else if (teams_[side_num - 1].is_idle()) { //if this is our side and it is idle, make human and throw an end turn exception + if (teams_[side_num - 1].is_local_human() && player == preferences::login()) { + //this is already our side. + return; + } else if (teams_[side_num - 1].is_idle() && player == preferences::login()) { + //the server thinks this is already our side, he will reject change_controller. LOG_NG << " *** Got an idle side with requested control change " << std::endl; teams_[side_num - 1].make_human(); - change_controller(lexical_cast(side_num),"human"); - - if (player == preferences::login()) { - LOG_NG << " *** It's us, throwing end turn exception " << std::endl; - } else { - LOG_NG << " *** It's not us, changing sides now as usual, then throwing end_turn " << std::endl; - change_side_controller(side,player); - } throw end_turn_exception(side_num); } else { - //it is not our side, the server will decide if we can change the - //controller (that is if we are host of the game) + //The server will (or won't becasue we aren't allowed to change the controller) + //send us a [change_controller] back, which we then hndle in playturn.cpp change_side_controller(side,player); } } From 1b9b9b513ec43119a6f68fbec8ad99e23c109dfa Mon Sep 17 00:00:00 2001 From: gfgtdf Date: Wed, 26 Nov 2014 00:13:50 +0100 Subject: [PATCH 2/3] fix viewing side after idle controller reassign --- src/playsingle_controller.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/playsingle_controller.cpp b/src/playsingle_controller.cpp index 05182411eb66..09b024dcf7bb 100644 --- a/src/playsingle_controller.cpp +++ b/src/playsingle_controller.cpp @@ -811,6 +811,10 @@ possible_end_play_signal playsingle_controller::play_side() s = gui_->playing_side(); update_gui_to_player(s-1); } + else { + //This side was previously not human controlled. + update_gui_to_player(player_number_ - 1); + } } } } From 761317dea6f2ccc394bb576b50737a57ded2ad37 Mon Sep 17 00:00:00 2001 From: gfgtdf Date: Wed, 26 Nov 2014 03:31:37 +0100 Subject: [PATCH 3/3] fix request_control_change if we resigned an idle side that was not the currently active side it caused bugs before. --- src/menu_events.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/menu_events.cpp b/src/menu_events.cpp index 068851b98d57..3490247a6f27 100644 --- a/src/menu_events.cpp +++ b/src/menu_events.cpp @@ -3309,6 +3309,7 @@ void menu_handler::user_command() void menu_handler::request_control_change ( int side_num, const std::string& player ) { std::string side = str_cast(side_num); + int current_side = resources::controller->current_side(); if (teams_[side_num - 1].is_local_human() && player == preferences::login()) { //this is already our side. return; @@ -3316,7 +3317,10 @@ void menu_handler::request_control_change ( int side_num, const std::string& pla //the server thinks this is already our side, he will reject change_controller. LOG_NG << " *** Got an idle side with requested control change " << std::endl; teams_[side_num - 1].make_human(); - throw end_turn_exception(side_num); + // we dont want to restart it, if it isn't the current turn. + if(current_side == side_num) { + throw end_turn_exception(side_num); + } } else { //The server will (or won't becasue we aren't allowed to change the controller) //send us a [change_controller] back, which we then hndle in playturn.cpp