mirror of
https://github.com/vcmi/vcmi.git
synced 2025-05-13 22:06:58 +02:00
* CHexFieldControl renamed to CClickableHex * CCreatureAnimation.cpp/.h moved to BattleInterface/CCreatureAnimation.cpp/.h * Removed unused project files * Added VCMI_client filters file for VS 2010 * Gathered common parts of StdInc.h in Global.h * Boost.Spirit has been included in PCH for ERM project * StopWatch renamed to CStopWatch * GuiBase.cpp split up in UIFramework/...
95 lines
2.8 KiB
C++
95 lines
2.8 KiB
C++
#include "StdInc.h"
|
|
#include "CMeleeAttackAnimation.h"
|
|
|
|
#include "CBattleInterface.h"
|
|
#include "CCreatureAnimation.h"
|
|
#include "../../lib/BattleState.h"
|
|
#include "CReverseAnimation.h"
|
|
|
|
bool CMeleeAttackAnimation::init()
|
|
{
|
|
if( !CAttackAnimation::checkInitialConditions() )
|
|
return false;
|
|
|
|
//if(owner->creAnims[stackID]->getType()!=2)
|
|
//{
|
|
// return false;
|
|
//}
|
|
|
|
if(!attackingStack || myAnim()->getType() == 5)
|
|
{
|
|
endAnim();
|
|
|
|
return false;
|
|
}
|
|
|
|
bool toReverse = isToReverse(attackingStackPosBeforeReturn, dest, owner->creDir[stack->ID], attackedStack->doubleWide(), owner->creDir[attackedStack->ID]);
|
|
|
|
if(toReverse)
|
|
{
|
|
|
|
owner->addNewAnim(new CReverseAnimation(owner, stack, attackingStackPosBeforeReturn, true));
|
|
return false;
|
|
}
|
|
//reversed
|
|
|
|
shooting = false;
|
|
|
|
static const CCreatureAnim::EAnimType mutPosToGroup[] = {CCreatureAnim::ATTACK_UP, CCreatureAnim::ATTACK_UP,
|
|
CCreatureAnim::ATTACK_FRONT, CCreatureAnim::ATTACK_DOWN, CCreatureAnim::ATTACK_DOWN, CCreatureAnim::ATTACK_FRONT};
|
|
|
|
int revShiftattacker = (attackingStack->attackerOwned ? -1 : 1);
|
|
|
|
int mutPos = SBattleHex::mutualPosition(attackingStackPosBeforeReturn, dest);
|
|
if(mutPos == -1 && attackingStack->doubleWide())
|
|
{
|
|
mutPos = SBattleHex::mutualPosition(attackingStackPosBeforeReturn + revShiftattacker, attackedStack->position);
|
|
}
|
|
if (mutPos == -1 && attackedStack->doubleWide())
|
|
{
|
|
mutPos = SBattleHex::mutualPosition(attackingStackPosBeforeReturn, attackedStack->occupiedHex());
|
|
}
|
|
if (mutPos == -1 && attackedStack->doubleWide() && attackingStack->doubleWide())
|
|
{
|
|
mutPos = SBattleHex::mutualPosition(attackingStackPosBeforeReturn + revShiftattacker, attackedStack->occupiedHex());
|
|
}
|
|
|
|
|
|
switch(mutPos) //attack direction
|
|
{
|
|
case 0: case 1: case 2: case 3: case 4: case 5:
|
|
group = mutPosToGroup[mutPos];
|
|
break;
|
|
default:
|
|
tlog1<<"Critical Error! Wrong dest in stackAttacking! dest: "<<dest<<" attacking stack pos: "<<attackingStackPosBeforeReturn<<" mutual pos: "<<mutPos<<std::endl;
|
|
group = CCreatureAnim::ATTACK_FRONT;
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void CMeleeAttackAnimation::nextFrame()
|
|
{
|
|
/*for(std::list<std::pair<CBattleAnimation *, bool> >::const_iterator it = owner->pendingAnims.begin(); it != owner->pendingAnims.end(); ++it)
|
|
{
|
|
CBattleMoveStart * anim = dynamic_cast<CBattleMoveStart *>(it->first);
|
|
CReverseAnim * anim2 = dynamic_cast<CReverseAnim *>(it->first);
|
|
if( (anim && anim->stackID == stackID) || (anim2 && anim2->stackID == stackID ) )
|
|
return;
|
|
}*/
|
|
|
|
CAttackAnimation::nextFrame();
|
|
}
|
|
|
|
void CMeleeAttackAnimation::endAnim()
|
|
{
|
|
CBattleAnimation::endAnim();
|
|
|
|
delete this;
|
|
}
|
|
|
|
CMeleeAttackAnimation::CMeleeAttackAnimation(CBattleInterface * _owner, const CStack * attacker, SBattleHex _dest, const CStack * _attacked)
|
|
: CAttackAnimation(_owner, attacker, _dest, _attacked)
|
|
{
|
|
} |