protected virtual void StartAttack(ActorData hActorData, List <IActorBehaviourData> lstBehaviourData, AttackCacheData hData) { var hPlayer = Global_GameplayManager.playerController; if (hPlayer == null) { return; } hData.m_vAttackStartPos = hActorData.m_hActor.position; hData.m_vAttackDestination = hPlayer.actorData.m_hActor.position; hData.m_vControlPoint = hData.m_vAttackStartPos + (hData.m_vAttackDestination - hData.m_vAttackStartPos) / 2 + Vector2.down * 2.0f; hData.m_fAttackStartTime = Time.time; hData.m_fAttackDuration = (Vector2.Distance(hData.m_vAttackStartPos, hData.m_vAttackDestination) / (hActorData.m_hStatus.status.m_fMoveSpeed * 2)); hData.m_bAttacking = true; }
protected virtual void ProcessAttack(ActorData hActorData, List <IActorBehaviourData> lstBehaviourData, AttackCacheData hData) { float fTime = (Time.time - hData.m_fAttackStartTime) / hData.m_fAttackDuration; Vector2 vPos1 = Vector2.Lerp(hData.m_vAttackStartPos, hData.m_vControlPoint, fTime); Vector2 vPos2 = Vector2.Lerp(hData.m_vControlPoint, hData.m_vAttackDestination, fTime); hActorData.m_hActor.position = Vector2.Lerp(vPos1, vPos2, fTime); if (Time.time >= hData.m_fAttackStartTime + hData.m_fAttackDuration) { if (hData.m_bFlyAgain) { hData.m_bAttacking = false; } else { hData.m_fAttackStartTime = Time.time; hData.m_vAttackDestination.y = hData.m_vAttackStartPos.y + 1; float fX = (hData.m_vAttackDestination.x - hData.m_vAttackStartPos.x); hData.m_vAttackDestination.x += fX; hData.m_vAttackStartPos = hActorData.m_hActor.position; hData.m_vControlPoint = hData.m_vAttackStartPos + (hData.m_vAttackDestination - hData.m_vAttackStartPos) / 2 + Vector2.up * 2.0f; hData.m_fAttackDuration = (Vector2.Distance(hData.m_vAttackStartPos, hData.m_vAttackDestination) / (hActorData.m_hStatus.status.m_fMoveSpeed)); hData.m_bFlyAgain = true; } } }