#pragma once struct sRiderInfo; class ObjectAniEventController; enum RiderParts { RP_BASE, //Å»°Í±âº»¸ðÇü RP_BODY, //°©¿Ê RP_BOOTS, //ºÎÃ÷ RP_HELM, //Åõ±¸ RP_COUNT, }; class Rider : public ObjectAniEventController { public: Rider( void ); virtual ~Rider( void ); //¶óÀÌ´õ »ý¼º virtual BOOL Create(DWORD dwRiderIndex, Player* master_ptr, BOOL summon_effect); //¸®¼Ò½ºÇØÁ¦ virtual void Destroy( void ); //------------------------------------------------------------------------------ //! Qualifier: ¾Ö´Ï¸ÞÀ̼Ǽ³Á¤ //! Parameter: WzID wzID : ¾Ö´Ï¸ÞÀÌ¼Ç ÄÚµå //! Parameter: BOOL bLoop : loop ¿©ºÎ //! Parameter: BOOL bRestart : bLoop == TRUE ÀÌ¸é ¹«Á¶°Ç bRestart = FALSE·Î ¼ÂÆÃµÊ //------------------------------------------------------------------------------ void SetAnimation(WzID wzID, BOOL bLoop = FALSE, BOOL bRestart = TRUE); //¾Ö´Ï¸ÞÀ̼ǰè»ê virtual void AnimateUnit(Player* master_ptr); //¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·¹ÀÓ°è»ê virtual BOOL Process(DWORD dwTick, Player* master_ptr); //·£´õ:Display¿ë virtual BOOL Render( St_RenderCommand *pCommand); //·£´õ virtual BOOL Render(); //¶óÀÌ´õº¹»ç(ÁÖÀΰøÅ»°Í¿ë) void CopyRider(Rider *pRider, bool is_with_parts = true); //¶óÀÌ´õº¹»ç(½½·Ô¿¡¼­Å»°Í¿ë) void CopyRiderBody(DWORD dwRiderIndex, Player* master_ptr); //º¯È¯(À§Ä¡,ȸÀü) void Transform(CWzUnitDraw* pMaster); //º£À̽ºÆÄÃ÷(¶óÀÌ´õ¸öÅë) CWzUnitDraw* GetRenderPart(){return m_ppRenderPart[RP_BASE];} //¶óÀÌ´õÆÄÃ÷(¶óÀÌ´õÆÄÃ÷) inline CWzUnitDraw* GetRenderPart(int iIndex); //À§Ä¡.ȸÀü.Å©±â void SetScale(WzVector vScale); void SetPosition(WzVector *pPos) { if(GetRenderPart()) GetRenderPart()->SetPosition(*pPos);} void SetRotation(const WzVector* normal_axis, float master_angle); void SetForceLod(int iLod); //ÆÄÃ÷ ÀåÂø.Å»Âø.¼­ºêŸÀÔ(¿Î½Ì) void AttachRiderPart(int nIdx, DWORD dwItemCode); //------------------------------------------------------------------------------ //! Returns: void //! Qualifier: z-base °ª¿Ê ºÎÅÍ //! Parameter: int nIdx //! 0 = °©¿Ê //! 1 = ºÎÃ÷ //! 2 = Åõ±¸ //------------------------------------------------------------------------------ void DetachRiderPart(int nIdx); void DetachPart(const RiderParts& rider_parts); void SetSubtype(int nPartIdx,int nSubType); void SetColor(WzColor color){m_Color=color;} void EnableFunction(BOOL bFlag); char GetAniMapping(){return m_Animaping;} DWORD GetRiderIndex(){return m_dwRiderIndex;} WzVector* GetLinkPos(){return &m_vLinkPos;} bool RefreshApperRider(Player* master_ptr); //! Å»°ÍÀÌ ³¯±â »ýÅÂÀÎÁö bool is_spread() { return is_spread_; } void set_spread(bool val) { is_spread_ = val; } bool is_possible_fly(); WzID current_animation() const { return current_animation_; } void set_current_animation(WzID val) { current_animation_ = val; } private: // ¼ÒȯÀÌÆåÆ® À¯¹« DWORD effect_code() const { return effect_code_; } void set_effect_code(DWORD val) { effect_code_ = val; } // º¸°£»óÅ bool is_interpoate() const { return is_interpoate_; } void set_is_interpoate(bool val) { is_interpoate_ = val; } // º¸°£Ãà WzVector& interpolate_axis(){ return interpolate_axis_; } void set_interpolate_axis(const WzVector& val) { interpolate_axis_ = val; } // ÀÌÀü ³ë¸»Ãà WzVector& prev_axis(){ return prev_axis_; } void set_prev_axis(const WzVector& val) { prev_axis_ = val; } // ÀÌÀü °¢µµ float prev_angle() const { return prev_angle_; } void set_prev_angle(float val) { prev_angle_ = val; } // ȸÀüÇà·Ä WzMatrix& rotate_matrix(){ return rotate_matrix_; } //¶óÀÌ´õ ¸ÊÇÎÁ¤º¸ char m_Animaping; //¶óÀÌ´õÀ妽º DWORD m_dwRiderIndex; //¸µÅ©º»³ëµå¹øÈ£ int m_iLinkNode; //Ä÷¯ WzColor m_Color; //¶óÀÌ´õÆÄÃ÷Á¤º¸ CWzUnitDraw* m_ppRenderPart[RP_COUNT]; //¸µÅ©À§Ä¡ WzVector m_vLinkPos; //ÁöÇü¿¡ ºÙÀ̱âÀ§ÇÑ Á¤º¸ //»ý¼º½ÃüũÇÔ¼ö BOOL m_bSetInterpolate; //ÇöÀç ¾Ö´Ï¸ÞÀÌ¼Ç ¾ÆÀ̵ð WzID current_animation_; //¸ÞÀÎÆÄÃ÷ ¸®¼Ò½ºÄÚµå DWORD body_skin_; //»ý¼º½Ã ÀÌÆåÆ®ÄÚµå DWORD effect_code_; //ȸÀü.Ãຸ°£(ȸÀü) float prev_angle_; WzMatrix rotate_matrix_; bool is_interpoate_; WzVector prev_axis_; WzVector interpolate_axis_; //! Å»°ÍÀÌ ³¯°³¸¦ Æñ´ÂÁö. bool is_spread_; }; //¶óÀÌ´õÆÄÃ÷°ª¸¸ CWzUnitDraw* Rider::GetRenderPart(int iIndex) { if(iIndex==RP_BASE) { return NULL; } if(iIndex>=RP_COUNT) { return NULL; } else { return m_ppRenderPart[iIndex]; } }