1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-28 20:06:41 +00:00

AiCombat: Handle Start to Min and Min to Max durations of 0 (found in Riekling animation)

This commit is contained in:
scrawl 2014-06-28 01:31:34 +02:00
parent 516014c071
commit 523c2715e3
2 changed files with 10 additions and 4 deletions

View file

@ -118,6 +118,7 @@ namespace MWMechanics
mStrength = 0; mStrength = 0;
mCell = NULL; mCell = NULL;
mLastTargetPos = Ogre::Vector3(0,0,0); mLastTargetPos = Ogre::Vector3(0,0,0);
mMinMaxAttackDurationInitialised = false;
} }
/* /*
@ -219,8 +220,6 @@ namespace MWMechanics
if(smoothTurn(actor, Ogre::Degree(mMovement.mRotation[0]), 0)) mMovement.mRotation[0] = 0; if(smoothTurn(actor, Ogre::Degree(mMovement.mRotation[0]), 0)) mMovement.mRotation[0] = 0;
} }
mTimerAttack -= duration;
//TODO: Some skills affect period of strikes.For berserk-like style period ~ 0.25f //TODO: Some skills affect period of strikes.For berserk-like style period ~ 0.25f
float attacksPeriod = 1.0f; float attacksPeriod = 1.0f;
@ -228,12 +227,16 @@ namespace MWMechanics
if(mReadyToAttack) if(mReadyToAttack)
{ {
if (mMinMaxAttackDuration[0][0] == 0) if (!mMinMaxAttackDurationInitialised)
{ {
// TODO: this must be updated when a different weapon is equipped
getMinMaxAttackDuration(actor, mMinMaxAttackDuration); getMinMaxAttackDuration(actor, mMinMaxAttackDuration);
mMinMaxAttackDurationInitialised = true;
} }
if (mTimerAttack <= 0) mAttack = false; if (mTimerAttack < 0) mAttack = false;
mTimerAttack -= duration;
} }
else else
{ {
@ -326,6 +329,8 @@ namespace MWMechanics
else attackType = ESM::Weapon::AT_Chop; // cause it's =0 else attackType = ESM::Weapon::AT_Chop; // cause it's =0
mStrength = static_cast<float>(rand()) / RAND_MAX; mStrength = static_cast<float>(rand()) / RAND_MAX;
// Note: may be 0 for some animations
mTimerAttack = mMinMaxAttackDuration[attackType][0] + mTimerAttack = mMinMaxAttackDuration[attackType][0] +
(mMinMaxAttackDuration[attackType][1] - mMinMaxAttackDuration[attackType][0]) * mStrength; (mMinMaxAttackDuration[attackType][1] - mMinMaxAttackDuration[attackType][0]) * mStrength;

View file

@ -65,6 +65,7 @@ namespace MWMechanics
float mStrength; // this is actually make sense only in ranged combat float mStrength; // this is actually make sense only in ranged combat
float mMinMaxAttackDuration[3][2]; // slash, thrust, chop has different durations float mMinMaxAttackDuration[3][2]; // slash, thrust, chop has different durations
bool mMinMaxAttackDurationInitialised;
bool mForceNoShortcut; bool mForceNoShortcut;
ESM::Position mShortcutFailPos; ESM::Position mShortcutFailPos;