#include <map>
#include <vector>
+#include <Moof/Manager.hh>
#include <Moof/Log.hh>
-#include <Moof/Mippleton.hh>
#include <Moof/Script.hh>
#include "Animation.hh"
class Animation::Impl
{
- friend class Animation;
+public:
/**
* Contains "global" animation data for the various animations which get
* which wants to use these loaded sequences.
*/
- class Data : public Mf::Mippleton<Data>
+ class Data : public Mf::Manager<Data>
{
- friend class Impl;
- friend class Mf::Mippleton<Data>;
+ public:
/**
* A frame of an animation sequence. A frame is merely an index which
class Frame
{
- friend class Impl;
+ public:
unsigned mIndex; ///< Frame index.
Mf::Scalar mDuration; ///< Frame duration.
* frame map which is probably loaded within an animation file.
*/
- Frame(Mf::Script& script, Mf::Script::Value table) :
+ Frame(Mf::Script& script, Mf::Script::Slot table) :
mIndex(0),
mDuration(1.0)
{
* that they should be played.
*/
- struct Sequence
+ class Sequence
{
- friend class Impl;
+ public:
std::vector<Frame> mFrames; ///< List of frames.
Mf::Scalar mDelay; ///< Scale frame durations.
* constructor which loads each individual frame.
*/
- Sequence(Mf::Script& script, Mf::Script::Value table) :
+ Sequence(Mf::Script& script, Mf::Script::Slot table) :
mDelay(0.0),
mLoop(true)
{
// TODO - sequence class/type not yet implemented
table.pushField("frames");
- Mf::Script::Value frameTable = script.getTop();
+ Mf::Script::Slot frameTable = script.getTop();
if (frameTable.isTable())
{
- Mf::Script::Value top = script[-1];
+ Mf::Script::Slot top = script[-1];
int index = 1;
for (;;)
* individual sequence.
*/
- void loadFromFile()
+ void init(const std::string& name)
{
Mf::Script script;
- std::string filePath = Animation::getPath(getName());
+ std::string filePath = Animation::getPath(name);
- script.importStandardLibraries();
- importLogScript(script);
+ script.importBaseLibrary();
+ importLogFunctions(script);
importAnimationBindings(script);
if (script.doFile(filePath) != Mf::Script::SUCCESS)
{
std::string str;
script[-1].get(str);
- Mf::logScript("%s", str.c_str());
+ Mf::logWarning(str);
}
}
int defineSequence(Mf::Script& script)
{
- Mf::Script::Value name = script[1].requireString();
- Mf::Script::Value table = script[2].requireTable();
+ Mf::Script::Slot name = script[1].requireString();
+ Mf::Script::Slot table = script[2].requireTable();
std::string nameStr;
name.get(nameStr);
- sequences.insert(std::pair<std::string,Sequence>(nameStr,
+ mSequences.insert(std::pair<std::string,Sequence>(nameStr,
Sequence(script, table)));
return 0;
}
- /**
- * Construction is initialization. The animation class data container
- * registers itself as a mippleton and then loads the animation data.
- */
-
- explicit Data(const std::string& name) :
- Mf::Mippleton<Data>(name)
- {
- loadFromFile();
- }
-
- std::map<std::string,Sequence> sequences; ///< List of sequences.
+ std::map<std::string,Sequence> mSequences; ///< List of sequences.
};
{
std::map<std::string,Data::Sequence>::iterator it;
- it = mData->sequences.find(name);
+ it = mData->mSequences.find(name);
- if (it != mData->sequences.end())
+ if (it != mData->mSequences.end())
{
mCurrentSequence = &(*it).second;
mFrameCounter = 0;