Пример #1
0
    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;
        }
    }