00001
00002 #ifndef INCLUDED_WalkNode_h_
00003 #define INCLUDED_WalkNode_h_
00004
00005 #include "Behaviors/StateNode.h"
00006 #include "Motion/MotionManager.h"
00007 #include "Motion/WalkMC.h"
00008 #include "Motion/MMAccessor.h"
00009
00010
00011 class WalkNode : public StateNode {
00012 public:
00013
00014 WalkNode(StateNode * p=NULL)
00015 : StateNode("WalkNode",p), walkid(MotionManager::invalid_MC_ID), walkidIsMine(true), x(0), y(0), a(0)
00016 {
00017 setRetain(false);
00018 }
00019
00020
00021 WalkNode(float xvel, float yvel, float avel, StateNode * p=NULL)
00022 : StateNode("WalkNode",p), walkid(MotionManager::invalid_MC_ID), walkidIsMine(true), x(xvel), y(yvel), a(avel)
00023 {
00024 setRetain(false);
00025 }
00026
00027
00028 void setVelocity(float xvel, float yvel, float avel) {
00029 x=xvel;
00030 y=yvel;
00031 a=avel;
00032 updateWalk(x,y,a);
00033 }
00034
00035
00036 void setXVelocity(float xvel) { x=xvel; updateWalk(x,y,a); }
00037
00038
00039 float getXVelocity() { return x; }
00040
00041
00042 void setYVelocity(float yvel) { y=yvel; updateWalk(x,y,a); }
00043
00044
00045 float getYVelocity() { return y; }
00046
00047
00048 void setAVelocity(float avel) { a=avel; updateWalk(x,y,a); }
00049
00050
00051 float getAVelocity() { return a; }
00052
00053 virtual void DoStart() {
00054 StateNode::DoStart();
00055 std::cout << "WalkNode::DoStart(); " << x << ' ' << y << ' ' << a << std::endl;
00056 updateWalk(x,y,a);
00057 }
00058
00059 virtual void DoStop() {
00060 std::cout << "WalkNode::DoStop(); " << x << ' ' << y << ' ' << a << std::endl;
00061 updateWalk(0,0,0);
00062 StateNode::DoStop();
00063 }
00064
00065
00066 virtual void teardown() {
00067 if(walkidIsMine) {
00068 motman->removeMotion(walkid);
00069 walkid=MotionManager::invalid_MC_ID;
00070 }
00071 }
00072
00073
00074 virtual void setWalkID(MotionManager::MC_ID id) {
00075 if(walkidIsMine) {
00076 motman->removeMotion(walkid);
00077 walkid=MotionManager::invalid_MC_ID;
00078 }
00079 walkid=id;
00080 walkidIsMine=(id==MotionManager::invalid_MC_ID);
00081 }
00082
00083
00084 virtual MotionManager::MC_ID getWalkID() { return walkid; }
00085
00086
00087 virtual bool ownsWalkID() { return walkidIsMine; }
00088
00089 protected:
00090
00091 void updateWalk(float xvel, float yvel, float avel) {
00092 if(walkid==MotionManager::invalid_MC_ID) {
00093 SharedObject<WalkMC> walk;
00094 walk->setTargetVelocity(xvel,yvel,avel);
00095 walkid=motman->addMotion(walk);
00096 walkidIsMine=true;
00097 } else {
00098 MMAccessor<WalkMC> walk(walkid);
00099 walk->setTargetVelocity(xvel,yvel,avel);
00100 }
00101 }
00102
00103 MotionManager::MC_ID walkid;
00104 bool walkidIsMine;
00105 float x;
00106 float y;
00107 float a;
00108 };
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 #endif