Exemple #1
0
    public override void RunBehavior()
    {
        switch (simpleState)
        {
        case SimpleStates.Idle:
            break;

        case SimpleStates.BecomingAware:
            if (Time.time - awareDelayTimer > fuzzyDelay)
            {
                simpleState = SimpleStates.AwareOfPlayer;
            }
            break;

        case SimpleStates.AwareOfPlayer:

            Vector3 fVelocity = navMeshAgent.velocity;

            float d_p = AIBlackboard.DistanceToPlayer2D(transform.position);

            if (AIBlackboard.DistanceToPlayer2D(transform.position) > distanceFromPlayer)
            {
                fVelocity = Vector3.MoveTowards(fVelocity, AIBlackboard.DirectionToPlayer2D(transform.position), Time.deltaTime * 100 * aggressiveness);
            }

            if (d_p < tooCloseToPlayer)
            {
                fVelocity += -AIBlackboard.DirectionToPlayer2D(transform.position).normalized *playerSeparation;
            }

            if (monsterAttack != null)
            {
                if (monsterAttack.AttackCondition() && monsterAttack.HasAttackCooled())
                {
                    simpleState = SimpleStates.Attack;
                    monsterAware.PlayOneShot(monsterAware.clip, 0.3f);
                }
                else if (monsterAttack.CooldownLeft() < fear)
                {
                    fVelocity = Vector3.MoveTowards(fVelocity, -AIBlackboard.DirectionToPlayer2D(transform.position), Time.deltaTime * 40 * fear);
                }
            }

            fVelocity.x = Mathf.Clamp(fVelocity.x, -maxSpeed, maxSpeed);
            fVelocity.y = Mathf.Clamp(fVelocity.y, -maxSpeed, maxSpeed);
            fVelocity.z = Mathf.Clamp(fVelocity.z, -maxSpeed, maxSpeed);

            navMeshAgent.velocity = fVelocity;

            break;

        case SimpleStates.Attack:
            if (monsterAttack != null)
            {
                if (monsterAttack.RunAttack())
                {
                    simpleState = SimpleStates.AwareOfPlayer;
                }
            }
            break;
        }
    }