本文整理汇总了C++中ogre::AnimationState::setWeight方法的典型用法代码示例。如果您正苦于以下问题:C++ AnimationState::setWeight方法的具体用法?C++ AnimationState::setWeight怎么用?C++ AnimationState::setWeight使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ogre::AnimationState
的用法示例。
在下文中一共展示了AnimationState::setWeight方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setAnimationMask
void GfxBody::setAnimationMask (const std::string &name, float v)
{
if (dead) THROW_DEAD(className);
Ogre::AnimationState *state = getAnimState(name);
state->setWeight(v);
state->setEnabled(v > 0.0f);
}
示例2: updateAnimation
/**更新动画*/
void Enemy::updateAnimation(float time)
{
m_AniFade-=time;
m_AniFade=std::max(m_AniFade,0.0f);
if (m_pEntity)
{
Ogre::AnimationStateSet* animStateSet = m_pEntity->getAllAnimationStates();
// 更新自身动画
if (animStateSet)
{
Ogre::ConstEnabledAnimationStateIterator animStateItor = animStateSet->getEnabledAnimationStateIterator();
while (animStateItor.hasMoreElements())
{
Ogre::AnimationState* animState = animStateItor.getNext();
animState->addTime(time);
// 当前动画逐渐递增权重
if (animState== m_pAniSate)
{
if (animState->getWeight() < 1.0f)
{
animState->setWeight(1.0f - m_AniFade);
}
}
// 其余动画逐渐递减权重,直到关闭动画
else
{
if (Ogre::Math::RealEqual(animState->getWeight(), 0.0f))
{
animState->setWeight(1.0f);
animState->setEnabled(false);
}
else
{
animState->setWeight(m_AniFade);
}
}
}
}
}
}
示例3: setAnimation
bool CAnimatedEntity::setAnimation(const std::string &anim, bool loop, int rewind, float fadeTime)
{
if(!_entity->getAllAnimationStates()->hasAnimationState(anim))
return false;
//comprobamos si la animación ya estaba ejecutandose
auto runningAnim = _runningAnimations.find(anim);
if(runningAnim != _runningAnimations.end()) {
if(runningAnim->second.state == FADE_OUT) {
runningAnim->second.state = FADE_IN;
//comprobamos que la animación no estaba justo para
//ser sacada
if(!_deletedAnims.empty()) {
auto delAnim = _deletedAnims.begin();
auto delEnd = _deletedAnims.end();
for(; delAnim!=delEnd; delAnim++) {
if ((*delAnim) == runningAnim->second.animation->getAnimationName()) {
_deletedAnims.erase(delAnim);
runningAnim->second.animation->setEnabled(true);
break;
}
}
}
}
runningAnim->second.direction = rewind;
return true;
}
//cogemos la animacion y la preparamos para ejecutarla
Ogre::AnimationState* animstate = _entity->getAnimationState(anim);
animstate->setEnabled(true);
animstate->setLoop(loop);
animstate->setWeight(0);
//seteamos la animación nueva para que haga fade-in, teniendo
//en cuenta el tiempo de fade que se le ha pasado
Animation animation;
animation.animation = animstate;
animation.state = FADE_IN;
animation.fadeTime = fadeTime;
animation.direction = rewind;
//metemos la animacion en la lista de animaciones ejecutandose
TAnim newAnim (anim,animation);
_runningAnimations.insert(newAnim);
return true;
} // setAnimation
示例4: AnimState
CharacterAnimation::CharacterAnimation(Ogre::Entity* ent)
{
Ogre::AnimationStateSet * anims = ent->getAllAnimationStates();
Ogre::AnimationStateIterator it = anims->getAnimationStateIterator();
while(it.hasMoreElements())
{
Ogre::AnimationState * as = it.getNext();
as->setWeight(0);
Animations.insert(std::make_pair(as->getAnimationName(), AnimState(as, 0, 5, 5, 1)));
}
ent->getSkeleton()->setBlendMode(Ogre::ANIMBLEND_CUMULATIVE);
}
示例5: Update
void EC_OgreAnimationController::Update(f64 frametime)
{
Ogre::Entity* entity = GetEntity();
if (!entity) return;
std::vector<std::string> erase_list;
// Loop through all animations & update them as necessary
for (AnimationMap::iterator i = animations_.begin(); i != animations_.end(); ++i)
{
Ogre::AnimationState* animstate = GetAnimationState(entity, i->first);
if (!animstate)
continue;
switch(i->second.phase_)
{
case PHASE_FADEIN:
// If period is infinitely fast, skip to full weight & PLAY status
if (i->second.fade_period_ == 0.0f)
{
i->second.weight_ = 1.0f;
i->second.phase_ = PHASE_PLAY;
}
else
{
i->second.weight_ += (1.0f / i->second.fade_period_) * frametime;
if (i->second.weight_ >= 1.0f)
{
i->second.weight_ = 1.0f;
i->second.phase_ = PHASE_PLAY;
}
}
break;
case PHASE_PLAY:
if (i->second.auto_stop_ || i->second.num_repeats_ != 1)
{
if ((i->second.speed_factor_ >= 0.f && animstate->getTimePosition() >= animstate->getLength()) ||
(i->second.speed_factor_ < 0.f && animstate->getTimePosition() <= 0.f))
{
if (i->second.num_repeats_ != 1)
{
if (i->second.num_repeats_ > 1)
i->second.num_repeats_--;
Ogre::Real rewindpos = i->second.speed_factor_ >= 0.f ? (animstate->getTimePosition() - animstate->getLength()) : animstate->getLength();
animstate->setTimePosition(rewindpos);
}
else
{
i->second.phase_ = PHASE_FADEOUT;
}
}
}
break;
case PHASE_FADEOUT:
// If period is infinitely fast, skip to disabled status immediately
if (i->second.fade_period_ == 0.0f)
{
i->second.weight_ = 0.0f;
i->second.phase_ = PHASE_STOP;
}
else
{
i->second.weight_ -= (1.0f / i->second.fade_period_) * frametime;
if (i->second.weight_ <= 0.0f)
{
i->second.weight_ = 0.0f;
i->second.phase_ = PHASE_STOP;
}
}
break;
}
// Set weight & step the animation forward
if (i->second.phase_ != PHASE_STOP)
{
Ogre::Real advance = i->second.speed_factor_ * frametime;
Ogre::Real new_weight = i->second.weight_ * i->second.weight_factor_;
if (new_weight != animstate->getWeight())
animstate->setWeight((Ogre::Real)i->second.weight_ * i->second.weight_factor_);
if (advance != 0.0f)
animstate->addTime((Ogre::Real)(i->second.speed_factor_ * frametime));
if (!animstate->getEnabled())
animstate->setEnabled(true);
}
else
{
// If stopped, disable & remove this animation from list
animstate->setEnabled(false);
erase_list.push_back(i->first);
}
}
for (uint i = 0; i < erase_list.size(); ++i)
{
animations_.erase(erase_list[i]);
}
//.........这里部分代码省略.........