示例#1
0
 public override void AttackAction()
 {
     projectile = GameObject.Instantiate(Links.links.grabbingProjectile).GetComponent <GrabbingProjectile>();
     projectile.relatedAttack = this;
     projectile.Attacker      = attacker;
     projectile.lifeTime      = projectileRange / projectileSpeed;
     projectile.speed         = projectileSpeed;
     projectile.Launch(attacker.transform.position + 0.5f * attacker.transform.forward + attacker.centerHeight * Vector3.up, attacker.transform.forward);
     isActive = true;
 }
示例#2
0
 public void Catch(Unit target)
 {
     projectile = null;
     if (target.isImmuneToControl)
     {
         attacker.ForceStop();
         Interrupt();
         return;
     }
     grabbedTarget          = target;
     relativeTargetPosition = attacker.transform.InverseTransformPoint(target.transform.position);
     lockEffect             = GameObject.Instantiate(Links.links.lockEffect);
     lockEffect.transform.SetParent(grabbedTarget.transform, false);
 }
示例#3
0
 public override void Interrupt()
 {
     if (isActive)
     {
         if (projectile != null)
         {
             projectile.Cancel(true);
             projectile = null;
         }
         if (grabbedTarget != null)
         {
             Vector3 flyingVelocity = attacker.transform.TransformVector(LeapControl.smoothedHandSpeed * movingFactor);
             if (flyingVelocity.magnitude > flyingSpeedLimit)
             {
                 flyingVelocity = flyingVelocity.normalized * flyingSpeedLimit;
             }
             grabbedTarget.SendFlying(flyingVelocity);
             grabbedTarget = null;
             GameObject.Destroy(lockEffect);
             lockEffect = null;
         }
         isActive = false;
     }
 }
示例#4
0
 public void Miss()
 {
     projectile = null;
     attacker.ForceStop();
     Interrupt();
 }