Beispiel #1
0
        private void KnockBackCalc(Bot source, int HitValue, Vector3 AttackDiration)
        {
            float         HitTime = 0;
            bool          Hit2    = false;
            KnockBackType t       = KnockBackType.KnockOut;

            if (HitValue > 0)
            {
                AttackDiration.y = 0;
                AttackDiration.Normalize();
                if (owner.KnockBackInformation != null)
                {
                    Hit2 = true;
                    if (owner.KnockBackInformation.type != KnockBackType.None)
                    {
                        t = owner.KnockBackInformation.type;
                    }
                    HitTime = HitValue > owner.Abilities.KnockBackDefend ? HitValue / owner.Abilities.KnockBackDefend * 0.3f : 0.3f;
                }
                else if (HitValue > owner.Abilities.KnockBackDefend)
                {
                    HitTime = HitValue / owner.Abilities.KnockBackDefend * 0.3f;
                }
                else
                {
                    return;
                }
                if (owner.OnAir)
                {
                    t = KnockBackType.BlastOut;
                    AttackDiration.y = 3;
                }
                if (HitTime > 0.6f)
                {
                    HitTime = -1;
                }
                if (OnKnockBack != null)
                {
                    KnockBackEventArgs e = new KnockBackEventArgs(HitTime, t, Hit2);
                    e.KnockOutVelocity = new Vector2(1, 0);
                    AttackDiration.y   = e.KnockOutVelocity.y;
                    AttackDiration.x  *= e.KnockOutVelocity.x;
                    AttackDiration.z  *= e.KnockOutVelocity.x;
                    if (e.Cancel)
                    {
                        return;
                    }
                    HitTime = e.HitTime;
                    t       = e.type;
                }
                Buff b = null;
                switch (t)
                {
                case KnockBackType.KnockOut:
                    owner.BuffSystem.AddBuff(b = new BuffKnockOver(source, HitTime, AttackDiration));
                    break;

                case KnockBackType.None:
                    owner.BuffSystem.AddBuff(b = new BuffKnockOver(source, HitTime, Vector3.zero));
                    break;

                case KnockBackType.BlastOut:
                    owner.BuffSystem.AddBuff(b = new BuffKnockOut(source, AttackDiration));
                    break;

                case KnockBackType.Ground:
                    owner.BuffSystem.AddBuff(b = new BuffDownGround(source));
                    break;

                default:
                    break;
                }
                owner.KnockBackInformation           = new KnockBackInformation();
                owner.KnockBackInformation.type      = t;
                owner.KnockBackInformation.Time      = HitTime;
                owner.KnockBackInformation.KnockBuff = b;
                owner.HitAnimExecute();
            }
            #region

            /*
             * if (HitValue > 0)
             * {
             *  //攻击硬直中敌人造成的二次硬直
             *  if (KnockBackTime > 0)
             *  {
             *      float KnockBackTime_C = HitValue / KnockBackDefend;
             *      if (KnockBackTime_C < 0.3f)
             *      {
             *          KnockBackTime_C = 0.3f;
             *          KnockBackEventArgs e = new KnockBackEventArgs(KnockBackTime_C, KnockBackType.KnockOut, true);
             *
             *          if (KnockBackTime_C > KnockBackTime)
             *          {
             *              KnockBackTime = KnockBackTime_C;
             *              //硬直动画重置
             *              HitAnimExecute();
             *          }
             *      }
             *  }
             *  else if (HitValue > KnockBackDefend)
             *  {
             *      float KnockBackTime_C = HitValue / KnockBackDefend;
             *      if (KnockBackTime_C > 0.9f)
             *      {
             *          //击飞
             *      }
             *      else if (KnockBackTime_C > 0.6f)
             *      {
             *          KnockBackTime_C = 0.6f;
             *      }
             *      knockBacktime = KnockBackTime_C;
             *      //硬直动画重置
             *  }
             * }
             */
            #endregion
        }
Beispiel #2
0
 public KnockBackEventArgs(float hitTime, KnockBackType knockBackType, bool KnockBack2)
 {
     HitTime         = hitTime;
     type            = knockBackType;
     this.KnockBack2 = KnockBack2;
 }