@ -29,28 +29,28 @@ float signedAngleRadians (const osg::Vec3f& v1, const osg::Vec3f& v2, const osg:
return std : : atan2 ( ( normal * ( v1 ^ v2 ) ) , ( v1 * v2 ) ) ;
return std : : atan2 ( ( normal * ( v1 ^ v2 ) ) , ( v1 * v2 ) ) ;
}
}
bool applyEnchantment ( const MWWorld : : Ptr & attacker , const MWWorld : : Ptr & victim , const MWWorld : : Ptr & object , const osg : : Vec3f & hitPosition )
}
namespace MWMechanics
{
{
std : : string enchantmentName = ! object . isEmpty ( ) ? object . getClass ( ) . getEnchantment ( object ) : " " ;
if ( ! enchantmentName . empty ( ) )
bool applyOnStrikeEnchantment ( const MWWorld : : Ptr & attacker , const MWWorld : : Ptr & victim , const MWWorld : : Ptr & object , const osg : : Vec3f & hitPosition )
{
{
const ESM : : Enchantment * enchantment = MWBase : : Environment : : get ( ) . getWorld ( ) - > getStore ( ) . get < ESM : : Enchantment > ( ) . find (
std : : string enchantmentName = ! object . isEmpty ( ) ? object . getClass ( ) . getEnchantment ( object ) : " " ;
enchantmentName ) ;
if ( ! enchantmentName . empty ( ) )
if ( enchantment - > mData . mType = = ESM : : Enchantment : : WhenStrikes )
{
{
MWMechanics : : CastSpell cast ( attacker , victim ) ;
const ESM : : Enchantment * enchantment = MWBase : : Environment : : get ( ) . getWorld ( ) - > getStore ( ) . get < ESM : : Enchantment > ( ) . find (
cast . mHitPosition = hitPosition ;
enchantmentName ) ;
cast . cast ( object ) ;
if ( enchantment - > mData . mType = = ESM : : Enchantment : : WhenStrikes )
return true ;
{
MWMechanics : : CastSpell cast ( attacker , victim ) ;
cast . mHitPosition = hitPosition ;
cast . cast ( object , false ) ;
return true ;
}
}
}
return false ;
}
}
return false ;
}
}
namespace MWMechanics
{
bool blockMeleeAttack ( const MWWorld : : Ptr & attacker , const MWWorld : : Ptr & blocker , const MWWorld : : Ptr & weapon , float damage , float attackStrength )
bool blockMeleeAttack ( const MWWorld : : Ptr & attacker , const MWWorld : : Ptr & blocker , const MWWorld : : Ptr & weapon , float damage , float attackStrength )
{
{
@ -215,9 +215,9 @@ namespace MWMechanics
damage * = gmst . find ( " fCombatKODamageMult " ) - > getFloat ( ) ;
damage * = gmst . find ( " fCombatKODamageMult " ) - > getFloat ( ) ;
// Apply "On hit" effect of the weapon
// Apply "On hit" effect of the weapon
bool appliedEnchantment = apply Enchantment( attacker , victim , weapon , hitPosition ) ;
bool appliedEnchantment = apply OnStrike Enchantment( attacker , victim , weapon , hitPosition ) ;
if ( weapon ! = projectile )
if ( weapon ! = projectile )
appliedEnchantment = apply Enchantment( attacker , victim , projectile , hitPosition ) ;
appliedEnchantment = apply OnStrike Enchantment( attacker , victim , projectile , hitPosition ) ;
if ( damage > 0 )
if ( damage > 0 )
MWBase : : Environment : : get ( ) . getWorld ( ) - > spawnBloodEffect ( victim , hitPosition ) ;
MWBase : : Environment : : get ( ) . getWorld ( ) - > spawnBloodEffect ( victim , hitPosition ) ;