mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-31 10:36:42 +00:00
replaced old abilities container in CreatureStats with a Spells object
This commit is contained in:
parent
750d79eaf0
commit
e04ccfced0
3 changed files with 7 additions and 53 deletions
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "stat.hpp"
|
#include "stat.hpp"
|
||||||
#include "magiceffects.hpp"
|
#include "magiceffects.hpp"
|
||||||
|
#include "spells.hpp"
|
||||||
|
|
||||||
namespace MWMechanics
|
namespace MWMechanics
|
||||||
{
|
{
|
||||||
|
@ -14,7 +15,7 @@ namespace MWMechanics
|
||||||
Stat<int> mAttributes[8];
|
Stat<int> mAttributes[8];
|
||||||
DynamicStat<int> mDynamic[3]; // health, magicka, fatigue
|
DynamicStat<int> mDynamic[3]; // health, magicka, fatigue
|
||||||
int mLevel;
|
int mLevel;
|
||||||
std::set<std::string> mAbilities;
|
Spells mSpells;
|
||||||
MagicEffects mMagicEffects;
|
MagicEffects mMagicEffects;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace MWMechanics
|
||||||
|
|
||||||
// reset
|
// reset
|
||||||
creatureStats.mLevel = player->npdt52.level;
|
creatureStats.mLevel = player->npdt52.level;
|
||||||
creatureStats.mAbilities.clear();
|
creatureStats.mSpells.clear();
|
||||||
creatureStats.mMagicEffects = MagicEffects();
|
creatureStats.mMagicEffects = MagicEffects();
|
||||||
|
|
||||||
for (int i=0; i<27; ++i)
|
for (int i=0; i<27; ++i)
|
||||||
|
@ -71,7 +71,7 @@ namespace MWMechanics
|
||||||
for (std::vector<std::string>::const_iterator iter (race->powers.list.begin());
|
for (std::vector<std::string>::const_iterator iter (race->powers.list.begin());
|
||||||
iter!=race->powers.list.end(); ++iter)
|
iter!=race->powers.list.end(); ++iter)
|
||||||
{
|
{
|
||||||
insertSpell (*iter, ptr);
|
creatureStats.mSpells.add (*iter, mEnvironment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ namespace MWMechanics
|
||||||
for (std::vector<std::string>::const_iterator iter (sign->powers.list.begin());
|
for (std::vector<std::string>::const_iterator iter (sign->powers.list.begin());
|
||||||
iter!=sign->powers.list.end(); ++iter)
|
iter!=sign->powers.list.end(); ++iter)
|
||||||
{
|
{
|
||||||
insertSpell (*iter, ptr);
|
creatureStats.mSpells.add (*iter, mEnvironment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,59 +159,14 @@ namespace MWMechanics
|
||||||
creatureStats.mDynamic[i].setCurrent (creatureStats.mDynamic[i].getModified());
|
creatureStats.mDynamic[i].setCurrent (creatureStats.mDynamic[i].getModified());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MechanicsManager::insertSpell (const std::string& id, MWWorld::Ptr& creature)
|
|
||||||
{
|
|
||||||
MWMechanics::CreatureStats& creatureStats =
|
|
||||||
MWWorld::Class::get (creature).getCreatureStats (creature);
|
|
||||||
|
|
||||||
const ESM::Spell *spell = mEnvironment.mWorld->getStore().spells.find (id);
|
|
||||||
|
|
||||||
switch (spell->data.type)
|
|
||||||
{
|
|
||||||
case ESM::Spell::ST_Ability:
|
|
||||||
|
|
||||||
if (creatureStats.mAbilities.find (id)==creatureStats.mAbilities.end())
|
|
||||||
{
|
|
||||||
creatureStats.mAbilities.insert (id);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
// TODO ST_SPELL, ST_Blight, ST_Disease, ST_Curse, ST_Power
|
|
||||||
|
|
||||||
default:
|
|
||||||
|
|
||||||
std::cout
|
|
||||||
<< "adding unsupported spell type (" << spell->data.type
|
|
||||||
<< ") to creature: " << id << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MechanicsManager::adjustMagicEffects (MWWorld::Ptr& creature)
|
void MechanicsManager::adjustMagicEffects (MWWorld::Ptr& creature)
|
||||||
{
|
{
|
||||||
MWMechanics::CreatureStats& creatureStats =
|
MWMechanics::CreatureStats& creatureStats =
|
||||||
MWWorld::Class::get (creature).getCreatureStats (creature);
|
MWWorld::Class::get (creature).getCreatureStats (creature);
|
||||||
|
|
||||||
MagicEffects now;
|
MagicEffects now = creatureStats.mSpells.getMagicEffects (mEnvironment);
|
||||||
|
|
||||||
for (std::set<std::string>::const_iterator iter (creatureStats.mAbilities.begin());
|
/// \todo add effects from active spells and equipment
|
||||||
iter!=creatureStats.mAbilities.end(); ++iter)
|
|
||||||
{
|
|
||||||
const ESM::Spell *spell = mEnvironment.mWorld->getStore().spells.find (*iter);
|
|
||||||
|
|
||||||
for (std::vector<ESM::ENAMstruct>::const_iterator iter = spell->effects.list.begin();
|
|
||||||
iter!=spell->effects.list.end(); ++iter)
|
|
||||||
{
|
|
||||||
if (iter->range==0) // self
|
|
||||||
{
|
|
||||||
EffectParam param;
|
|
||||||
param.mMagnitude = iter->magnMax; // TODO calculate magnitude
|
|
||||||
now.add (EffectKey (*iter), param);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO add effects from other spell types, active spells and equipment
|
|
||||||
|
|
||||||
MagicEffects diff = MagicEffects::diff (creatureStats.mMagicEffects, now);
|
MagicEffects diff = MagicEffects::diff (creatureStats.mMagicEffects, now);
|
||||||
|
|
||||||
|
|
|
@ -37,8 +37,6 @@ namespace MWMechanics
|
||||||
///< build player according to stored class/race/birthsign information. Will
|
///< build player according to stored class/race/birthsign information. Will
|
||||||
/// default to the values of the ESM::NPC object, if no explicit information is given.
|
/// default to the values of the ESM::NPC object, if no explicit information is given.
|
||||||
|
|
||||||
void insertSpell (const std::string& id, MWWorld::Ptr& creature);
|
|
||||||
|
|
||||||
void adjustMagicEffects (MWWorld::Ptr& creature);
|
void adjustMagicEffects (MWWorld::Ptr& creature);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in a new issue