1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/*!
@file
@author Albert Semenov
@date 08/2009
*/
#ifndef GRAPH_NODE_LOOP_CONTROLLER_H_
#define GRAPH_NODE_LOOP_CONTROLLER_H_
#include <MyGUI.h>
#include "BaseAnimationNode.h"
#include "IAnimationGraph.h"
namespace demo
{
class GraphNodeLoopController :
public BaseAnimationNode
{
public:
GraphNodeLoopController(const std::string& _name) :
BaseAnimationNode("GraphNodeLoopController.layout", "LoopController", _name),
mStartIn(nullptr),
mStopIn(nullptr),
mWeightIn(nullptr),
mStartOut(nullptr),
mStopOut(nullptr),
mWeightOut(nullptr),
mPositionOut(nullptr),
mLength(1)
{
}
virtual void addConnection(const std::string& _eventout, BaseAnimationNode* _node, const std::string& _eventin)
{
BaseAnimationNode::addConnection(_eventout, _node, _eventin);
if (_eventout == "Position")
{
mStateName = _node->getAnimationNode()->getName();
updateStateLenght();
}
}
virtual void removeConnection(const std::string& _eventout, BaseAnimationNode* _node, const std::string& _eventin)
{
BaseAnimationNode::removeConnection(_eventout, _node, _eventin);
if (_eventout == "Position")
{
mStateName.clear();
updateStateLenght();
}
}
virtual void invalidateNode(BaseAnimationNode* _sender)
{
BaseAnimationNode::invalidateNode(_sender);
if (_sender->getAnimationNode()->getName() == mStateName)
{
updateStateLenght();
}
}
private:
void updateStateLenght()
{
mLength = 1;
animation::IAnimationNode* node = getAnimationNode()->getGraph()->getNodeByName(mStateName);
if (node)
{
mLength = node->getLength();
//if (mLength > 0.0001) mLength -= 0.0001;
}
else
{
mStateName.clear();
}
getAnimationNode()->setProperty("Length", MyGUI::utility::toString(mLength));
}
virtual void initialise()
{
mMainWidget->castType<MyGUI::Window>()->setCaption(getName());
assignBase(mStartIn, "StartIn");
assignBase(mStopIn, "StopIn");
assignBase(mWeightIn, "WeightIn");
assignBase(mStartOut, "StartOut");
assignBase(mStopOut, "StopOut");
assignBase(mWeightOut, "WeightOut");
assignBase(mPositionOut, "PositionOut");
}
virtual void shutdown()
{
}
private:
wraps::BaseGraphConnection* mStartIn;
wraps::BaseGraphConnection* mStopIn;
wraps::BaseGraphConnection* mWeightIn;
wraps::BaseGraphConnection* mStartOut;
wraps::BaseGraphConnection* mStopOut;
wraps::BaseGraphConnection* mWeightOut;
wraps::BaseGraphConnection* mPositionOut;
float mLength;
std::string mStateName;
};
} // namespace demo
#endif // GRAPH_NODE_LOOP_CONTROLLER_H_
|