public static BaseState CreateBaseState(EnemyAIStateType stateType, EnemyMovement controller)
    {
        BaseState returnState = null;

        switch (stateType)
        {
        case EnemyAIStateType.AvoidBullet:
            returnState = new AvoidBulletState(controller);
            break;

        case EnemyAIStateType.Search:
            returnState = new SearchState(controller);
            break;

        case EnemyAIStateType.Strafe:
            returnState = new StrafeState(controller);
            break;
        }
        return(returnState);
    }
Exemple #2
0
    public override EnemyAIStateType Tick()
    {
        EnemyAIStateType state = GetStateType();

        if (controller.TargetedPlayer != null)
        {
            Vector3 targetPosition = controller.TargetedPlayer.transform.position;
            //Vector3 offsetPlayer = transform.position - targetPosition;
            float distance = Vector3.Distance(transform.position, targetPosition);
            controller.TargetDestination = targetPosition;

            if (controller.NearestBullet != null)
            {
                state = EnemyAIStateType.AvoidBullet;
            }
            else if (Mathf.Abs(distance) < controller.StrafeDistance)
            {
                state = EnemyAIStateType.Strafe;
            }
        }

        return(state);
    }
Exemple #3
0
    public override EnemyAIStateType Tick()
    {
        EnemyAIStateType stateType = GetStateType();

        if (controller.TargetedPlayer != null)
        {
            Vector3 targetPosition = controller.TargetedPlayer.transform.position;
            Vector3 offsetPlayer   = transform.position - targetPosition;
            Vector3 dir            = Vector3.Cross(offsetPlayer, Vector3.up);
            controller.TargetDestination = transform.position + dir;
            //var lookPos = targetPosition - transform.position;
            //lookPos.y = 0;
            //var rotation = Quaternion.
            if (controller.NearestBullet != null)
            {
                stateType = EnemyAIStateType.AvoidBullet;
            }
            else if (Mathf.Abs(offsetPlayer.magnitude) > controller.ChaseDistance)
            {
                stateType = EnemyAIStateType.Search;
            }
        }
        return(stateType);
    }
 private void SwitchOnNextState(EnemyAIStateType nextState)
 {
     CurrentState = _availableStates[nextState];
     OnStateChange?.Invoke(CurrentState);
 }