⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 animation_action.cpp

📁 Cal3D实现虚拟角色 Cal3D实现虚拟角色
💻 CPP
字号:
//****************************************************************************//// animation_action.cpp                                                       //// Copyright (C) 2001, 2002 Bruno 'Beosil' Heidelberger                       ////****************************************************************************//// This library is free software; you can redistribute it and/or modify it    //// under the terms of the GNU Lesser General Public License as published by   //// the Free Software Foundation; either version 2.1 of the License, or (at    //// your option) any later version.                                            ////****************************************************************************//#ifdef HAVE_CONFIG_H#include "config.h"#endif//****************************************************************************//// Includes                                                                   ////****************************************************************************//#include "cal3d/animation_action.h"#include "cal3d/error.h"#include "cal3d/coreanimation.h" /*****************************************************************************//** Constructs the animation action instance.  *  * This function is the default constructor of the animation action instance.  *****************************************************************************/CalAnimationAction::CalAnimationAction(CalCoreAnimation* pCoreAnimation): CalAnimation(pCoreAnimation){  setType(TYPE_ACTION);} /*****************************************************************************//** Executes the animation action instance.  *  * This function executes the animation action instance.  *  * @param delayIn The time in seconds until the animation action instance  *                reaches the full weight from the beginning of its execution.  * @param delayOut The time in seconds in which the animation action instance  *                 reaches zero weight at the end of its execution.  * @param weightTarget No doxygen comment for this. FIXME.  * @param autoLock     This prevents the Action from being reset and removed  *                     on the last keyframe if true.  *  * @return One of the following values:  *         \li \b true if successful  *         \li \b false if an error happend  *****************************************************************************/bool CalAnimationAction::execute(float delayIn, float delayOut, float weightTarget,bool autoLock){  setState(STATE_IN);  setWeight(0.0f);  m_delayIn = delayIn;  m_delayOut = delayOut;  setTime(0.0f);  m_weightTarget = weightTarget;  m_autoLock = autoLock;  return true;} /*****************************************************************************//** Updates the animation action instance.  *  * This function updates the animation action instance for a given amount of  * time.  *  * @param deltaTime The elapsed time in seconds since the last update.  *  * @return One of the following values:  *         \li \b true if the animation action instance is still active  *         \li \b false if the execution of the animation action instance has  *             ended  *****************************************************************************/bool CalAnimationAction::update(float deltaTime){  // update animation action time  if(getState() != STATE_STOPPED)  {    setTime(getTime() + deltaTime * getTimeFactor());  }  // handle IN phase  if(getState() == STATE_IN)  {    // check if we are still in the IN phase    if(getTime() < m_delayIn)    {      setWeight(getTime() / m_delayIn * m_weightTarget);      //m_weight = m_time / m_delayIn;    }    else    {      setState(STATE_STEADY);      setWeight(m_weightTarget);    }  }  // handle STEADY  if(getState() == STATE_STEADY)  {    // check if we reached OUT phase    if(!m_autoLock && getTime() >= getCoreAnimation()->getDuration() - m_delayOut)    {      setState(STATE_OUT);    }    // if the anim is supposed to stay locked on last keyframe, reset the time here.    else if (m_autoLock && getTime() > getCoreAnimation()->getDuration())    {      setState(STATE_STOPPED);      setTime(getCoreAnimation()->getDuration());    }        }  // handle OUT phase  if(getState() == STATE_OUT)  {    // check if we are still in the OUT phase    if(getTime() < getCoreAnimation()->getDuration())    {      setWeight((getCoreAnimation()->getDuration() - getTime()) / m_delayOut * m_weightTarget);    }    else    {      // we reached the end of the action animation      setWeight(0.0f);      return false;    }  }  return true;}//****************************************************************************//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -