| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- #ifndef ENTITY_H
- #define ENTITY_H
- #include <OgreString.h>
- #include "EntityCollision.h"
- #include "EntityDirection.h"
- #include "ScriptManager.h"
- enum ActionType
- {
- AT_NONE,
- AT_LINEAR,
- AT_SMOOTH
- };
- enum TurnDirection
- {
- TD_CLOCKWISE,
- TD_ANTICLOCKWISE,
- TD_CLOSEST
- };
- enum LinearMovement
- {
- LM_UP_TO_DOWN,
- LM_DOWN_TO_UP,
- LM_LEFT_TO_RIGHT,
- LM_RIGHT_TO_LEFT
- };
- class Entity
- {
- public:
- enum AnimationState
- {
- REQUESTED_ANIMATION,
- AUTO_ANIMATION
- };
- enum AnimationPlayType
- {
- PLAY_DEFAULT,
- PLAY_ONCE,
- PLAY_LOOPED
- };
- enum State
- {
- NONE,
- WALKMESH,
- LINEAR,
- JUMP
- };
- Entity( const Ogre::String& name, Ogre::SceneNode* node );
- virtual ~Entity();
- virtual void Update();
- virtual void UpdateDebug();
- const Ogre::String& GetName() const;
- void SetPosition( const Ogre::Vector3& position );
- void ScriptSetPosition( const float x, const float y, const float z );
- const Ogre::Vector3 GetPosition() const;
- void ScriptGetPosition() const;
- void SetOffset( const Ogre::Vector3& position );
- const Ogre::Vector3 GetOffset() const;
- void SetRotation( const Ogre::Degree& rotation );
- void ScriptSetRotation( const float rotation );
- Ogre::Degree GetRotation() const;
- float ScriptGetRotation() const;
- virtual void setScale( const Ogre::Vector3 &scale );
- virtual void setRootOrientation( const Ogre::Quaternion &root_orientation );
- // height related
- float GetHeight() const;
- // solid related
- void SetSolidRadius( const float radius );
- float GetSolidRadius() const;
- void SetSolid( const bool solid );
- bool IsSolid() const;
- // talk related
- void SetTalkRadius( const float radius );
- float GetTalkRadius() const;
- void SetTalkable( const bool talkable );
- bool IsTalkable() const;
- // model related
- virtual void SetVisible( const bool visible ) = 0;
- virtual bool IsVisible() const = 0;
- // different type of movement state related
- void SetState( const State state );
- State GetState() const;
- // movement related
- void SetMoveAutoSpeed( const float speed );
- float GetMoveAutoSpeed() const;
- void SetMoveWalkSpeed( const float speed );
- float GetMoveWalkSpeed() const;
- void SetMoveRunSpeed( const float speed );
- float GetMoveRunSpeed() const;
- void SetMovePosition( const Ogre::Vector3& target );
- const Ogre::Vector3& GetMovePosition() const;
- float GetMoveStopDistance() const;
- void SetMoveTriangleId( const int triangle );
- int GetMoveTriangleId() const;
- void SetMoveAutoRotation( const bool rotate );
- bool GetMoveAutoRotation() const;
- void SetMoveAutoAnimation( const bool animate );
- bool GetMoveAutoAnimation() const;
- const Ogre::String& GetMoveAnimationWalkName() const;
- const Ogre::String& GetMoveAnimationRunName() const;
- void ScriptMoveToPosition( const float x, const float y );
- void ScriptMoveToEntity( Entity* entity );
- int ScriptMoveSync();
- void UnsetMove();
- // linear related
- void ScriptLinearToPosition( const float x, const float y, const float z, const LinearMovement movement, const char* animation );
- int ScriptLinearSync();
- void SetLinear( const Ogre::Vector3& end, const LinearMovement movement, const Ogre::String& animation );
- void UnsetLinear();
- LinearMovement GetLinearMovement() const;
- const Ogre::Vector3& GetLinearStart() const;
- const Ogre::Vector3& GetLinearEnd() const;
- // jump related
- void ScriptJumpToPosition( const float x, const float y, const float z,const float seconds );
- int ScriptJumpSync();
- void SetJump( const Ogre::Vector3& jump_to, const float seconds );
- void UnsetJump();
- const Ogre::Vector3& GetJumpStart() const;
- const Ogre::Vector3& GetJumpEnd() const;
- float GetJumpSeconds() const;
- void SetJumpCurrentSeconds( const float seconds );
- float GetJumpCurrentSeconds() const;
- // offset related
- void ScriptOffsetToPosition( const float x, const float y, const float z, const ActionType type, const float seconds );
- int ScriptOffsetSync();
- void UnsetOffset();
- const Ogre::Vector3& GetOffsetPositionStart() const;
- const Ogre::Vector3& GetOffsetPositionEnd() const;
- ActionType GetOffsetType() const;
- float GetOffsetSeconds() const;
- void SetOffsetCurrentSeconds( const float seconds );
- float GetOffsetCurrentSeconds() const;
- // turn related
- void ScriptTurnToDirection( const float direction, const TurnDirection turn_direction, const ActionType turn_type, const float seconds );
- void ScriptTurnToEntity( Entity* entity, const TurnDirection turn_direction, const float seconds );
- int ScriptTurnSync();
- void SetTurn( const Ogre::Degree& direction_to, Entity* entity, const TurnDirection turn_direction, const ActionType turn_type, const float seconds );
- void UnsetTurn();
- Ogre::Degree CalculateTurnAngle( const Ogre::Degree& start, const Ogre::Degree& end ) const;
- Ogre::Degree GetTurnDirectionStart() const;
- Ogre::Degree GetTurnDirectionEnd() const;
- ActionType GetTurnType() const;
- float GetTurnSeconds() const;
- void SetTurnCurrentSeconds( const float seconds );
- float GetTurnCurrentSeconds() const;
- // animation related
- void ScriptSetAnimationSpeed( const float speed );
- const Ogre::String& GetDefaultAnimationName() const;
- const Ogre::String& GetCurrentAnimationName() const;
- AnimationState GetAnimationState() const;
- virtual void PlayAnimation( const Ogre::String& animation, AnimationState state, AnimationPlayType play_type, const float start, const float end ) = 0;
- virtual void PlayAnimationContinue( const Ogre::String& animation ) = 0;
- virtual void UpdateAnimation( const float delta ) = 0;
- void ScriptPlayAnimation( const char* name );
- void ScriptPlayAnimationStop( const char* name );
- void ScriptPlayAnimation( const char* name, const float start, const float end );
- void ScriptPlayAnimationStop( const char* name, const float start, const float end );
- void ScriptSetDefaultAnimation( const char* animation );
- int ScriptAnimationSync();
- private:
- Entity();
- Ogre::Degree GetDirectionToEntity( Entity* entity ) const;
- protected:
- Ogre::String m_Name;
- Ogre::SceneNode* m_SceneNode;
- Ogre::SceneNode* m_ModelNode;
- Ogre::SceneNode* m_model_root_node;
- // height related
- float m_Height;
- Ogre::SceneNode* m_DirectionNode;
- EntityDirection* m_Direction;
- // collision related
- Ogre::SceneNode* m_SolidCollisionNode;
- EntityCollision* m_SolidCollision;
- float m_SolidRadius;
- bool m_Solid;
- // talk related
- Ogre::SceneNode* m_TalkCollisionNode;
- EntityCollision* m_TalkCollision;
- float m_TalkRadius;
- bool m_Talkable;
- // move state related
- State m_State;
- std::vector< ScriptId > m_Sync;
- // move related
- float m_MoveAutoSpeed;
- float m_MoveWalkSpeed;
- float m_MoveRunSpeed;
- Ogre::Vector3 m_MovePosition;
- Entity* m_MoveEntity;
- float m_MoveStopDistance;
- int m_MoveTriangleId;
- bool m_MoveAutoRotation;
- bool m_MoveAutoAnimation;
- Ogre::String m_MoveAnimationWalk;
- Ogre::String m_MoveAnimationRun;
- // linear movement related
- LinearMovement m_LinearMovement;
- Ogre::Vector3 m_LinearStart;
- Ogre::Vector3 m_LinearEnd;
- // jump related
- Ogre::Vector3 m_JumpStart;
- Ogre::Vector3 m_JumpEnd;
- float m_JumpSeconds;
- float m_JumpCurrentSeconds;
- // offset related
- Ogre::Vector3 m_OffsetPositionStart;
- Ogre::Vector3 m_OffsetPositionEnd;
- ActionType m_OffsetType;
- float m_OffsetSeconds;
- float m_OffsetCurrentSeconds;
- std::vector< ScriptId > m_OffsetSync;
- // turn related
- TurnDirection m_TurnDirection;
- Ogre::Degree m_TurnDirectionStart;
- Ogre::Degree m_TurnDirectionEnd;
- Entity* m_TurnEntity;
- ActionType m_TurnType;
- float m_TurnSeconds;
- float m_TurnCurrentSeconds;
- std::vector< ScriptId > m_TurnSync;
- // animation
- float m_AnimationSpeed;
- Ogre::String m_AnimationCurrentName;
- std::vector< ScriptId > m_AnimationSync;
- AnimationState m_AnimationState;
- AnimationPlayType m_AnimationPlayType;
- Ogre::String m_AnimationDefault;
- float m_AnimationEndTime;
- bool m_AnimationAutoPlay;
- };
- #endif // ENTITY_H
|