private IEnumerator BotBehaviour() { float timer = 0; while (true) { ImpulseSide side = (transform.position - TargetTransform.position).x < 0 ? ImpulseSide.Right : ImpulseSide.Left; timer -= Time.deltaTime; if (timer <= 0) { float distance = Vector3.Distance(transform.position, TargetTransform.position); if (distance > MaxDistance) { if ((TargetTransform.position - transform.position).y > 0) { _unit.Impulse(side); } timer = BotInputCooldown; } else if (distance > MinDistance) { timer = BotSimpleDelay; } else if (distance < MinDistance) { _unit.Impulse(side); timer = BotInputCooldown; } } yield return(null); } }
public void Impulse(ImpulseSide side) { _rigidbody.velocity = Vector3.zero; Vector3 impulse; switch (side) { case ImpulseSide.Left: impulse = new Vector3(-_unitSettingsData.SideOffset, 1).normalized *_unitSettingsData.ImpulseForce; break; case ImpulseSide.Right: impulse = new Vector3(_unitSettingsData.SideOffset, 1).normalized *_unitSettingsData.ImpulseForce; break; default: impulse = Vector3.zero; break; } _rigidbody.AddForce(impulse, ForceMode.Impulse); }
private void Impulse(ImpulseSide side) { _unit.Impulse(side); }