//****************************************************************************//
// coreanimation.h                                                            //
// 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.                                            //
//****************************************************************************//

#ifndef CAL_COREANIMATION_H
#define CAL_COREANIMATION_H


#include "cal3d/global.h"


class CalCoreTrack;
struct CalAnimationCallback;

class CAL3D_API CalCoreAnimation
{
public:
  CalCoreAnimation();
  ~CalCoreAnimation();

  void addCoreTrack(CalCoreTrack *pCoreTrack);
  CalCoreTrack *getCoreTrack(int coreBoneId);
  float getDuration();
  std::list<CalCoreTrack *>& getListCoreTrack();
  void setDuration(float duration);
  void scale(float factor);
  void setFilename(const std::string& filename);
  const std::string& getFilename(void);
  void setName(const std::string& name);
  const std::string& getName(void);
  void incRef();
  bool decRef();  

  void registerCallback(CalAnimationCallback *callback,float min_interval);
  void removeCallback(CalAnimationCallback *callback);

  struct CallbackRecord
  {
    CalAnimationCallback *callback;
    float                 min_interval;
  };

  std::vector<CallbackRecord>& getCallbackList() { return m_listCallbacks; }

private:


  std::vector<CallbackRecord> m_listCallbacks;

  float m_duration;
  std::list<CalCoreTrack *>   m_listCoreTrack;
  std::string m_name;
  std::string m_filename;

  int m_referenceCount;
};

#endif

//****************************************************************************//
