Пример #1
0
    // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        if (enemyTrash != null && enemyTrash.GetTarget() != null && enemyTrash.GetTarget().type == TargetType.TT_PLAYER)
        {
            Vector3 direction = enemyTrash.GetTarget().transf.position - enemyTrash.transform.position;

            var playerLayerMask = 1 << 12;
            // Cast ray to target in combat range
            RaycastHit hitC;
            bool       combatRayHit = Physics.Raycast(enemyTrash.transform.position, direction, out hitC, enemyTrash.combatRange, playerLayerMask);

            // Cast ray to target in attack range
            RaycastHit hitA;
            bool       attackRayHit = Physics.Raycast(enemyTrash.transform.position, direction, out hitA, enemyTrash.attackRange, playerLayerMask);

            // Debug draw combat ray
            Color rayColor;
            rayColor = combatRayHit ? Color.green : Color.red;
            Debug.DrawRay(enemyTrash.transform.position, direction, rayColor);

            bool change = true;
            if (!combatRayHit)
            {
                animator.SetTrigger("chase");
            }
            else if (combatRayHit && !attackRayHit)
            {
                if (!randomCreated)
                {
                    int num = Random.Range(0, 4);
                    if (num == 0)
                    {
                        animator.SetTrigger("moveForward");
                    }
                    else
                    {
                        animator.SetTrigger("moveAround");
                    }
                    randomCreated = true;
                }
            }
            else if (attackRayHit)
            {
                enemyTrash.nav.Stop();
                animator.SetTrigger("attack");
            }
            else
            {
                change = false;
            }

            if (change)
            {
                animator.SetBool("combat", false);
            }
        }
    }
Пример #2
0
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        if (enemyTrash == null)
        {
            enemyTrash = animator.transform.gameObject.GetComponent <EnemyTrash>();
            enemyTrash.nav.Stop();
        }
        int num = Random.Range(0, 2);

        if (num == 0)
        {
            rotationDirection = Vector3.up;
        }
        else
        {
            rotationDirection = Vector3.down;
        }
        moveAroundDuration = Random.Range(1.0f, 3.0f);

        startTime = Time.time;
        enemyTrash.transform.RotateAround(enemyTrash.GetTarget().transf.position, rotationDirection, enemyTrash.combatAngularSpeed * Time.deltaTime);
    }
Пример #3
0
 // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
 override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     if (enemyTrash.nav.remainingDistance <= enemyTrash.attackRange)
     {
         enemyTrash.nav.Stop();
         animator.SetBool("moveForward", false);
         animator.SetTrigger("attack");
         //return enemyTrashTypes.ATTACK_STATE;
     }
     else if (enemyTrash.nav.remainingDistance > enemyTrash.combatRange)
     {
         animator.SetBool("moveForward", false);
         animator.SetBool("chase", true);
     }
     else
     {
         enemyTrash.nav.Resume();
         if (enemyTrash.GetTarget() != null)
         {
             enemyTrash.nav.SetDestination(enemyTrash.GetTarget().transf.position);
         }
     }
 }
Пример #4
0
 // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
 override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     if (enemyTrash.IsDead())
     {
         animator.SetBool("die", true);
         if (!spawnedParticles)
         {
             spawnedParticles = true;
             enemyTrash.SpawnDeadParticles();
         }
     }
     else if (enemyTrash.GetTarget() != null)
     {
         animator.SetBool("chase", true);
     }
 }
Пример #5
0
    //OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
    override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        RaycastHit attackHit;
        Vector3    direction;
        bool       rayAttackHit;
        Color      rayColor;
        var        targetLayerMask = 1 << 12;

        if (enemyTrash.GetTarget().transf != null)
        {
            switch (enemyTrash.GetTarget().type)
            {
            case TargetType.TT_PLAYER:
                // Cast ray to target in combat range
                direction    = enemyTrash.GetTarget().transf.position - enemyTrash.transform.position;
                rayAttackHit = Physics.Raycast(enemyTrash.transform.position, direction, out attackHit, enemyTrash.combatRange, targetLayerMask);

                // Debug draw ray
                rayColor = rayAttackHit ? Color.green : Color.red;
                Debug.DrawRay(enemyTrash.transform.position, direction, rayColor);

                if (!rayAttackHit && !animator.GetBool("iddle"))
                {
                    enemyTrash.nav.SetDestination(enemyTrash.GetTarget().transf.position);
                    enemyTrash.nav.Resume();
                }
                else if (rayAttackHit)
                {
                    animator.SetBool("chase", false);
                    animator.SetBool("combat", true);
                    enemyTrash.nav.Stop();
                }
                break;

            case TargetType.TT_ARTILLERY:
                // Cast ray to target in attack range
                direction       = enemyTrash.GetTarget().transf.position - enemyTrash.transform.position;
                targetLayerMask = 1 << 19;
                rayAttackHit    = Physics.Raycast(enemyTrash.transform.position, direction, out attackHit, enemyTrash.attackRange, targetLayerMask);

                // Debug draw ray
                rayColor = rayAttackHit ? Color.green : Color.red;
                Debug.DrawRay(enemyTrash.transform.position, direction, rayColor);

                // If not in attack range and have to go to the artillery calculate the target point out of the artillery and go there.
                if (!rayAttackHit && !animator.GetBool("iddle"))
                {
                    RaycastHit destinationHit;
                    Physics.Raycast(enemyTrash.transform.position, direction, out destinationHit, targetLayerMask);
                    enemyTrash.nav.SetDestination(destinationHit.point);
                    enemyTrash.nav.Resume();
                }
                else
                {
                    animator.SetBool("chase", false);
                    animator.SetBool("attackArtillery", true);
                    enemyTrash.nav.Stop();
                }
                break;

            default:
                animator.SetBool("chase", false);
                animator.SetBool("iddle", true);
                break;
            }
        }
        else
        {
            animator.SetBool("chase", false);
            animator.SetBool("attackArtillery", false);
            animator.SetBool("combat", false);
            animator.SetBool("iddle", true);
        }
    }