public void CallAttackTouched(JoyButtonResponseData data)
    {
        SkillConfig useConfig;
        SkillConfig lastBuff      = this.mAttackInfo.mAttackQueue.Count > 0 ? this.mAttackInfo.mAttackQueue[mAttackInfo.mAttackQueue.Count - 1] : this.mAttackInfo.mCurrentAttack;
        bool        isSameCommand = lastBuff != null && data.IsEqual(lastBuff._keyData);

        if (isSameCommand)
        {
            //判定连击
            useConfig = lastBuff._NextAttackValue > 0 ? this.DataToConfig(data, lastBuff._NextAttackValue) : null;
        }
        else
        {
            //第一步攻击
            useConfig = this.DataToConfig(data, 0);
        }

        if (useConfig == null)
        {
            return;
        }

        if (isSameCommand == false)
        {
            this.mAttackInfo.mAttackQueue.Clear();
        }
        this.mAttackInfo.mAttackQueue.Add(useConfig);

        if (this.mAttackInfo.mCurrentAttack == null || this.mAttackInfo.IsBeginEndShake())
        {
            this.DoAttackCommand();
        }
    }
Beispiel #2
0
 public bool IsEqual(JoyButtonResponseData data)
 {
     return(data.mIsGrounded == this.mIsGrounded &&
            data.mCode == this.mCode &&
            data.mEvent == this.mEvent &&
            data.mDir == this.mDir);
 }
 private SkillConfig DataToConfig(JoyButtonResponseData data, int attackValue)
 {
     foreach (SkillScriptableObject scp in this.mSkillConfigList)
     {
         if (scp._config._keyData.IsEqual(data))
         {
             if (attackValue == 0 || attackValue == scp._config._AttackValue)
             {
                 return(scp._config);
             }
         }
     }
     return(null);
 }
 private void CallAttack(JoyButtonResponseData data)
 {
     if (data.mEvent == JoyButtonEvent.Touched ||
         data.mEvent == JoyButtonEvent.SlideDir)
     {
         this.CallAttackTouched(data);
     }
     else if (data.mEvent == JoyButtonEvent.Holding)
     {
         this.CallAttackHolding(data);
     }
     else if (data.mEvent == JoyButtonEvent.EndTouch)
     {
         this.CallAttackEnd(data);
     }
 }
 public void CallAttackEnd(JoyButtonResponseData data)
 {
     //蓄力释放
     if (this.mAttackInfo.IsAttackCharging)
     {
         float passtime = Time.time - this.mAttackInfo.mStartTime;
         if (passtime >= this.mAttackInfo.mCurrentAttack._ChargingSecs)
         {
             this.mPlayer.TriggerAttack(this.mAttackInfo.mCurrentAttack._AttackValue, false);
         }
         else
         {
             this.mAttackInfo.Reset();
         }
     }
 }
    public void OnUiJoyButtonEvent(JoyButtonCode buttonCode, JoyButtonEvent evt, JoyButtonDir dir)
    {
        JoyButtonResponseData data = new JoyButtonResponseData();

        data.mCode       = buttonCode;
        data.mEvent      = evt;
        data.mDir        = dir;
        data.mIsGrounded = this.mIsGrounded;
        if (data.mCode == JoyButtonCode.Jump && data.mEvent == JoyButtonEvent.Touched)
        {
            this.CallJump();
        }
        else
        {
            this.CallAttack(data);
        }
    }
 public void CallAttackHolding(JoyButtonResponseData data)
 {
     if (this.mAttackInfo.mCurrentAttack == null || this.mAttackInfo.IsBeginEndShake() || this.mAttackInfo.mCurrentAttack._keyData.mCode != data.mCode)
     {
         this.CallAttackTouched(data);
     }
     else if (this.mAttackInfo.mCurrentAttack._keyData.mCode == data.mCode)
     {
         //相同指令,构造连击
         data.mEvent = JoyButtonEvent.Touched;
         SkillConfig lastBuff = this.mAttackInfo.mAttackQueue.Count > 0 ? this.mAttackInfo.mAttackQueue[mAttackInfo.mAttackQueue.Count - 1] : this.mAttackInfo.mCurrentAttack;
         while (lastBuff != null && lastBuff._NextAttackValue > 0)
         {
             this.CallAttackTouched(data);
             lastBuff = this.mAttackInfo.mAttackQueue.Count > 0 ? this.mAttackInfo.mAttackQueue[mAttackInfo.mAttackQueue.Count - 1] : this.mAttackInfo.mCurrentAttack;
         }
     }
 }