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