private void StateTimeFlow(EnemyBehaviours nexState, float changeStatePercent)
        {
            timeOnCurrentState -= Time.deltaTime;

            if (timeOnCurrentState <= 0)
            {
                Random.InitState((int)System.DateTime.Now.Ticks);
                float f = Random.Range(0f, 1f);
                if (f < changeStatePercent)
                {
                    if (currentBehaviour != EnemyBehaviours.MeleeAttackPlayer && currentBehaviour != EnemyBehaviours.RangeAttackPlayer)
                    {
                        currentBehaviour  = nexState;
                        hasTransitionedIn = false;
                    }
                }
                else
                {
                    RandomStateTime();
                }
            }
        }
        private void ChasePlayer()
        {
            if (!hasTransitionedIn)
            {
                TransitionIn(hasRandomStateTime: true, ChaseTrans);
            }

            float distanceToPlayer = GetDistanceToPlayer();

            if (distanceToPlayer < attackRange)
            {
                hasTransitionedIn = false;
                lastBehaviour     = currentBehaviour;
                currentBehaviour  = EnemyBehaviours.MeleeAttackPlayer;
            }

            /*
             * else if (distanceToPlayer < rangedAttackRange)
             * {
             *  hasTransitionedIn = false;
             *  lastBehaviour = currentBehaviour;
             *  currentBehaviour = EnemyBehaviours.RangeAttackPlayer;
             * }
             */
            else if (distanceToPlayer > giveUpChaseDistance)
            {
                hasTransitionedIn = false;
                lastBehaviour     = currentBehaviour;
                currentBehaviour  = EnemyBehaviours.Idle;
            }
            else
            {
                agent.SetDestination(playerT.position);
                animator.SetFloat("Blend", 1f, animChangeDampTime, Time.deltaTime);
                animator.SetFloat("TorsoBlend", 1f, animChangeDampTime, Time.deltaTime);
            }

            StateTimeFlow(EnemyBehaviours.RangeAttackPlayer, 0.80f);
        }
        private void MeleeAttackEndAnimEvent()
        {
            if (currentBehaviour != EnemyBehaviours.Dead && currentBehaviour != EnemyBehaviours.FleeFromPlayer && currentBehaviour != EnemyBehaviours.Knockback)
            {
                float distanceToPlayer = GetDistanceToPlayer();
                if ((distanceToPlayer > attackRange && distanceToPlayer < attackRange * 3f) || distanceToPlayer > rangedAttackRange)
                {
                    lastBehaviour     = currentBehaviour;
                    currentBehaviour  = EnemyBehaviours.ChasePlayer;
                    hasTransitionedIn = false;
                }
                else if (distanceToPlayer < rangedAttackRange && distanceToPlayer > attackRange)
                {
                    lastBehaviour     = currentBehaviour;
                    currentBehaviour  = EnemyBehaviours.RangeAttackPlayer;
                    hasTransitionedIn = false;
                }

                /*
                 * else if (distanceToPlayer > rangedAttackRange)
                 * {
                 *  lastBehaviour = currentBehaviour;
                 *  currentBehaviour = EnemyBehaviours.ChasePlayer;
                 *  hasTransitionedIn = false;
                 * }
                 */
                /*
                 * else
                 * {
                 *  lastBehaviour = currentBehaviour;
                 *  currentBehaviour = EnemyBehaviours.ChasePlayer;
                 *  hasTransitionedIn = false;
                 * }
                 */
            }
        }
Пример #4
0
 private void HandleEnemyKilledEvent(EnemyBehaviours enemy)
 {
     playerScore += enemy.ScoreValue;  // public property
     Debug.Log("Score :" + playerScore);
     UpdateScore();
 }
Пример #5
0
    // Update is called once per frame
    void Update()
    {
        if (enemyResources.GetHealth() <= 0)
        {
            enemyBehaviour = EnemyBehaviours.Dead;
        }

        if (enemyResources.GetHealth() <= 10 && enemyResources.GetHealth() > 0 && enemyBehaviour == EnemyBehaviours.Attacking)
        {
            enemyBehaviour = EnemyBehaviours.Fleeing;
        }

        playerVelocity = player.GetComponent <PlayerVelocity>().velocity;

        if (!attacking)
        {
            // Look at target
            RotateTowardsTarget(new Vector3(target.x, transform.position.y, target.z));
        }

        if (playerVelocity > 0.5f && enemyBehaviour != EnemyBehaviours.Fleeing && enemyBehaviour != EnemyBehaviours.Dead && !weaponBehaviour.swordBroken)
        {
            // ...player location and AI location as Vector3s
            //Vector3 origin = transform.position;
            //Vector3 position = collider.position;

            // ...Calculate direction and distance from the AI to the location
            //Vector3 dir = position - origin;

            //RaycastHit hit;

            // If player can be seen...
            //if(Physics.Raycast(origin, dir, out hit) && hit.transform.gameObject.tag == "Player")
            //{
            // Update player last known location & attack
            playerLastKnownLocation = player.GetComponent <PlayerVelocity>().head.transform.position;
            enemyBehaviour          = EnemyBehaviours.Attacking;
            //}
        }

        // Enemy Behaviours State Switch
        switch (enemyBehaviour)
        {
        case EnemyBehaviours.Scouting:
            Scouting();
            break;

        case EnemyBehaviours.Attacking:
            Attacking();
            break;

        case EnemyBehaviours.Fleeing:
            Fleeing();
            break;

        case EnemyBehaviours.Dead:
            Dead();
            break;
        }

        // check hit or miss
        if (attackingMiss)
        {
            if (Time.time > missTimer)
            {
                if (!hitOrMiss)
                {
                    enemyBehaviour = EnemyBehaviours.Fleeing;
                }
                hitOrMiss     = false;
                attackingMiss = false;
            }
        }
    }
Пример #6
0
 public abstract void EndBehaviour(EnemyController ec, EnemyBehaviours forceNewBehaviour = EnemyBehaviours.None);
Пример #7
0
 public BasicEnemy BehaviourSetter(EnemyBehaviours b)
 {
     behaviour = b;
     return(this);
 }
Пример #8
0
 public EnemyAttributes SetBehaviours(EnemyBehaviours b)
 {
     behaviour = b;
     return(this);
 }