/* ===================================================================== * ÆÄ ÀÏ : SkillExecuter.h , SkillExecuter.cpp * ¸ñ Àû : ½ºÅ³À» »ç¿ë¸ñÀû¿¡ ¸Â°Ô ½ÇÇàÇϵµ·Ï ÇÑ´Ù. * ÀÛ ¼º ÀÚ : Á¤¿øÁÖ * ÀÛ ¼º ÀÏ : 2007³â 3¿ù 26ÀÏ * * Ãß°¡³»¿ë : * Ãß°¡³¯Â¥ ÀÛ¾÷ÀÚ Ãß°¡³»¿ë * * ÁÖÀÇ»çÇ× : ۰¡ ´­·ÈÀ» °æ¿ì³ª ¸¶¿ì½º°¡ Ŭ¸¯, ´õºíŬ¸¯ µÇ¾úÀ» °æ¿ì¿¡¸¸ »ç¿ëµÈ´Ù. * ³×Å©¿öÅ© ¸Þ½ÃÁö ¶óµçÁö, ÈÄó¸® °°Àº ³»ºÎÀûÀÎ µ¿ÀÛ¿¡ °ü¿©ÇÏÁö ¾Ê´Â´Ù. * ½ºÅ³ÀÇ »ç¿ë¿¡ ´ëÇÑ °¢Á¾ Á¦ÇÑ Ã¼Å©, »óÅ üũ µîÀÌ ÀÌ·ç¾îÁø´Ù. * =======================================================================*/ #pragma once #include "BaseObject_Common.h" #include "skill_common.h" struct sTransMonSkillInfo { unsigned int mUsePer; float mRange; }; enum { eCharge_None = 0, eCharge_Target, eCharge_Field, }; struct sChargeInfo { unsigned char mChargeType; unsigned long mSkillIdx; char mSkillStep; float mSkillRange; }; class cSkillObject; class cAttackPattern { public: cAttackPattern() { ::memset( mPattern, -1, sizeof(int)*3*6 ); /// ÆÐÅÏ »ý¼º mPattern[0][0] = 0;mPattern[0][1] = 1;mPattern[0][2] = 2;mPattern[0][3] = 0;mPattern[0][4] = 2;mPattern[0][5] = 1; mPattern[1][0] = 1;mPattern[1][1] = 0;mPattern[1][2] = 2;mPattern[1][3] = 1;mPattern[1][4] = 2;mPattern[1][5] = 0; mPattern[2][0] = 2;mPattern[2][1] = 1;mPattern[2][2] = 0;mPattern[2][3] = 1;mPattern[1][4] = 0;mPattern[1][5] = 2; mPatternIdx = 0; mProgressIdx = 0; mOldAttackIdx = -1; } ~cAttackPattern() {} unsigned int GetAttackFlag(); void ResetPatternIdx() { mPatternIdx = -1; } protected: int mPattern[3][6]; /// ÆÐÅÏ ¹øÈ£ int mPatternIdx; int mOldAttackIdx; /// ÁøÇà ´Ü°è unsigned int mProgressIdx; }; class cSkillExecuter { public: static cSkillExecuter* mpExec; public: cSkillExecuter(); ~cSkillExecuter(); void Close(); bool AutoAttack( cBaseObject* pTarget ); /// ±âº» °ø°Ý ¹ßµ¿ bool ExecuteAttack( cBaseObject* pTarget ); /// ½ºÅ³ ¹ßµ¿ void ExecuteSkill( unsigned long skillIdx, unsigned char skillStep, cBaseObject* pTarget = 0 ); /// void ExecuteSkill( unsigned long skillIdx, unsigned char skillStep, NiPoint3 fieldPos ); void ResetAttackFlag() { mAttackPattern.ResetPatternIdx(); } /// ÀåÂø ÇØÁ¦ void ChargeOff( unsigned long skillIdx, unsigned char skillStep ); sChargeInfo GetChargeSkill(); sChargeInfo GetCurrentChargeSkill() { return mChargeSkill; } bool IsSkillCharge(); bool IsFieldSkillCharge() { return mChargeSkill.mChargeType == eCharge_Field; } bool IsPossibleUseSkill( unsigned long skillIdx, unsigned char skillStep ); bool IsPossibleUseSkillTarget( unsigned long skillIdx, cBaseObject* pTarget ); bool IsRushUseSkill( unsigned long skillIdx, unsigned char skillStep ); void ReCharge() { ChargeOn( NORMAL_ATTACK_SKILL, 0 ); } /// ÇöÀç »ç¿ëÁß ½ºÅ³ÀÇ »óŸ¦ »ç¿ëÇϱâ À§ÇÑ ÀÎÅÍÆäÀ̽º inline cSkillObject* GetCurrentHeroSkillObject() { return mpCurrentHeroSkillObject; } inline void SetCurrentHeroSkillObject( cSkillObject* p ) { mpCurrentHeroSkillObject = p; } void SetMonsterSkillInfo( unsigned long monsterClassIdx ); bool IsPossibleApplyValueType( unsigned long skillIdx, cBaseObject* pTarget ); protected: /// ½ºÅ³ ÀåÂø void ChargeOn( unsigned long skillIdx, unsigned char skillstep ); void FieldSkillOn( unsigned long skillIdx, unsigned char step ); /// unsigned long GenerateTransMonsAttackIdx(); void ChargeOn_TransMon( unsigned long skillIdx ); void ChargeOff_TransMon( unsigned long skillIdx ); bool IsPossibleUseSkill_TransMon( unsigned long skillIdx ); bool IsPossibleUseSkillTarget_TransMon( unsigned long skillIdx, cBaseObject* pTarget ); bool AutoAttack_TransMon( unsigned long skillIdx,cBaseObject* pTarget ); bool ExecuteAttack_TransMon( unsigned long skillIdx, cBaseObject* pTarget ); bool ExecuteSkill_TransMon( unsigned long skillIdx, cBaseObject* pTarget ); bool ExecuteSkill_TransMon( unsigned long skillIdx, NiPoint3 applyPos ); void FieldSkillOn_TransMon( unsigned long monsterClassIdx, unsigned long skillIdx ); void ExecuteAutoPos( unsigned long skillIdx, unsigned char step ); bool ExecuteAutoPos_TransMon( unsigned long skillIdx ); protected: /// ÇöÀç »ç¿ëÁß ½ºÅ³ °´Ã¼ cSkillObject* mpCurrentHeroSkillObject; /// ¹Ù´Ú ±âÁØ ¹üÀ§ ½ºÅ³ ¿µ¿ª ¼³Á¤ // bool mIsFieldCheck; // bool mIsCharge; // unsigned long mChargeSkillIdx; // float mSkillRange; sChargeInfo mChargeSkill; /// ÀÌÀü °ø°Ý´ë»ó°ú ÇöÀç Ÿ°Ù°£ÀÇ ºñ±³¸¦ À§ÇÑ º¯¼ö sObject mAttackTarget; /// ±âº» °ø°ÝÀÇ ÆÐÅÏ cAttackPattern mAttackPattern; sTransMonSkillInfo mMonsterAttackInfo[eMONSTERATTACK_MAX]; unsigned long mTotalMonsterAttackPer; }; #define SKILLEXECUTER cSkillExecuter::mpExec