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; }
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); }
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; } }
public void Miss() { projectile = null; attacker.ForceStop(); Interrupt(); }