public void ServerProcessState() { m_targetUpdateRate -= Time.fixedDeltaTime; switch (m_state) { case IaState.idle: if (!m_entity.Target) { if (EnemyDetected()) { ChangeState(IaState.target); } } break; case IaState.target: if (!m_entity.Target) { ChangeState(IaState.idle); break; } else { m_debugTargetLineRend.numPositions = 2; Vector3[] positions = new Vector3[] { m_entity.GetTransformPosition(EEntityTransform.RightHand).transform.position, m_entity.Target.GetTransformPosition(EEntityTransform.Center).transform.position }; m_debugTargetLineRend.SetPositions(positions); } if (m_entity.Dead) { ChangeState(IaState.dead); m_entity.EntityBehaviour.StopAllBehaviours(); return; } if (!m_entity.EntityBehaviour.HasBehaviours && m_entity.EntityAbilities.GetAbility(EAttackType.Basic) != null) { m_entity.EntityBehaviour.AddBehaviour(new TowerTargetBehaviour(m_entity, m_entity.Target, m_ability)); } break; case IaState.attacking: break; case IaState.retreat: if (EnemyDetected()) { ChangeState(IaState.target); } else { if (Vector2.Distance(m_entity.Position, m_detectionPosition) <= 2) { ChangeState(IaState.idle); } } break; case IaState.dead: break; default: break; } }