From 74be84559432c612889745c9e839d5de997c33e6 Mon Sep 17 00:00:00 2001 From: mateuszb Date: Thu, 19 Mar 2009 19:04:46 +0000 Subject: [PATCH] * fixed bug with looping animation supposed to be played once * minor changes --- CGameState.cpp | 10 +++++----- CGameState.h | 32 ++++++++++++++++---------------- client/CCreatureAnimation.cpp | 6 +++--- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/CGameState.cpp b/CGameState.cpp index b090a087f..7b025daab 100644 --- a/CGameState.cpp +++ b/CGameState.cpp @@ -1526,7 +1526,7 @@ CPath * CGameState::getPath(int3 src, int3 dest, const CGHeroInstance * hero) else blockLandSea = boost::logic::indeterminate; - //graph initialization + //graph initialization std::vector< std::vector > graph; graph.resize(map->width); for(size_t i=0; i BattleInfo::getStackQueue() return ret; } -int3 CPath::startPos() +int3 CPath::startPos() const { - return int3(nodes[nodes.size()-1].coord.x,nodes[nodes.size()-1].coord.y,nodes[nodes.size()-1].coord.z); + return nodes[nodes.size()-1].coord; } void CPath::convert(ui8 mode) //mode=0 -> from 'manifest' to 'object' { @@ -1939,7 +1939,7 @@ void CPath::convert(ui8 mode) //mode=0 -> from 'manifest' to 'object' } } -int3 CPath::endPos() +int3 CPath::endPos() const { - return int3(nodes[0].coord.x,nodes[0].coord.y,nodes[0].coord.z); + return nodes[0].coord; } diff --git a/CGameState.h b/CGameState.h index d126fa7e8..b5739d90a 100644 --- a/CGameState.h +++ b/CGameState.h @@ -197,22 +197,22 @@ struct UpgradeInfo UpgradeInfo(){oldID = -1;}; }; -struct CPathNode -{ - bool accesible; //true if a hero can be on this node - int dist; //distance from the first node of searching; -1 is infinity - CPathNode * theNodeBefore; - int3 coord; //coordiantes - bool visited; -}; - -struct DLL_EXPORT CPath -{ - std::vector nodes; //just get node by node - - int3 startPos(); // start point - int3 endPos(); //destination point - void convert(ui8 mode); //mode=0 -> from 'manifest' to 'object' +struct CPathNode +{ + bool accesible; //true if a hero can be on this node + int dist; //distance from the first node of searching; -1 is infinity + CPathNode * theNodeBefore; + int3 coord; //coordiantes + bool visited; +}; + +struct DLL_EXPORT CPath +{ + std::vector nodes; //just get node by node + + int3 startPos() const; // start point + int3 endPos() const; //destination point + void convert(ui8 mode); //mode=0 -> from 'manifest' to 'object' }; class DLL_EXPORT CGameState diff --git a/client/CCreatureAnimation.cpp b/client/CCreatureAnimation.cpp index 0cb4aa3af..8781d8fc1 100644 --- a/client/CCreatureAnimation.cpp +++ b/client/CCreatureAnimation.cpp @@ -110,11 +110,10 @@ void CCreatureAnimation::incrementFrame() { if(type!=-1) //when a specific part of animation is played { - internalFrame = (internalFrame + 1) % frameGroups[type].size(); - curFrame = frameGroups[type][internalFrame]; - + ++internalFrame; if(internalFrame == frameGroups[type].size()) //rewind { + internalFrame = 0; if(once) //playing animation once - return to standing animation { type = 2; @@ -126,6 +125,7 @@ void CCreatureAnimation::incrementFrame() curFrame = frameGroups[type][0]; } } + curFrame = frameGroups[type][internalFrame]; } else //when whole animation is played {