bool CActorInstance::InputComboAttackCommand(float fDirRot) { m_fAtkDirRot=fDirRot; if (m_isPreInput) return false; ///////////////////////////////////////////////////////////////////////////////// // Process Input if (0 == m_dwcurComboIndex) { __RunNextCombo(); return true; } else if (m_pkCurRaceMotionData->IsComboInputTimeData()) { // 동작 경과 시간 float fElapsedTime = GetAttackingElapsedTime(); // 이미 입력 한계 시간이 지났다면.. if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputEndTime()) { //Tracen("입력 한계 시간 지남"); if (IsBowMode()) m_isNextPreInput = TRUE; return false; } if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) // 콤보 발동 시간 이 후라면 { //Tracen("다음 콤보 동작"); // args : BlendingTime __RunNextCombo(); return true; } else if (fElapsedTime > m_pkCurRaceMotionData->GetComboInputStartTime()) // 선 입력 시간 범위 라면.. { //Tracen("선 입력 설정"); m_isPreInput = TRUE; return false; } } else { float fElapsedTime = GetAttackingElapsedTime(); if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) // 콤보 발동 시간 이 후라면 { //Tracen("다음 콤보 동작"); // args : BlendingTime __RunNextCombo(); return true; } } // Process Input return false; }
bool CActorInstance::__CanInputNormalAttackCommand() { if (IsWaiting()) return true; if (isNormalAttacking()) { float fElapsedTime = GetAttackingElapsedTime(); if (fElapsedTime > m_pkCurRaceMotionData->GetMotionDuration()*0.9f) return true; } return false; }
void CActorInstance::__MotionEventProcess(BOOL isPC) { if (isAttacking()) { DWORD dwNextFrame = DWORD(GetAttackingElapsedTime() * g_fGameFPS); for (; m_kCurMotNode.dwcurFrame < dwNextFrame; ++m_kCurMotNode.dwcurFrame) { MotionEventProcess(); SoundEventProcess(!isPC); } } else { MotionEventProcess(); SoundEventProcess(!isPC); ++m_kCurMotNode.dwcurFrame; } }
BOOL CActorInstance::isValidAttacking() { if (!m_pkCurRaceMotionData) return FALSE; if (!m_pkCurRaceMotionData->isAttackingMotion()) return FALSE; const NRaceData::TMotionAttackData * c_pData = m_pkCurRaceMotionData->GetMotionAttackDataPointer(); float fElapsedTime = GetAttackingElapsedTime(); NRaceData::THitDataContainer::const_iterator itor = c_pData->HitDataContainer.begin(); for (; itor != c_pData->HitDataContainer.end(); ++itor) { const NRaceData::THitData & c_rHitData = *itor; if (fElapsedTime > c_rHitData.fAttackStartTime && fElapsedTime < c_rHitData.fAttackEndTime) return TRUE; } return TRUE; }
void CActorInstance::ComboProcess() { // If combo is on action if (0 != m_dwcurComboIndex) { if (!m_pkCurRaceMotionData) { Tracef("Attacking motion data is NULL! : %d\n", m_dwcurComboIndex); __ClearCombo(); return; } float fElapsedTime = GetAttackingElapsedTime(); // Process PreInput if (m_isPreInput) { //Tracenf("선입력 %f 다음콤보시간 %f", fElapsedTime, m_pkCurRaceMotionData->GetNextComboTime()); if (fElapsedTime > m_pkCurRaceMotionData->GetNextComboTime()) { __RunNextCombo(); m_isPreInput = FALSE; return; } } } else { m_isPreInput = FALSE; if (!IsUsingSkill()) // m_isNextPreInput는 활모드 일때만 사용하는 변수 if (m_isNextPreInput) // 활일때만 스킬이 캔슬 되는건 이곳 때문임 { __RunNextCombo(); m_isNextPreInput = FALSE; } } }