Previous to this patch remote characters don't drop dynamites and grenades.
This bug occurred from time to time previous to the last patch and occurred 
constantly since the last patch.

Additionally this patch makes the code simpler and reduce the network traffic.
---
 lib/wormux/include/WORMUX_action.h |    1 -
 src/game/game.cpp                  |   41 +++++++++--------------------------
 src/game/game.h                    |    7 ++---
 src/include/action_handler.cpp     |    7 ------
 4 files changed, 14 insertions(+), 42 deletions(-)

diff --git a/lib/wormux/include/WORMUX_action.h 
b/lib/wormux/include/WORMUX_action.h
index a64a515..b02c5e3 100644
--- a/lib/wormux/include/WORMUX_action.h
+++ b/lib/wormux/include/WORMUX_action.h
@@ -74,7 +74,6 @@ public:
     // ########################################################
     ACTION_PLAYER_CHANGE_WEAPON,
     ACTION_PLAYER_CHANGE_CHARACTER,
-    ACTION_GAMELOOP_SET_STATE,
     ACTION_GAMELOOP_NEXT_TEAM,
     ACTION_GAME_CALCULATE_FRAME,
 
diff --git a/src/game/game.cpp b/src/game/game.cpp
index 47cd16d..c4b6fcd 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -632,11 +632,17 @@ bool Game::NewBox()
   return true;
 }
 
-
-void Game::Really_SetState(game_loop_state_t new_state)
+void Game::SetState(game_loop_state_t new_state, bool begin_game)
 {
+  if (begin_game &&
+      (Network::GetInstance()->IsGameMaster() || 
Network::GetInstance()->IsLocal()))
+    Network::GetInstance()->SetTurnMaster(true);
+
   // already in good state, nothing to do
-  if (state == new_state) return;
+  if ((state == new_state) && !begin_game) return;
+
+  MSG_DEBUG("game", "Ask for state %d", new_state);
+
   state = new_state;
 
   Interface::GetInstance()->weapons_menu.Hide();
@@ -661,31 +667,6 @@ void Game::Really_SetState(game_loop_state_t new_state)
   }
 }
 
-void Game::SetState(game_loop_state_t new_state, bool begin_game) const
-{
-  if (begin_game &&
-      (Network::GetInstance()->IsGameMaster() || 
Network::GetInstance()->IsLocal()))
-    Network::GetInstance()->SetTurnMaster(true);
-
-  if (!Network::GetInstance()->IsTurnMaster())
-    return;
-
-  // already in good state, nothing to do
-  if ((state == new_state) && !begin_game) return;
-
-  // Send information about energy and position of every characters
-  // ONLY at the beginning of a new turn!
-  // (else you can send unstable information of a character which is moving)
-  // See bug #10668
-  if (Network::GetInstance()->IsTurnMaster() && new_state == PLAYING)
-    SyncCharacters();
-
-  MSG_DEBUG("game", "Ask for state %d", new_state);
-  Action *a = new Action(Action::ACTION_GAMELOOP_SET_STATE);
-  a->Push(new_state);
-  ActionHandler::GetInstance()->NewAction(a);
-}
-
 PhysicalObj* Game::GetMovingObject() const
 {
   if (!ActiveCharacter().IsImmobile())
@@ -736,7 +717,7 @@ bool Game::IsAnythingMoving() const
 }
 
 // Signal death of a character
-void Game::SignalCharacterDeath (const Character *character) const
+void Game::SignalCharacterDeath (const Character *character)
 {
   std::string txt;
 
@@ -813,7 +794,7 @@ void Game::SignalCharacterDeath (const Character 
*character) const
 }
 
 // Signal falling or any kind of damage of a character
-void Game::SignalCharacterDamage(const Character *character) const
+void Game::SignalCharacterDamage(const Character *character)
 {
   MSG_DEBUG("game.endofturn", "%s has been hurt", 
character->GetName().c_str());
 
diff --git a/src/game/game.h b/src/game/game.h
index c563b63..69b7a0c 100644
--- a/src/game/game.h
+++ b/src/game/game.h
@@ -139,16 +139,15 @@ public:
 
   // Read/Set State
   game_loop_state_t ReadState() const { return state; }
-  void SetState(game_loop_state_t new_state, bool begin_game=false) const;
+  void SetState(game_loop_state_t new_state, bool begin_game=false);
 
   void UserAsksForMenu() { ask_for_menu = true; };
-  void Really_SetState(game_loop_state_t new_state); // called by the 
action_handler
 
   // Signal death of a player
-  void SignalCharacterDeath (const Character *character) const;
+  void SignalCharacterDeath (const Character *character);
 
   // Signal character damage
-  void SignalCharacterDamage(const Character *character) const;
+  void SignalCharacterDamage(const Character *character);
 
   // Bonus box handling
   bool NewBox();
diff --git a/src/include/action_handler.cpp b/src/include/action_handler.cpp
index 7ba25a7..ac7c516 100644
--- a/src/include/action_handler.cpp
+++ b/src/include/action_handler.cpp
@@ -344,12 +344,6 @@ static void Action_DropBonusBox (Action *a)
   }
 }
 
-static void Action_Game_SetState (Action *a)
-{
-  Game::game_loop_state_t state = Game::game_loop_state_t(a->PopInt());
-  Game::GetInstance()->Really_SetState(state);
-}
-
 // ########################################################
 
 static void Action_Rules_SetGameMode (Action *a)
@@ -1006,7 +1000,6 @@ void Action_Handler_Init()
   ActionHandler::GetInstance()->Register (Action::ACTION_PLAYER_CHANGE_WEAPON, 
"PLAYER_change_weapon", &Action_Player_ChangeWeapon);
   ActionHandler::GetInstance()->Register 
(Action::ACTION_PLAYER_CHANGE_CHARACTER, "PLAYER_change_character", 
&Action_Player_ChangeCharacter);
   ActionHandler::GetInstance()->Register (Action::ACTION_GAMELOOP_NEXT_TEAM, 
"GAMELOOP_change_team", &Action_Game_NextTeam);
-  ActionHandler::GetInstance()->Register (Action::ACTION_GAMELOOP_SET_STATE, 
"GAMELOOP_set_state", &Action_Game_SetState);
   ActionHandler::GetInstance()->Register (Action::ACTION_GAME_CALCULATE_FRAME, 
"GAME_calculate_frame", &Action_Game_CalculateFrame);
 
   // ########################################################
-- 
1.6.0.4


_______________________________________________
Wormux-dev mailing list
Wormux-dev@gna.org
https://mail.gna.org/listinfo/wormux-dev

Répondre à