--- lib/wormux/include/WORMUX_action.h | 1 + src/game/game.cpp | 16 ++++++++++++++++ src/game/game.h | 1 + src/include/action_handler.cpp | 7 +++++++ src/interface/man_machine_interface.cpp | 6 +----- 5 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/lib/wormux/include/WORMUX_action.h b/lib/wormux/include/WORMUX_action.h index cc612b9..489154a 100644 --- a/lib/wormux/include/WORMUX_action.h +++ b/lib/wormux/include/WORMUX_action.h @@ -116,6 +116,7 @@ public: // Bonus Box ACTION_DROP_BONUS_BOX, + ACTION_REQUEST_BONUS_BOX_DROP, // ######################################################## ACTION_NETWORK_PING, diff --git a/src/game/game.cpp b/src/game/game.cpp index c4b6fcd..0f0eee8 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -632,6 +632,22 @@ bool Game::NewBox() return true; } +void Game::RequestBonusBoxDrop() +{ + ObjBox* current_box = Game::GetInstance()->GetCurrentBox(); + if (current_box != NULL) { + if (Network::GetInstance()->IsTurnMaster()) { + Action a(Action::ACTION_DROP_BONUS_BOX); + Network::GetInstance()->SendActionToAll(a); + + current_box->DropBox(); + } else { + Action a(Action::ACTION_REQUEST_BONUS_BOX_DROP); + Network::GetInstance()->SendActionToAll(a); + } + } +} + void Game::SetState(game_loop_state_t new_state, bool begin_game) { if (begin_game && diff --git a/src/game/game.h b/src/game/game.h index 69b7a0c..94dc429 100644 --- a/src/game/game.h +++ b/src/game/game.h @@ -153,5 +153,6 @@ public: bool NewBox(); void SetCurrentBox(ObjBox * current_box) { current_ObjBox = current_box; }; ObjBox * GetCurrentBox() { return current_ObjBox; }; + void RequestBonusBoxDrop(); }; #endif // GAME_H diff --git a/src/include/action_handler.cpp b/src/include/action_handler.cpp index 968f116..26037c7 100644 --- a/src/include/action_handler.cpp +++ b/src/include/action_handler.cpp @@ -325,6 +325,12 @@ static void Action_DropBonusBox (Action */*a*/) } } +static void Action_RequestBonusBoxDrop (Action */*a*/) +{ + if (Network::GetInstance()->IsTurnMaster()) + Game::GetInstance()->RequestBonusBoxDrop(); +} + // ######################################################## static void Action_Rules_SetGameMode (Action *a) @@ -999,6 +1005,7 @@ void Action_Handler_Init() // Bonus box ActionHandler::GetInstance()->Register (Action::ACTION_DROP_BONUS_BOX, "BONUSBOX_drop_box", &Action_DropBonusBox); + ActionHandler::GetInstance()->Register (Action::ACTION_REQUEST_BONUS_BOX_DROP, "BONUSBOX_request_box_drop", &Action_RequestBonusBoxDrop); // ######################################################## ActionHandler::GetInstance()->Register (Action::ACTION_NETWORK_PING, "NETWORK_ping", &Action_Network_Ping); ActionHandler::GetInstance()->Register (Action::ACTION_NETWORK_RANDOM_INIT, "NETWORK_random_init", &Action_Network_RandomInit); diff --git a/src/interface/man_machine_interface.cpp b/src/interface/man_machine_interface.cpp index bc480fa..ea9ee87 100644 --- a/src/interface/man_machine_interface.cpp +++ b/src/interface/man_machine_interface.cpp @@ -266,11 +266,7 @@ void ManMachineInterface::HandleKeyReleased(const Key_t &key) if (key == KEY_SHOOT) { if (Game::GetInstance()->ReadState() == Game::END_TURN) { - ObjBox* current_box = Game::GetInstance()->GetCurrentBox(); - if (current_box != NULL) { - Action * a = new Action(Action::ACTION_DROP_BONUS_BOX); - ActionHandler::GetInstance()->NewAction(a); - } + Game::GetInstance()->RequestBonusBoxDrop(); } else if (Game::GetInstance()->ReadState() == Game::PLAYING && ActiveTeam().IsLocal() && !ActiveCharacter().IsDead()) { -- 1.6.0.4 _______________________________________________ Wormux-dev mailing list Wormux-dev@gna.org https://mail.gna.org/listinfo/wormux-dev