mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-17 10:21:11 +00:00
Merged pull request #1843
This commit is contained in:
commit
4d280add81
@ -1221,11 +1221,11 @@ bool CharacterController::updateWeaponState()
|
|||||||
bool isStillWeapon = weaptype > WeapType_HandToHand && weaptype < WeapType_Spell &&
|
bool isStillWeapon = weaptype > WeapType_HandToHand && weaptype < WeapType_Spell &&
|
||||||
mWeaponType > WeapType_HandToHand && mWeaponType < WeapType_Spell;
|
mWeaponType > WeapType_HandToHand && mWeaponType < WeapType_Spell;
|
||||||
|
|
||||||
if(weaptype != mWeaponType && !isKnockedOut() &&
|
if(!isKnockedOut() && !isKnockedDown() && !isRecovery())
|
||||||
!isKnockedDown() && !isRecovery())
|
|
||||||
{
|
{
|
||||||
std::string weapgroup;
|
std::string weapgroup;
|
||||||
if ((!isWerewolf || mWeaponType != WeapType_Spell)
|
if ((!isWerewolf || mWeaponType != WeapType_Spell)
|
||||||
|
&& weaptype != mWeaponType
|
||||||
&& mUpperBodyState != UpperCharState_UnEquipingWeap
|
&& mUpperBodyState != UpperCharState_UnEquipingWeap
|
||||||
&& !isStillWeapon)
|
&& !isStillWeapon)
|
||||||
{
|
{
|
||||||
@ -1250,49 +1250,60 @@ bool CharacterController::updateWeaponState()
|
|||||||
|
|
||||||
float complete;
|
float complete;
|
||||||
bool animPlaying = mAnimation->getInfo(mCurrentWeapon, &complete);
|
bool animPlaying = mAnimation->getInfo(mCurrentWeapon, &complete);
|
||||||
|
|
||||||
if (!animPlaying || complete >= 1.0f)
|
if (!animPlaying || complete >= 1.0f)
|
||||||
{
|
{
|
||||||
forcestateupdate = true;
|
// Weapon is changed, no current animation (e.g. unequipping or attack).
|
||||||
mAnimation->showCarriedLeft(updateCarriedLeftVisible(weaptype));
|
// Start equipping animation now.
|
||||||
|
if (weaptype != mWeaponType)
|
||||||
getWeaponGroup(weaptype, weapgroup);
|
|
||||||
mAnimation->setWeaponGroup(weapgroup);
|
|
||||||
|
|
||||||
if (!isStillWeapon)
|
|
||||||
{
|
{
|
||||||
if (weaptype == WeapType_None)
|
forcestateupdate = true;
|
||||||
|
mAnimation->showCarriedLeft(updateCarriedLeftVisible(weaptype));
|
||||||
|
|
||||||
|
getWeaponGroup(weaptype, weapgroup);
|
||||||
|
mAnimation->setWeaponGroup(weapgroup);
|
||||||
|
|
||||||
|
if (!isStillWeapon)
|
||||||
{
|
{
|
||||||
// Disable current weapon animation manually
|
|
||||||
mAnimation->disable(mCurrentWeapon);
|
mAnimation->disable(mCurrentWeapon);
|
||||||
|
if (weaptype != WeapType_None)
|
||||||
|
{
|
||||||
|
mAnimation->showWeapons(false);
|
||||||
|
mAnimation->play(weapgroup, priorityWeapon,
|
||||||
|
MWRender::Animation::BlendMask_All, true,
|
||||||
|
1.0f, "equip start", "equip stop", 0.0f, 0);
|
||||||
|
mUpperBodyState = UpperCharState_EquipingWeap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
mAnimation->showWeapons(false);
|
|
||||||
mAnimation->play(weapgroup, priorityWeapon,
|
|
||||||
MWRender::Animation::BlendMask_All, true,
|
|
||||||
1.0f, "equip start", "equip stop", 0.0f, 0);
|
|
||||||
mUpperBodyState = UpperCharState_EquipingWeap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isWerewolf)
|
if(isWerewolf)
|
||||||
{
|
{
|
||||||
const MWWorld::ESMStore &store = MWBase::Environment::get().getWorld()->getStore();
|
const MWWorld::ESMStore &store = MWBase::Environment::get().getWorld()->getStore();
|
||||||
const ESM::Sound *sound = store.get<ESM::Sound>().searchRandom("WolfEquip");
|
const ESM::Sound *sound = store.get<ESM::Sound>().searchRandom("WolfEquip");
|
||||||
if(sound)
|
if(sound)
|
||||||
|
{
|
||||||
|
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
||||||
|
sndMgr->playSound3D(mPtr, sound->mId, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mWeaponType = weaptype;
|
||||||
|
getWeaponGroup(mWeaponType, mCurrentWeapon);
|
||||||
|
|
||||||
|
if(!upSoundId.empty() && !isStillWeapon)
|
||||||
{
|
{
|
||||||
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
||||||
sndMgr->playSound3D(mPtr, sound->mId, 1.0f, 1.0f);
|
sndMgr->playSound3D(mPtr, upSoundId, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mWeaponType = weaptype;
|
// Make sure that we disabled unequipping animation
|
||||||
getWeaponGroup(mWeaponType, mCurrentWeapon);
|
if (mUpperBodyState == UpperCharState_UnEquipingWeap)
|
||||||
|
|
||||||
if(!upSoundId.empty() && !isStillWeapon)
|
|
||||||
{
|
{
|
||||||
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
mUpperBodyState = UpperCharState_Nothing;
|
||||||
sndMgr->playSound3D(mPtr, upSoundId, 1.0f, 1.0f);
|
mAnimation->disable(mCurrentWeapon);
|
||||||
|
mWeaponType = WeapType_None;
|
||||||
|
getWeaponGroup(mWeaponType, mCurrentWeapon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -315,14 +315,14 @@ namespace MWMechanics
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CastSpell::CastSpell(const MWWorld::Ptr &caster, const MWWorld::Ptr &target, const bool fromProjectile, const bool isScripted)
|
CastSpell::CastSpell(const MWWorld::Ptr &caster, const MWWorld::Ptr &target, const bool fromProjectile, const bool manualSpell)
|
||||||
: mCaster(caster)
|
: mCaster(caster)
|
||||||
, mTarget(target)
|
, mTarget(target)
|
||||||
, mStack(false)
|
, mStack(false)
|
||||||
, mHitPosition(0,0,0)
|
, mHitPosition(0,0,0)
|
||||||
, mAlwaysSucceed(false)
|
, mAlwaysSucceed(false)
|
||||||
, mFromProjectile(fromProjectile)
|
, mFromProjectile(fromProjectile)
|
||||||
, mIsScripted(isScripted)
|
, mManualSpell(manualSpell)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -864,7 +864,7 @@ namespace MWMechanics
|
|||||||
|
|
||||||
bool godmode = mCaster == MWMechanics::getPlayer() && MWBase::Environment::get().getWorld()->getGodModeState();
|
bool godmode = mCaster == MWMechanics::getPlayer() && MWBase::Environment::get().getWorld()->getGodModeState();
|
||||||
|
|
||||||
if (mCaster.getClass().isActor() && !mAlwaysSucceed && !mIsScripted)
|
if (mCaster.getClass().isActor() && !mAlwaysSucceed && !mManualSpell)
|
||||||
{
|
{
|
||||||
school = getSpellSchool(spell, mCaster);
|
school = getSpellSchool(spell, mCaster);
|
||||||
|
|
||||||
@ -1037,7 +1037,7 @@ namespace MWMechanics
|
|||||||
|
|
||||||
bool CastSpell::spellIncreasesSkill()
|
bool CastSpell::spellIncreasesSkill()
|
||||||
{
|
{
|
||||||
if (mIsScripted)
|
if (mManualSpell)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return MWMechanics::spellIncreasesSkill(mId);
|
return MWMechanics::spellIncreasesSkill(mId);
|
||||||
|
@ -88,10 +88,10 @@ namespace MWMechanics
|
|||||||
osg::Vec3f mHitPosition; // Used for spawning area orb
|
osg::Vec3f mHitPosition; // Used for spawning area orb
|
||||||
bool mAlwaysSucceed; // Always succeed spells casted by NPCs/creatures regardless of their chance (default: false)
|
bool mAlwaysSucceed; // Always succeed spells casted by NPCs/creatures regardless of their chance (default: false)
|
||||||
bool mFromProjectile; // True if spell is cast by enchantment of some projectile (arrow, bolt or thrown weapon)
|
bool mFromProjectile; // True if spell is cast by enchantment of some projectile (arrow, bolt or thrown weapon)
|
||||||
bool mIsScripted; // True if spell is casted from script and ignores some checks (mana level, success chance, etc.)
|
bool mManualSpell; // True if spell is casted from script and ignores some checks (mana level, success chance, etc.)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CastSpell(const MWWorld::Ptr& caster, const MWWorld::Ptr& target, const bool fromProjectile=false, const bool isScripted=false);
|
CastSpell(const MWWorld::Ptr& caster, const MWWorld::Ptr& target, const bool fromProjectile=false, const bool manualSpell=false);
|
||||||
|
|
||||||
bool cast (const ESM::Spell* spell);
|
bool cast (const ESM::Spell* spell);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user