00001 #ifndef OBJECTCONTROLLER_H 00002 #define OBJECTCONTROLLER_H 00003 00004 #include "lugre_smartptr.h" 00005 00006 #include <OgreVector3.h> 00007 #include <OgreQuaternion.h> 00008 using Ogre::Vector3; 00009 using Ogre::Quaternion; 00010 using namespace Lugre; 00011 00012 class lua_State; 00013 class cObject; 00014 00015 class cObjectContollerTarget { public: 00016 // only call if alive 00017 virtual Vector3 GetPosition() = 0; 00018 virtual Vector3 GetVelocity() = 0; 00019 00020 virtual bool IsAlive() = 0; 00021 00022 virtual ~cObjectContollerTarget(); 00023 }; 00024 00025 class cObjectContollerTargetObject : public cObjectContollerTarget { public: 00026 cSmartPtr<cObject> mpApproachObject; 00027 00028 // only call if alive 00029 virtual Vector3 GetPosition(); 00030 virtual Vector3 GetVelocity(); 00031 00032 virtual bool IsAlive(); 00033 00034 cObjectContollerTargetObject(cObject* pObject); 00035 virtual ~cObjectContollerTargetObject(); 00036 }; 00037 00038 class cObjectContollerTargetPosition : public cObjectContollerTarget { public: 00039 Vector3 mvPosition; 00040 00041 // only call if alive 00042 virtual Vector3 GetPosition(); 00043 virtual Vector3 GetVelocity(); 00044 00045 virtual bool IsAlive(); 00046 00047 cObjectContollerTargetPosition(Vector3 vPosition); 00048 virtual ~cObjectContollerTargetPosition(); 00049 }; 00050 00052 class cObjectController : public cSmartPointable { public : 00053 cObjectContollerTarget* mpApproachTarget; 00054 float mfApproachMinDist; 00055 float mfMaxAccel; 00056 float mfMaxSpeed; 00057 bool mbStupid; 00058 00059 cObjectController (); 00060 virtual ~cObjectController (); 00061 00062 // the controller takes over the ownership of the target pointer 00063 // never touch the pointer again!! 00064 void SetTarget (cObjectContollerTarget *pTarget); 00065 00066 void Lock (); 00067 void Release (); 00068 void Step (cObject* pObj); 00069 00070 // lua binding 00071 static void LuaRegister (lua_State *L); 00072 00073 private: 00074 int miControlledObjectCount; 00075 }; 00076 00077 #endif
1.5.6