This is important as the time when the character shoots depend on the shoot 
animation.
---
 src/character/body.cpp      |    5 +-
 src/character/character.cpp |   97 +++++++++++++++++++++++-------------------
 2 files changed, 56 insertions(+), 46 deletions(-)

diff --git a/src/character/body.cpp b/src/character/body.cpp
index f78427f..144bb0a 100644
--- a/src/character/body.cpp
+++ b/src/character/body.cpp
@@ -32,9 +32,9 @@
 #include "interface/mouse.h"
 #include "particles/body_member.h"
 #include "particles/teleport_member.h"
+#include "network/randomsync.h"
 #include "team/team.h"
 #include "team/teams_list.h"
-#include <WORMUX_random.h>
 #include "tool/resource_manager.h"
 #include "tool/xml_document.h"
 
@@ -607,7 +607,8 @@ void Body::SetMovement(const std::string& name)
 void Body::PlayAnimation()
 {
   std::ostringstream name;
-  name << "animation" << RandomLocal().GetLong(0, animation_number - 1);
+  MSG_DEBUG("random.get", "Body::PlayAnimation()");
+  name << "animation" << RandomSync().GetLong(0, animation_number - 1);
   SetClotheOnce(name.str());
   SetMovementOnce(name.str());
 }
diff --git a/src/character/character.cpp b/src/character/character.cpp
index f259f88..dcdf599 100644
--- a/src/character/character.cpp
+++ b/src/character/character.cpp
@@ -94,12 +94,19 @@ void Character::SetBody(Body* char_body)
   SetClothe("normal");
   SetMovement("breathe");
 
-  MSG_DEBUG("random.get", "Character::SetBody(...)");
+  MSG_DEBUG("random.get", "Character::SetBody(...) direction");
   SetDirection(RandomSync().GetBool() ? DIRECTION_LEFT : DIRECTION_RIGHT);
-  body->SetFrame(RandomLocal().GetLong(0, body->GetFrameCount() - 1));
+  MSG_DEBUG("random.get", "Character::SetBody(...) body frame");
+  body->SetFrame(RandomSync().GetLong(0, body->GetFrameCount() - 1));
   SetSize(body->GetSize());
 }
 
+static uint GetRandomAnimationTimeValue()
+{
+  MSG_DEBUG("random.get", "Character::SetBody(...) body frame");
+  return Time::GetInstance()->Read() + 
RandomSync().GetLong(ANIM_PAUSE_MIN,ANIM_PAUSE_MAX);
+}
+
 Character::Character (Team& my_team, const std::string &name, Body *char_body) 
:
   PhysicalObj("character"),
   character_name(name),
@@ -118,7 +125,7 @@ Character::Character (Team& my_team, const std::string 
&name, Body *char_body) :
   rl_motion_pause(0),
   do_nothing_time(0),
   walking_time(0),
-  animation_time(Time::GetInstance()->Read() + 
RandomLocal().GetLong(ANIM_PAUSE_MIN,ANIM_PAUSE_MAX)),
+  animation_time(GetRandomAnimationTimeValue()),
   lost_energy(0),
   hidden(false),
   channel_step(-1),
@@ -384,47 +391,6 @@ void Character::Draw()
       || IsDead())
     draw_loosing_energy = false;
 
-  if (Game::GetInstance()->ReadState() == Game::END_TURN && body->IsWalking())
-    body->ResetWalk();
-
-  if (Time::GetInstance()->Read() > animation_time && !IsActiveCharacter() && 
!IsDead()
-      && body->GetMovement().substr(0,9) != "animation"
-      &&  body->GetClothe().substr(0,9) != "animation")
-  {
-    body->PlayAnimation();
-    animation_time = Time::GetInstance()->Read() + body->GetMovementDuration() 
+ RandomLocal().GetLong(ANIM_PAUSE_MIN,ANIM_PAUSE_MAX);
-  }
-
-  // Stop the animation or the black skin if we are playing
-  if (IsActiveCharacter()
-      && Game::GetInstance()->ReadState() == Game::PLAYING
-      && (body->GetMovement().substr(0,9) == "animation"
-         || body->GetClothe().substr(0,9) == "animation"
-         || body->GetClothe() == "black"))
-  {
-    SetClothe("normal");
-    SetMovement("breathe");
-  }
-
-  // Stop flying if we don't go fast enough
-  double n, a;
-  GetSpeed(n, a);
-  if (body->GetMovement() == "fly" && n < MIN_SPEED_TO_FLY)
-    SetMovement("breathe");
-
-
-  // Refresh the body (needed to determine if "weapon-*-begin-shoot" is 
finnished)
-  body->Build();
-
-  if (prepare_shoot)
-  {
-    if (body->GetMovement() != "weapon-" + ActiveTeam().GetWeapon().GetID() + 
"-begin-shoot")
-    {
-      // if the movement is finnished, shoot !
-      DoShoot();
-      prepare_shoot = false;
-    }
-  }
 
   Point2i pos = GetPosition();
   body->Draw(pos);
@@ -639,6 +605,49 @@ void Character::Refresh()
     rotation = M_PI * speed.y / speed_init;
     body->SetRotation(rotation);
   }
+
+  if (Game::GetInstance()->ReadState() == Game::END_TURN && body->IsWalking())
+    body->ResetWalk();
+
+  if (Time::GetInstance()->Read() > animation_time && !IsActiveCharacter() && 
!IsDead()
+      && body->GetMovement().substr(0,9) != "animation"
+      &&  body->GetClothe().substr(0,9) != "animation")
+  {
+    body->PlayAnimation();
+    MSG_DEBUG("random.get", "Character::Refresh()");
+    animation_time = Time::GetInstance()->Read() + body->GetMovementDuration() 
+ RandomSync().GetLong(ANIM_PAUSE_MIN,ANIM_PAUSE_MAX);
+  }
+
+  // Stop the animation or the black skin if we are playing
+  if (IsActiveCharacter()
+      && Game::GetInstance()->ReadState() == Game::PLAYING
+      && (body->GetMovement().substr(0,9) == "animation"
+         || body->GetClothe().substr(0,9) == "animation"
+         || body->GetClothe() == "black"))
+  {
+    SetClothe("normal");
+    SetMovement("breathe");
+  }
+
+  // Stop flying if we don't go fast enough
+  double n, a;
+  GetSpeed(n, a);
+  if (body->GetMovement() == "fly" && n < MIN_SPEED_TO_FLY)
+    SetMovement("breathe");
+
+
+  // Refresh the body (needed to determine if "weapon-*-begin-shoot" is 
finnished)
+  body->Build();
+
+  if (prepare_shoot)
+  {
+    if (body->GetMovement() != "weapon-" + ActiveTeam().GetWeapon().GetID() + 
"-begin-shoot")
+    {
+      // if the movement is finnished, shoot !
+      DoShoot();
+      prepare_shoot = false;
+    }
+  }
 }
 
 // Prepare a new turn
-- 
1.6.0.4


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

Répondre à