mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-26 09:35:28 +00:00
Move getEnchantmentColor() from Animation to Class
This commit is contained in:
parent
06ba80e19b
commit
4c92f0c4e1
@ -238,7 +238,7 @@ void ActorAnimation::updateHolsteredWeapon(bool showHolsteredWeapons)
|
||||
{
|
||||
if (showHolsteredWeapons)
|
||||
{
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*weapon);
|
||||
osg::Vec4f glowColor = weapon->getClass().getEnchantmentColor(*weapon);
|
||||
mScabbard = getWeaponPart(mesh, boneName, isEnchanted, &glowColor);
|
||||
if (mScabbard)
|
||||
resetControllers(mScabbard->getNode());
|
||||
@ -271,7 +271,7 @@ void ActorAnimation::updateHolsteredWeapon(bool showHolsteredWeapons)
|
||||
|
||||
if (isEnchanted)
|
||||
{
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*weapon);
|
||||
osg::Vec4f glowColor = weapon->getClass().getEnchantmentColor(*weapon);
|
||||
addGlow(weaponNode, glowColor);
|
||||
}
|
||||
}
|
||||
@ -347,7 +347,7 @@ void ActorAnimation::updateQuiver()
|
||||
}
|
||||
|
||||
// Add new ones
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*ammo);
|
||||
osg::Vec4f glowColor = ammo->getClass().getEnchantmentColor(*ammo);
|
||||
std::string model = ammo->getClass().getModel(*ammo);
|
||||
for (unsigned int i=0; i<ammoCount; ++i)
|
||||
{
|
||||
|
@ -1658,31 +1658,6 @@ namespace MWRender
|
||||
mResourceSystem->getSceneManager()->recreateShaders(node);
|
||||
}
|
||||
|
||||
// TODO: Should not be here
|
||||
osg::Vec4f Animation::getEnchantmentColor(const MWWorld::ConstPtr& item) const
|
||||
{
|
||||
osg::Vec4f result(1,1,1,1);
|
||||
std::string enchantmentName = item.getClass().getEnchantment(item);
|
||||
if (enchantmentName.empty())
|
||||
return result;
|
||||
|
||||
const ESM::Enchantment* enchantment = MWBase::Environment::get().getWorld()->getStore().get<ESM::Enchantment>().search(enchantmentName);
|
||||
if (!enchantment)
|
||||
return result;
|
||||
|
||||
assert (enchantment->mEffects.mList.size());
|
||||
|
||||
const ESM::MagicEffect* magicEffect = MWBase::Environment::get().getWorld()->getStore().get<ESM::MagicEffect>().search(
|
||||
enchantment->mEffects.mList.front().mEffectID);
|
||||
if (!magicEffect)
|
||||
return result;
|
||||
|
||||
result.x() = magicEffect->mData.mRed / 255.f;
|
||||
result.y() = magicEffect->mData.mGreen / 255.f;
|
||||
result.z() = magicEffect->mData.mBlue / 255.f;
|
||||
return result;
|
||||
}
|
||||
|
||||
void Animation::addExtraLight(osg::ref_ptr<osg::Group> parent, const ESM::Light *esmLight)
|
||||
{
|
||||
bool exterior = mPtr.isInCell() && mPtr.getCell()->getCell()->isExterior();
|
||||
@ -2001,7 +1976,7 @@ namespace MWRender
|
||||
addAnimSource(model, model);
|
||||
|
||||
if (!ptr.getClass().getEnchantment(ptr).empty())
|
||||
addGlow(mObjectRoot, getEnchantmentColor(ptr));
|
||||
addGlow(mObjectRoot, ptr.getClass().getEnchantmentColor(ptr));
|
||||
}
|
||||
if (ptr.getTypeName() == typeid(ESM::Light).name() && allowLight)
|
||||
addExtraLight(getOrCreateObjectRoot(), ptr.get<ESM::Light>()->mBase);
|
||||
|
@ -330,8 +330,6 @@ protected:
|
||||
*/
|
||||
virtual void addControllers();
|
||||
|
||||
osg::Vec4f getEnchantmentColor(const MWWorld::ConstPtr& item) const;
|
||||
|
||||
void addGlow(osg::ref_ptr<osg::Node> node, osg::Vec4f glowColor, float glowDuration = -1);
|
||||
|
||||
/// Set the render bin for this animation's object root. May be customized by subclasses.
|
||||
|
@ -132,7 +132,7 @@ void CreatureWeaponAnimation::updatePart(PartHolderPtr& scene, int slot)
|
||||
scene.reset(new PartHolder(attached));
|
||||
|
||||
if (!item.getClass().getEnchantment(item).empty())
|
||||
addGlow(attached, getEnchantmentColor(item));
|
||||
addGlow(attached, item.getClass().getEnchantmentColor(item));
|
||||
|
||||
// Crossbows start out with a bolt attached
|
||||
// FIXME: code duplicated from NpcAnimation
|
||||
|
@ -572,7 +572,7 @@ void NpcAnimation::updateParts()
|
||||
|
||||
int prio = 1;
|
||||
bool enchantedGlow = !store->getClass().getEnchantment(*store).empty();
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*store);
|
||||
osg::Vec4f glowColor = store->getClass().getEnchantmentColor(*store);
|
||||
if(store->getTypeName() == typeid(ESM::Clothing).name())
|
||||
{
|
||||
prio = ((slotlist[i].mBasePriority+1)<<1) + 0;
|
||||
@ -897,7 +897,7 @@ void NpcAnimation::showWeapons(bool showWeapon)
|
||||
MWWorld::ConstContainerStoreIterator weapon = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
if(weapon != inv.end())
|
||||
{
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*weapon);
|
||||
osg::Vec4f glowColor = weapon->getClass().getEnchantmentColor(*weapon);
|
||||
std::string mesh = weapon->getClass().getModel(*weapon);
|
||||
addOrReplaceIndividualPart(ESM::PRT_Weapon, MWWorld::InventoryStore::Slot_CarriedRight, 1,
|
||||
mesh, !weapon->getClass().getEnchantment(*weapon).empty(), &glowColor);
|
||||
@ -931,7 +931,7 @@ void NpcAnimation::showCarriedLeft(bool show)
|
||||
MWWorld::ConstContainerStoreIterator iter = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
if(show && iter != inv.end())
|
||||
{
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*iter);
|
||||
osg::Vec4f glowColor = iter->getClass().getEnchantmentColor(*iter);
|
||||
std::string mesh = iter->getClass().getModel(*iter);
|
||||
if (addOrReplaceIndividualPart(ESM::PRT_Shield, MWWorld::InventoryStore::Slot_CarriedLeft, 1,
|
||||
mesh, !iter->getClass().getEnchantment(*iter).empty(), &glowColor))
|
||||
|
@ -507,4 +507,28 @@ namespace MWWorld
|
||||
{
|
||||
throw std::runtime_error("class does not support armor ratings");
|
||||
}
|
||||
|
||||
osg::Vec4f Class::getEnchantmentColor(const MWWorld::ConstPtr& item) const
|
||||
{
|
||||
osg::Vec4f result(1,1,1,1);
|
||||
std::string enchantmentName = item.getClass().getEnchantment(item);
|
||||
if (enchantmentName.empty())
|
||||
return result;
|
||||
|
||||
const ESM::Enchantment* enchantment = MWBase::Environment::get().getWorld()->getStore().get<ESM::Enchantment>().search(enchantmentName);
|
||||
if (!enchantment)
|
||||
return result;
|
||||
|
||||
assert (enchantment->mEffects.mList.size());
|
||||
|
||||
const ESM::MagicEffect* magicEffect = MWBase::Environment::get().getWorld()->getStore().get<ESM::MagicEffect>().search(
|
||||
enchantment->mEffects.mList.front().mEffectID);
|
||||
if (!magicEffect)
|
||||
return result;
|
||||
|
||||
result.x() = magicEffect->mData.mRed / 255.f;
|
||||
result.y() = magicEffect->mData.mGreen / 255.f;
|
||||
result.z() = magicEffect->mData.mBlue / 255.f;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,8 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <osg/Vec4f>
|
||||
|
||||
#include "ptr.hpp"
|
||||
|
||||
namespace ESM
|
||||
@ -367,6 +369,8 @@ namespace MWWorld
|
||||
|
||||
/// Get the effective armor rating, factoring in the actor's skills, for the given armor.
|
||||
virtual float getEffectiveArmorRating(const MWWorld::ConstPtr& armor, const MWWorld::Ptr& actor) const;
|
||||
|
||||
virtual osg::Vec4f getEnchantmentColor(const MWWorld::ConstPtr& item) const;
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user