forked from teamnwah/openmw-tes3coop
Fix code duplication
This commit is contained in:
parent
c98b7db4c1
commit
7e33471edb
5 changed files with 24 additions and 37 deletions
|
@ -228,18 +228,7 @@ namespace MWClass
|
||||||
weapon = *weaponslot;
|
weapon = *weaponslot;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reduce fatigue
|
MWMechanics::applyFatigueLoss(ptr, weapon);
|
||||||
// somewhat of a guess, but using the weapon weight makes sense
|
|
||||||
const float fFatigueAttackBase = gmst.find("fFatigueAttackBase")->getFloat();
|
|
||||||
const float fFatigueAttackMult = gmst.find("fFatigueAttackMult")->getFloat();
|
|
||||||
const float fWeaponFatigueMult = gmst.find("fWeaponFatigueMult")->getFloat();
|
|
||||||
MWMechanics::DynamicStat<float> fatigue = stats.getFatigue();
|
|
||||||
const float normalizedEncumbrance = getNormalizedEncumbrance(ptr);
|
|
||||||
float fatigueLoss = fFatigueAttackBase + normalizedEncumbrance * fFatigueAttackMult;
|
|
||||||
if (!weapon.isEmpty())
|
|
||||||
fatigueLoss += weapon.getClass().getWeight(weapon) * stats.getAttackStrength() * fWeaponFatigueMult;
|
|
||||||
fatigue.setCurrent(fatigue.getCurrent() - fatigueLoss);
|
|
||||||
stats.setFatigue(fatigue);
|
|
||||||
|
|
||||||
// TODO: where is the distance defined?
|
// TODO: where is the distance defined?
|
||||||
float dist = 200.f;
|
float dist = 200.f;
|
||||||
|
|
|
@ -486,18 +486,7 @@ namespace MWClass
|
||||||
if(!weapon.isEmpty() && weapon.getTypeName() != typeid(ESM::Weapon).name())
|
if(!weapon.isEmpty() && weapon.getTypeName() != typeid(ESM::Weapon).name())
|
||||||
weapon = MWWorld::Ptr();
|
weapon = MWWorld::Ptr();
|
||||||
|
|
||||||
// Reduce fatigue
|
MWMechanics::applyFatigueLoss(ptr, weapon);
|
||||||
// somewhat of a guess, but using the weapon weight makes sense
|
|
||||||
const float fFatigueAttackBase = store.find("fFatigueAttackBase")->getFloat();
|
|
||||||
const float fFatigueAttackMult = store.find("fFatigueAttackMult")->getFloat();
|
|
||||||
const float fWeaponFatigueMult = store.find("fWeaponFatigueMult")->getFloat();
|
|
||||||
MWMechanics::DynamicStat<float> fatigue = getCreatureStats(ptr).getFatigue();
|
|
||||||
const float normalizedEncumbrance = getNormalizedEncumbrance(ptr);
|
|
||||||
float fatigueLoss = fFatigueAttackBase + normalizedEncumbrance * fFatigueAttackMult;
|
|
||||||
if (!weapon.isEmpty())
|
|
||||||
fatigueLoss += weapon.getClass().getWeight(weapon) * getNpcStats(ptr).getAttackStrength() * fWeaponFatigueMult;
|
|
||||||
fatigue.setCurrent(fatigue.getCurrent() - fatigueLoss);
|
|
||||||
getCreatureStats(ptr).setFatigue(fatigue);
|
|
||||||
|
|
||||||
const float fCombatDistance = store.find("fCombatDistance")->getFloat();
|
const float fCombatDistance = store.find("fCombatDistance")->getFloat();
|
||||||
float dist = fCombatDistance * (!weapon.isEmpty() ?
|
float dist = fCombatDistance * (!weapon.isEmpty() ?
|
||||||
|
|
|
@ -371,6 +371,23 @@ namespace MWMechanics
|
||||||
sndMgr->playSound3D(victim, "Hand To Hand Hit", 1.0f, 1.0f);
|
sndMgr->playSound3D(victim, "Hand To Hand Hit", 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void applyFatigueLoss(const MWWorld::Ptr &attacker, const MWWorld::Ptr &weapon)
|
||||||
|
{
|
||||||
|
// somewhat of a guess, but using the weapon weight makes sense
|
||||||
|
const MWWorld::Store<ESM::GameSetting>& store = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
|
||||||
|
const float fFatigueAttackBase = store.find("fFatigueAttackBase")->getFloat();
|
||||||
|
const float fFatigueAttackMult = store.find("fFatigueAttackMult")->getFloat();
|
||||||
|
const float fWeaponFatigueMult = store.find("fWeaponFatigueMult")->getFloat();
|
||||||
|
CreatureStats& stats = attacker.getClass().getCreatureStats(attacker);
|
||||||
|
MWMechanics::DynamicStat<float> fatigue = stats.getFatigue();
|
||||||
|
const float normalizedEncumbrance = attacker.getClass().getNormalizedEncumbrance(attacker);
|
||||||
|
float fatigueLoss = fFatigueAttackBase + normalizedEncumbrance * fFatigueAttackMult;
|
||||||
|
if (!weapon.isEmpty())
|
||||||
|
fatigueLoss += weapon.getClass().getWeight(weapon) * stats.getAttackStrength() * fWeaponFatigueMult;
|
||||||
|
fatigue.setCurrent(fatigue.getCurrent() - fatigueLoss);
|
||||||
|
stats.setFatigue(fatigue);
|
||||||
|
}
|
||||||
|
|
||||||
bool isEnvironmentCompatible(const MWWorld::Ptr& attacker, const MWWorld::Ptr& victim)
|
bool isEnvironmentCompatible(const MWWorld::Ptr& attacker, const MWWorld::Ptr& victim)
|
||||||
{
|
{
|
||||||
const MWWorld::Class& attackerClass = attacker.getClass();
|
const MWWorld::Class& attackerClass = attacker.getClass();
|
||||||
|
|
|
@ -34,6 +34,9 @@ void adjustWeaponDamage (float& damage, const MWWorld::Ptr& weapon);
|
||||||
|
|
||||||
void getHandToHandDamage (const MWWorld::Ptr& attacker, const MWWorld::Ptr& victim, float& damage, bool& healthdmg);
|
void getHandToHandDamage (const MWWorld::Ptr& attacker, const MWWorld::Ptr& victim, float& damage, bool& healthdmg);
|
||||||
|
|
||||||
|
/// Apply the fatigue loss incurred by attacking with the given weapon (weapon may be empty = hand-to-hand)
|
||||||
|
void applyFatigueLoss(const MWWorld::Ptr& attacker, const MWWorld::Ptr& weapon);
|
||||||
|
|
||||||
/// Can attacker operate in victim's environment?
|
/// Can attacker operate in victim's environment?
|
||||||
/// e.g. If attacker is a fish, is victim in water? Or, if attacker can't swim, is victim on land?
|
/// e.g. If attacker is a fish, is victim in water? Or, if attacker can't swim, is victim on land?
|
||||||
bool isEnvironmentCompatible(const MWWorld::Ptr& attacker, const MWWorld::Ptr& victim);
|
bool isEnvironmentCompatible(const MWWorld::Ptr& attacker, const MWWorld::Ptr& victim);
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "../mwworld/esmstore.hpp"
|
#include "../mwworld/esmstore.hpp"
|
||||||
|
|
||||||
#include "../mwmechanics/creaturestats.hpp"
|
#include "../mwmechanics/creaturestats.hpp"
|
||||||
|
#include "../mwmechanics/combat.hpp"
|
||||||
|
|
||||||
#include "animation.hpp"
|
#include "animation.hpp"
|
||||||
|
|
||||||
|
@ -96,19 +97,7 @@ void WeaponAnimation::releaseArrow(MWWorld::Ptr actor)
|
||||||
const MWWorld::Store<ESM::GameSetting> &gmst =
|
const MWWorld::Store<ESM::GameSetting> &gmst =
|
||||||
MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
|
MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
|
||||||
|
|
||||||
// Reduce fatigue
|
MWMechanics::applyFatigueLoss(actor, *weapon);
|
||||||
// somewhat of a guess, but using the weapon weight makes sense
|
|
||||||
const float fFatigueAttackBase = gmst.find("fFatigueAttackBase")->getFloat();
|
|
||||||
const float fFatigueAttackMult = gmst.find("fFatigueAttackMult")->getFloat();
|
|
||||||
const float fWeaponFatigueMult = gmst.find("fWeaponFatigueMult")->getFloat();
|
|
||||||
MWMechanics::CreatureStats& attackerStats = actor.getClass().getCreatureStats(actor);
|
|
||||||
MWMechanics::DynamicStat<float> fatigue = attackerStats.getFatigue();
|
|
||||||
const float normalizedEncumbrance = actor.getClass().getNormalizedEncumbrance(actor);
|
|
||||||
float fatigueLoss = fFatigueAttackBase + normalizedEncumbrance * fFatigueAttackMult;
|
|
||||||
if (!weapon->isEmpty())
|
|
||||||
fatigueLoss += weapon->getClass().getWeight(*weapon) * attackerStats.getAttackStrength() * fWeaponFatigueMult;
|
|
||||||
fatigue.setCurrent(fatigue.getCurrent() - fatigueLoss);
|
|
||||||
attackerStats.setFatigue(fatigue);
|
|
||||||
|
|
||||||
if (weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanThrown)
|
if (weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanThrown)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue