---
 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

Répondre à