Пример #1
0
 void UpdateAbilityMove()
 {
     if (waitForActMoveAbilityList.Count > 0)
     {
         if (curAbilityMoveData == null)
         {
             curAbilityMoveData = waitForActMoveAbilityList[0];
             if (!curAbilityMoveData.isForce && lockMoving)
             {
                 return;
             }
             destPos = curAbilityMoveData.AbilityDestPos;
             Vector3 rotation = curAbilityMoveData.faceToPos - this.transform.position;
             FaceToNoLerp(new Vector3(rotation.x, 0, rotation.z));
         }
         if (!curAbilityMoveData.isForce && lockMoving || !curAbilityMoveData.CanStartMove)
         {
             return;
         }
         curAbilityMoveData.InitBeforeUse();
         float curRushTime = Time.time - curAbilityMoveData.abilityStartTime;
         //Debug.LogWarning("当前帧技能移动开始: 移动前坐标 = " + transform.position + " , 目标点: = " + curAbilityMoveData.AbilityDestPos);
         if (curAbilityMoveData != null && (transform.position - curAbilityMoveData.AbilityDestPos).sqrMagnitude > 0.01f * 0.01f)//一定要以距离判断是否到位,而不能以时间判断。否则在帧率低的机器上极容易出现坐标错位导致很多bug  by吴江
         {
             if (curRushTime >= 0)
             {
                 float rate = 1.0f;
                 if (curAbilityMoveData.rushHoldTime > 0)
                 {
                     rate = Mathf.Min(1.0f, curRushTime / curAbilityMoveData.rushHoldTime);
                 }
                 transform.position = LineCast(Vector3.Lerp(curAbilityMoveData.startPos, curAbilityMoveData.AbilityDestPos, rate), IsDummy);
                 Vector3 rotation = curAbilityMoveData.faceToPos - this.transform.position;
                 FaceTo(new Vector3(rotation.x, 0, rotation.z));
                 positionDirty = true;
             }
         }
         else if (curRushTime >= curAbilityMoveData.rushHoldTime)
         {
             if (OnAbilityMoveEnd != null)
             {
                 OnAbilityMoveEnd(curAbilityMoveData);
             }
             waitForActMoveAbilityList.RemoveAt(0);
             curAbilityMoveData = null;
         }
     }
     if (waitForActMoveAbilityList.Count <= 0)
     {
         StopMovingTo();
         stateMachine.Send((int)EventType.PATHMOVE);
     }
     //Debug.LogWarning("当前帧技能移动结束: 移动后坐标 = " + transform.position);
 }
Пример #2
0
    ///// <summary>
    ///// 服务端通知被技能影响 by吴江
    ///// </summary>
    ///// <param name="_info"></param>
    //public void UseAbility(AbilityResultInfo.AbilityInfluenceInfo _info)
    //{
    //    if (_info.abilityType != AbilityType.Normal)
    //    {
    //        StopMovingTo();

    //        waitForActMoveAbilityList.Add(new AbilityMoveData(_info, this.gameObject));
    //        stateMachine.Send((int)EventType.ABILITYMOVE);

    //        if (_info.abilityType == AbilityType.STOP)
    //        {
    //            MYPOint clientCurPos = MYPOint.local2worldV3(transform.position);
    //            float distance = Mathf.Max(Mathf.Abs(clientCurPos.x - _info.destPos.x / 1000.0f), Mathf.Abs(clientCurPos.y - _info.destPos.y / 1000.0f));
    //            if (distance > 1.0f)
    //            {
    //                transform.position = _info.destPos;
    //                destPos = transform.position;
    //            }
    //        }
    //    }
    //}

    /// <summary>
    /// 取消技能施放 by吴江
    /// </summary>
    /// <param name="_needNoticeServer"></param>
    public void CancelAbility(bool _isPathMove = true)
    {
        waitForActMoveAbilityList.Clear();
        curAbilityMoveData = null;
        if (_isPathMove)
        {
            stateMachine.Send((int)EventType.PATHMOVE);
        }
        else
        {
            stateMachine.Send((int)EventType.KEYBOARDMOVE);
        }
    }
Пример #3
0
 public virtual void AbilityMoveEnd(AbilityMoveData _abilityMoveData)
 {
 }