UnityGameProjectsCode / RelianceGame / AI Control / Enemy Scripts / EnemyTurretSearchState.cs
EnemyTurretSearchState.cs
Raw
using EnemyAIMachineTools;
using System.Collections;
using UnityEngine;

public class EnemyTurretSearchState : EnemyState
{
    private static EnemyTurretSearchState _instance; //only declared once

    private EnemyTurretSearchState() //set instance to itself
    {
        if (_instance != null)
        {
            return;
        }

        _instance = this;
    }

    public static EnemyTurretSearchState instance //creates the instance of the first state if it does not exist
    {
        get
        {
            if (_instance == null)
            {
                new EnemyTurretSearchState();
            }

            return _instance;
        }
    }

    public override IEnumerator InState(EnemyAIMachine owner)
    {
        float waitTime = 6f;
        float elapsedTime = 0f;
        float randomRotation = Random.Range(-60, 60);

        while (owner.botMachine.currentState == EnemyTurretSearchState.instance)
        {
            if (!owner.disabled)
            {
                elapsedTime += Time.deltaTime;
                owner.turretPos.Rotate(0, randomRotation * Time.deltaTime, 0);

                if (elapsedTime >= waitTime)
                {
                    elapsedTime = 0f;
                    randomRotation = Random.Range(-60, 60);
                }

                if (owner.canSeeEnemy && owner.enemyObject != null)
                {
                    owner.botMachine.ChangeState(EnemyAttackState.instance);
                    yield break;
                }
                else
                {
                    owner.canSeeEnemy = false;
                }
            }

            yield return null;
        }
    }
}