public override void Tick() { if (HasLineOfSightToAttackTarget(out float distance)) { brain.SetState(new AttackState(brain)); } else if (Vector3.Distance(brainTransform.position, targetTransform.position) > distanceToStopAiming) { brain.SetState(new ChaseState(brain)); } }
public override void Tick() { float distanceFromTarget = GetDistanceFromSoldierToTarget(); if (distanceFromTarget > distanceToStopChasing) { brain.SetState(new IdleState(brain)); } else if (distanceFromTarget < distanceToStartAiming) { brain.SetState(new AimState(brain)); } }
private void EndAttack() { brain.AttackModule.OnAttackEnd -= EndAttack; if (HasLineOfSightToAttackTarget(out float distance)) { brain.SetState(new AttackState(brain)); } else { if (brain) { brain.SetState(new AimState(brain)); } } }
public override void Tick() { if (Vector3.Distance(brainTransform.position, targetTransform.position) < distanceToStartChasing) { brain.SetState(new ChaseState(brain)); } }
public AttackState(SoldierBrain brain) { this.brain = brain; brainTransform = brain.transform; target = brain.TargetReference.Value; if (brain) { brain.AttackModule.EnableToAttack(); brain.AttackModule.OnAttackEnd += EndAttack; } else { brain.SetState(new DeadState(brain)); } }