mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-10-31 18:56:43 +00:00 
			
		
		
		
	Use fMagicStartIconBlink for spell effect indicator fading
This commit is contained in:
		
							parent
							
								
									877e07823d
								
							
						
					
					
						commit
						0081a68376
					
				
					 5 changed files with 21 additions and 10 deletions
				
			
		|  | @ -24,7 +24,7 @@ namespace MWGui | |||
| 
 | ||||
|     void EffectSourceVisitor::visit (MWMechanics::EffectKey key, | ||||
|                                            const std::string& sourceName, int casterActorId, | ||||
|                                      float magnitude, float remainingTime) | ||||
|                                      float magnitude, float remainingTime, float totalTime) | ||||
|     { | ||||
|         MagicEffectInfo newEffectSource; | ||||
|         newEffectSource.mKey = key; | ||||
|  | @ -32,6 +32,7 @@ namespace MWGui | |||
|         newEffectSource.mPermanent = mIsPermanent; | ||||
|         newEffectSource.mRemainingTime = remainingTime; | ||||
|         newEffectSource.mSource = sourceName; | ||||
|         newEffectSource.mTotalTime = totalTime; | ||||
| 
 | ||||
|         mEffectSources[key.mId].push_back(newEffectSource); | ||||
|     } | ||||
|  | @ -67,10 +68,11 @@ namespace MWGui | |||
|                 MWBase::Environment::get().getWorld ()->getStore ().get<ESM::MagicEffect>().find(it->first); | ||||
| 
 | ||||
|             float remainingDuration = 0; | ||||
|             float totalDuration = 0; | ||||
| 
 | ||||
|             std::string sourcesDescription; | ||||
| 
 | ||||
|             const float fadeTime = 5.f; | ||||
|             static const float fadeTime = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fMagicStartIconBlink")->getFloat(); | ||||
| 
 | ||||
|             for (std::vector<MagicEffectInfo>::const_iterator effectIt = it->second.begin(); | ||||
|                  effectIt != it->second.end(); ++effectIt) | ||||
|  | @ -80,9 +82,15 @@ namespace MWGui | |||
| 
 | ||||
|                 // if at least one of the effect sources is permanent, the effect will never wear off
 | ||||
|                 if (effectIt->mPermanent) | ||||
|                 { | ||||
|                     remainingDuration = fadeTime; | ||||
|                     totalDuration = fadeTime; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     remainingDuration = std::max(remainingDuration, effectIt->mRemainingTime); | ||||
|                     totalDuration = std::max(totalDuration, effectIt->mTotalTime); | ||||
|                 } | ||||
| 
 | ||||
|                 sourcesDescription +=  effectIt->mSource; | ||||
| 
 | ||||
|  | @ -158,8 +166,9 @@ namespace MWGui | |||
|                 ToolTipInfo* tooltipInfo = image->getUserData<ToolTipInfo>(); | ||||
|                 tooltipInfo->text = sourcesDescription; | ||||
| 
 | ||||
|                 // Fade out during the last 5 seconds
 | ||||
|                 image->setAlpha(std::min(remainingDuration/fadeTime, 1.f)); | ||||
|                 // Fade out
 | ||||
|                 if (totalDuration >= fadeTime && fadeTime > 0.f) | ||||
|                     image->setAlpha(std::min(remainingDuration/fadeTime, 1.f)); | ||||
|             } | ||||
|             else if (mWidgetMap.find(it->first) != mWidgetMap.end()) | ||||
|             { | ||||
|  |  | |||
|  | @ -26,12 +26,14 @@ namespace MWGui | |||
|         MagicEffectInfo() | ||||
|             : mPermanent(false) | ||||
|             , mMagnitude(0) | ||||
|         , mRemainingTime(0) | ||||
|             , mRemainingTime(0.f) | ||||
|             , mTotalTime(0.f) | ||||
|         {} | ||||
|         std::string mSource; // display name for effect source (e.g. potion name)
 | ||||
|         MWMechanics::EffectKey mKey; | ||||
|         int mMagnitude; | ||||
|         float mRemainingTime; | ||||
|         float mTotalTime; | ||||
|         bool mPermanent; // the effect is permanent
 | ||||
|     }; | ||||
| 
 | ||||
|  | @ -46,7 +48,7 @@ namespace MWGui | |||
| 
 | ||||
|         virtual void visit (MWMechanics::EffectKey key, | ||||
|                                  const std::string& sourceName, int casterActorId, | ||||
|                             float magnitude, float remainingTime = -1); | ||||
|                             float magnitude, float remainingTime = -1, float totalTime = -1); | ||||
|     }; | ||||
| 
 | ||||
|     class SpellIcons | ||||
|  |  | |||
|  | @ -195,7 +195,7 @@ namespace MWMechanics | |||
|                 float magnitude = effectIt->mMagnitude; | ||||
| 
 | ||||
|                 if (magnitude) | ||||
|                     visitor.visit(MWMechanics::EffectKey(effectIt->mEffectId, effectIt->mArg), name, it->second.mCasterActorId, magnitude, remainingTime); | ||||
|                     visitor.visit(MWMechanics::EffectKey(effectIt->mEffectId, effectIt->mArg), name, it->second.mCasterActorId, magnitude, remainingTime, effectIt->mDuration); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -102,7 +102,7 @@ public: | |||
| 
 | ||||
|     virtual void visit (MWMechanics::EffectKey key, | ||||
|                              const std::string& sourceName, int casterActorId, | ||||
|                         float magnitude, float remainingTime = -1) | ||||
|                         float magnitude, float remainingTime = -1, float totalTime = -1) | ||||
|     { | ||||
|         MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayerPtr(); | ||||
|         if (    ((key.mId == ESM::MagicEffect::CommandHumanoid && mActor.getClass().isNpc()) | ||||
|  | @ -200,7 +200,7 @@ namespace MWMechanics | |||
| 
 | ||||
|         virtual void visit (MWMechanics::EffectKey key, | ||||
|                                  const std::string& sourceName, int casterActorId, | ||||
|                             float magnitude, float remainingTime = -1) | ||||
|                             float magnitude, float remainingTime = -1, float totalTime = -1) | ||||
|         { | ||||
|             if (key.mId != ESM::MagicEffect::Soultrap) | ||||
|                 return; | ||||
|  |  | |||
|  | @ -74,7 +74,7 @@ namespace MWMechanics | |||
|     { | ||||
|         virtual void visit (MWMechanics::EffectKey key, | ||||
|                                  const std::string& sourceName, int casterActorId, | ||||
|                             float magnitude, float remainingTime = -1) = 0; | ||||
|                             float magnitude, float remainingTime = -1, float totalTime = -1) = 0; | ||||
|     }; | ||||
| 
 | ||||
|     /// \brief Effects currently affecting a NPC or creature
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue