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

📄 animation.cpp

📁 Cal3D实现虚拟角色 Cal3D实现虚拟角色
💻 CPP
字号:
//****************************************************************************//// animation.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#include "cal3d/animation.h"#include "cal3d/error.h"#include "cal3d/coreanimation.h"#include "cal3d/animcallback.h"#include "cal3d/model.h"CalAnimation::CalAnimation(CalCoreAnimation* pCoreAnimation)  : m_pCoreAnimation(pCoreAnimation)  , m_type(TYPE_NONE)  , m_state(STATE_NONE)  , m_time(0.0f)  , m_timeFactor(1.0f)  , m_weight(0.0f){  assert(pCoreAnimation);  std::vector<CalCoreAnimation::CallbackRecord>& list = m_pCoreAnimation->getCallbackList();  for (size_t i=0; i<list.size(); i++)    m_lastCallbackTimes.push_back(0.0F);  // build up the last called list} /*****************************************************************************//** Provides access to the core animation.  *  * This function returns the core animation on which this animation instance  * is based on.  *  * @return One of the following values:  *         \li a pointer to the core animation  *         \li \b 0 if an error happend  *****************************************************************************/CalCoreAnimation *CalAnimation::getCoreAnimation(){  return m_pCoreAnimation;} /*****************************************************************************//** Returns the state.  *  * This function returns the state of the animation instance.  *  * @return One of the following states:  *         \li \b STATE_NONE  *         \li \b STATE_SYNC  *         \li \b STATE_ASYNC  *         \li \b STATE_IN  *         \li \b STATE_STEADY  *         \li \b STATE_OUT  *****************************************************************************/CalAnimation::State CalAnimation::getState(){  return m_state;} /*****************************************************************************//** Returns the time.  *  * This function returns the time of the animation instance.  *  * @return The time in seconds.  *****************************************************************************/float CalAnimation::getTime(){  return m_time;} /*****************************************************************************//** Returns the type.  *  * This function returns the type of the animation instance.  *  * @return One of the following types:  *         \li \b TYPE_NONE  *         \li \b TYPE_CYCLE  *         \li \b TYPE_POSE  *         \li \b TYPE_ACTION  *****************************************************************************/CalAnimation::Type CalAnimation::getType(){  return m_type;} /*****************************************************************************//** Returns the weight.  *  * This function returns the weight of the animation instance.  *  * @return The weight.  *****************************************************************************/float CalAnimation::getWeight(){  return m_weight;} /*****************************************************************************//** Set the time.  *  * This function set the time of the animation instance.  *  *****************************************************************************/void CalAnimation::setTime(float time){    m_time = time;}/*****************************************************************************//** Set the time factor.  *   * This function sets the time factor of the animation instance.  * this time factor affect only sync animation  *  *****************************************************************************/void CalAnimation::setTimeFactor(float timeFactor){    m_timeFactor = timeFactor;}/*****************************************************************************//** Get the time factor.  *   * This function return the time factor of the animation instance.  *  *****************************************************************************/float CalAnimation::getTimeFactor(){    return m_timeFactor;}void CalAnimation::checkCallbacks(float animationTime,CalModel *model){  std::vector<CalCoreAnimation::CallbackRecord>& list = m_pCoreAnimation->getCallbackList();  for (size_t i=0; i<list.size(); i++)  {	if (m_lastCallbackTimes.size() <= i)                // need these two lines to allow dynamic adding of callbacks. 		m_lastCallbackTimes.push_back(animationTime);    list[i].callback->AnimationUpdate(animationTime, model, model->getUserData());    if (animationTime > 0 && animationTime < m_lastCallbackTimes[i])  // looped        m_lastCallbackTimes[i] -= m_pCoreAnimation->getDuration();    else if (animationTime < 0 && animationTime > m_lastCallbackTimes[i])     // reverse-looped          m_lastCallbackTimes[i] += m_pCoreAnimation->getDuration();      if ((animationTime >= 0 && animationTime >= m_lastCallbackTimes[i] + list[i].min_interval) ||        (animationTime <  0 && animationTime <= m_lastCallbackTimes[i] - list[i].min_interval))    {      list[i].callback->AnimationUpdate(animationTime,model, model->getUserData());      m_lastCallbackTimes[i] = animationTime;    }  }}void CalAnimation::completeCallbacks(CalModel *model){  std::vector<CalCoreAnimation::CallbackRecord>& list = m_pCoreAnimation->getCallbackList();  for (size_t i=0; i<list.size(); i++)    list[i].callback->AnimationComplete(model, model->getUserData());}//****************************************************************************//

⌨️ 快捷键说明

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