예제 #1
0
        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;
        }
예제 #2
0
        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;
                }
            }
        }