Entity.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #ifndef ENTITY_H
  2. #define ENTITY_H
  3. #include <OgreString.h>
  4. #include "EntityCollision.h"
  5. #include "EntityDirection.h"
  6. #include "ScriptManager.h"
  7. enum ActionType
  8. {
  9. AT_NONE,
  10. AT_LINEAR,
  11. AT_SMOOTH
  12. };
  13. enum TurnDirection
  14. {
  15. TD_CLOCKWISE,
  16. TD_ANTICLOCKWISE,
  17. TD_CLOSEST
  18. };
  19. enum LinearMovement
  20. {
  21. LM_UP_TO_DOWN,
  22. LM_DOWN_TO_UP,
  23. LM_LEFT_TO_RIGHT,
  24. LM_RIGHT_TO_LEFT
  25. };
  26. class Entity
  27. {
  28. public:
  29. enum AnimationState
  30. {
  31. REQUESTED_ANIMATION,
  32. AUTO_ANIMATION
  33. };
  34. enum AnimationPlayType
  35. {
  36. PLAY_DEFAULT,
  37. PLAY_ONCE,
  38. PLAY_LOOPED
  39. };
  40. enum State
  41. {
  42. NONE,
  43. WALKMESH,
  44. LINEAR,
  45. JUMP
  46. };
  47. Entity( const Ogre::String& name, Ogre::SceneNode* node );
  48. virtual ~Entity();
  49. virtual void Update();
  50. virtual void UpdateDebug();
  51. const Ogre::String& GetName() const;
  52. void SetPosition( const Ogre::Vector3& position );
  53. void ScriptSetPosition( const float x, const float y, const float z );
  54. const Ogre::Vector3 GetPosition() const;
  55. void ScriptGetPosition() const;
  56. void SetOffset( const Ogre::Vector3& position );
  57. const Ogre::Vector3 GetOffset() const;
  58. void SetRotation( const Ogre::Degree& rotation );
  59. void ScriptSetRotation( const float rotation );
  60. Ogre::Degree GetRotation() const;
  61. float ScriptGetRotation() const;
  62. virtual void setScale( const Ogre::Vector3 &scale );
  63. virtual void setRootOrientation( const Ogre::Quaternion &root_orientation );
  64. // height related
  65. float GetHeight() const;
  66. // solid related
  67. void SetSolidRadius( const float radius );
  68. float GetSolidRadius() const;
  69. void SetSolid( const bool solid );
  70. bool IsSolid() const;
  71. // talk related
  72. void SetTalkRadius( const float radius );
  73. float GetTalkRadius() const;
  74. void SetTalkable( const bool talkable );
  75. bool IsTalkable() const;
  76. // model related
  77. virtual void SetVisible( const bool visible ) = 0;
  78. virtual bool IsVisible() const = 0;
  79. // different type of movement state related
  80. void SetState( const State state );
  81. State GetState() const;
  82. // movement related
  83. void SetMoveAutoSpeed( const float speed );
  84. float GetMoveAutoSpeed() const;
  85. void SetMoveWalkSpeed( const float speed );
  86. float GetMoveWalkSpeed() const;
  87. void SetMoveRunSpeed( const float speed );
  88. float GetMoveRunSpeed() const;
  89. void SetMovePosition( const Ogre::Vector3& target );
  90. const Ogre::Vector3& GetMovePosition() const;
  91. float GetMoveStopDistance() const;
  92. void SetMoveTriangleId( const int triangle );
  93. int GetMoveTriangleId() const;
  94. void SetMoveAutoRotation( const bool rotate );
  95. bool GetMoveAutoRotation() const;
  96. void SetMoveAutoAnimation( const bool animate );
  97. bool GetMoveAutoAnimation() const;
  98. const Ogre::String& GetMoveAnimationWalkName() const;
  99. const Ogre::String& GetMoveAnimationRunName() const;
  100. void ScriptMoveToPosition( const float x, const float y );
  101. void ScriptMoveToEntity( Entity* entity );
  102. int ScriptMoveSync();
  103. void UnsetMove();
  104. // linear related
  105. void ScriptLinearToPosition( const float x, const float y, const float z, const LinearMovement movement, const char* animation );
  106. int ScriptLinearSync();
  107. void SetLinear( const Ogre::Vector3& end, const LinearMovement movement, const Ogre::String& animation );
  108. void UnsetLinear();
  109. LinearMovement GetLinearMovement() const;
  110. const Ogre::Vector3& GetLinearStart() const;
  111. const Ogre::Vector3& GetLinearEnd() const;
  112. // jump related
  113. void ScriptJumpToPosition( const float x, const float y, const float z,const float seconds );
  114. int ScriptJumpSync();
  115. void SetJump( const Ogre::Vector3& jump_to, const float seconds );
  116. void UnsetJump();
  117. const Ogre::Vector3& GetJumpStart() const;
  118. const Ogre::Vector3& GetJumpEnd() const;
  119. float GetJumpSeconds() const;
  120. void SetJumpCurrentSeconds( const float seconds );
  121. float GetJumpCurrentSeconds() const;
  122. // offset related
  123. void ScriptOffsetToPosition( const float x, const float y, const float z, const ActionType type, const float seconds );
  124. int ScriptOffsetSync();
  125. void UnsetOffset();
  126. const Ogre::Vector3& GetOffsetPositionStart() const;
  127. const Ogre::Vector3& GetOffsetPositionEnd() const;
  128. ActionType GetOffsetType() const;
  129. float GetOffsetSeconds() const;
  130. void SetOffsetCurrentSeconds( const float seconds );
  131. float GetOffsetCurrentSeconds() const;
  132. // turn related
  133. void ScriptTurnToDirection( const float direction, const TurnDirection turn_direction, const ActionType turn_type, const float seconds );
  134. void ScriptTurnToEntity( Entity* entity, const TurnDirection turn_direction, const float seconds );
  135. int ScriptTurnSync();
  136. void SetTurn( const Ogre::Degree& direction_to, Entity* entity, const TurnDirection turn_direction, const ActionType turn_type, const float seconds );
  137. void UnsetTurn();
  138. Ogre::Degree CalculateTurnAngle( const Ogre::Degree& start, const Ogre::Degree& end ) const;
  139. Ogre::Degree GetTurnDirectionStart() const;
  140. Ogre::Degree GetTurnDirectionEnd() const;
  141. ActionType GetTurnType() const;
  142. float GetTurnSeconds() const;
  143. void SetTurnCurrentSeconds( const float seconds );
  144. float GetTurnCurrentSeconds() const;
  145. // animation related
  146. void ScriptSetAnimationSpeed( const float speed );
  147. const Ogre::String& GetDefaultAnimationName() const;
  148. const Ogre::String& GetCurrentAnimationName() const;
  149. AnimationState GetAnimationState() const;
  150. virtual void PlayAnimation( const Ogre::String& animation, AnimationState state, AnimationPlayType play_type, const float start, const float end ) = 0;
  151. virtual void PlayAnimationContinue( const Ogre::String& animation ) = 0;
  152. virtual void UpdateAnimation( const float delta ) = 0;
  153. void ScriptPlayAnimation( const char* name );
  154. void ScriptPlayAnimationStop( const char* name );
  155. void ScriptPlayAnimation( const char* name, const float start, const float end );
  156. void ScriptPlayAnimationStop( const char* name, const float start, const float end );
  157. void ScriptSetDefaultAnimation( const char* animation );
  158. int ScriptAnimationSync();
  159. private:
  160. Entity();
  161. Ogre::Degree GetDirectionToEntity( Entity* entity ) const;
  162. protected:
  163. Ogre::String m_Name;
  164. Ogre::SceneNode* m_SceneNode;
  165. Ogre::SceneNode* m_ModelNode;
  166. Ogre::SceneNode* m_model_root_node;
  167. // height related
  168. float m_Height;
  169. Ogre::SceneNode* m_DirectionNode;
  170. EntityDirection* m_Direction;
  171. // collision related
  172. Ogre::SceneNode* m_SolidCollisionNode;
  173. EntityCollision* m_SolidCollision;
  174. float m_SolidRadius;
  175. bool m_Solid;
  176. // talk related
  177. Ogre::SceneNode* m_TalkCollisionNode;
  178. EntityCollision* m_TalkCollision;
  179. float m_TalkRadius;
  180. bool m_Talkable;
  181. // move state related
  182. State m_State;
  183. std::vector< ScriptId > m_Sync;
  184. // move related
  185. float m_MoveAutoSpeed;
  186. float m_MoveWalkSpeed;
  187. float m_MoveRunSpeed;
  188. Ogre::Vector3 m_MovePosition;
  189. Entity* m_MoveEntity;
  190. float m_MoveStopDistance;
  191. int m_MoveTriangleId;
  192. bool m_MoveAutoRotation;
  193. bool m_MoveAutoAnimation;
  194. Ogre::String m_MoveAnimationWalk;
  195. Ogre::String m_MoveAnimationRun;
  196. // linear movement related
  197. LinearMovement m_LinearMovement;
  198. Ogre::Vector3 m_LinearStart;
  199. Ogre::Vector3 m_LinearEnd;
  200. // jump related
  201. Ogre::Vector3 m_JumpStart;
  202. Ogre::Vector3 m_JumpEnd;
  203. float m_JumpSeconds;
  204. float m_JumpCurrentSeconds;
  205. // offset related
  206. Ogre::Vector3 m_OffsetPositionStart;
  207. Ogre::Vector3 m_OffsetPositionEnd;
  208. ActionType m_OffsetType;
  209. float m_OffsetSeconds;
  210. float m_OffsetCurrentSeconds;
  211. std::vector< ScriptId > m_OffsetSync;
  212. // turn related
  213. TurnDirection m_TurnDirection;
  214. Ogre::Degree m_TurnDirectionStart;
  215. Ogre::Degree m_TurnDirectionEnd;
  216. Entity* m_TurnEntity;
  217. ActionType m_TurnType;
  218. float m_TurnSeconds;
  219. float m_TurnCurrentSeconds;
  220. std::vector< ScriptId > m_TurnSync;
  221. // animation
  222. float m_AnimationSpeed;
  223. Ogre::String m_AnimationCurrentName;
  224. std::vector< ScriptId > m_AnimationSync;
  225. AnimationState m_AnimationState;
  226. AnimationPlayType m_AnimationPlayType;
  227. Ogre::String m_AnimationDefault;
  228. float m_AnimationEndTime;
  229. bool m_AnimationAutoPlay;
  230. };
  231. #endif // ENTITY_H