#ifndef _SKMoveControler_h_ #define _SKMoveControler_h_ #include "K3DTypes.h" #include class SGameAvatarEx; class SGameSystem; class SGameCamera; class SCommandSystem; class SGameWorld; struct ArcadiaClient; struct SGameMessage; #define MOVE_NONE 0 #define MOVE_UP 1 #define MOVE_DOWN 2 #define MOVE_LEFT 4 #define MOVE_RIGHT 8 #define UPDATE_TIME_RATE 0.8f // ONE_STEP_KMOVE_LENGTH를 이동했을 때, 걸리는 시간의 비율, 주기적으로 보내는 시간 #define LAST_MOVE_LEN_RATE 0.3f // 마지막 이동 패킷을 보낼 때, 이동 거리 #define ONE_STEP_KMOVE_LENGTH 24.0f // 한번 클릭으로 갈 수 있는 최소 거리, 적당한 거리를 임의로 정했다. #define MIN_CHANGED_CAM_DEGREE 30.0f // 디버깅을 쉽게 하기 위해서 우선 degree값을 넣는다. class SKMoveControler { public: SKMoveControler(); ~SKMoveControler(); void initialize (SCommandSystem* commandSystem, SGameSystem* gameSystem, SGameCamera* gameCamera, SGameWorld* gameWorld, ArcadiaClient* arObject); void start_move (K3DVector* curr_pos, float curr_dir, int key_status , K3DVector* ptarget_pos, AR_TIME elapsed ,int send_server); bool get_move_pos (K3DVector* curr_pos, float* curr_dir, K3DVector* ptargetPos, AR_TIME* pelapsed,float rate); void send_move (K3DVector* ptarget_pos,float move_dir,int key_status, bool send_server ); void stop_move (bool send_last_move); float get_key_move_dir (int key_status); void send_last_move (void); bool m_automove; float m_sent_key_status; float m_sent_move_dir; K3DVector m_sent_pos; int m_sent_time; AR_TIME m_arTime; sUpdateTime m_moveUpdate; void process (int gameRef); void procMoveMsg (SGameMessage* msg); void procMouseMsg (SGameMessage* msg); void procMsgResult (SGameMessage* msg); private: SCommandSystem* m_commandSystem; SGameSystem* m_gameSystem; SGameCamera* m_gameCamera; SGameWorld* m_gameWorld; ArcadiaClient* m_arObject; }; #endif