Ejemplo n.º 1
0
 private void Update()
 {
     if (visibleObjects.Count > 0)
     {
         for (int i = 0; i < visibleObjects.Count; i++)
         {
             CharacterVisibility character = visibleObjects[i].GetComponent <CharacterVisibility>();
             if (character != null && !character.isChased)
             {
                 StateController guard            = null;
                 float           nearestGuardDist = float.MaxValue;
                 for (int j = 0; j < ObjectManager.Instance.Guards.Count; j++)
                 {
                     StateController checkGuard = ObjectManager.Instance.Guards[j].GetComponent <StateController>();
                     if (checkGuard != null && !checkGuard.isChasing)
                     {
                         float distance = Mathf.Abs((character.transform.position - checkGuard.transform.position).sqrMagnitude);
                         if (nearestGuardDist > distance)
                         {
                             guard            = checkGuard;
                             nearestGuardDist = distance;
                         }
                     }
                 }
                 if (guard != null)
                 {
                     character.isChased = true;
                     guard.isChasing    = true;
                     guard.target       = character.transform;
                     guard.TransitionToState(guardChaseState);
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
    void Update()
    {
        CheckForObjectOfInterestPlacement();
        RotateIndicators();

        Debug.DrawRay(eye.position, eye.forward.normalized * 2.0f, Color.green);

        if (!isChasing && !hasDocuments)
        {
            if (Physics.SphereCast(eye.position,
                                   0.3f,
                                   eye.forward,
                                   out hit,
                                   2.0f) &&
                hit.collider.CompareTag("Enemy"))
            {
                CharacterVisibility enemy = hit.collider.gameObject.GetComponent <CharacterVisibility>();
                if (enemy && !enemy.isChased)
                {
                    enemy.isChased = true;

                    enemy.gameObject.GetComponent <CharacterWobble>().enabled = false;
                    StateController targetState = enemy.gameObject.GetComponent <StateController>();
                    targetState.currentState         = null;
                    targetState.navMeshAgent.enabled = false;
                    enemy.gameObject.GetComponent <Collider>().enabled = false;
                    enemyGameObject = enemy.gameObject;
                    isChasing       = true;
                    animator.SetBool("RightHandUp", true);
                    animator.SetBool("LeftHandUp", true);
                    enemyGameObject.transform.SetParent(gameObject.transform);
                    //StartCoroutine(FetchEnemy());
                }
            }
        }
        else
        {
            if (enemyGameObject != null)
            {
                enemyGameObject.transform.localPosition = EnemyPos;
            }
        }
    }
Ejemplo n.º 3
0
 void LateUpdate()
 {
     foreach (GameObject enemy in ObjectManager.Instance.Enemies)
     {
         CharacterVisibility visibility = enemy.GetComponent <CharacterVisibility>();
         if (visibility.IsTracked)
         {
             visibility.IsVisible = true;
             visibility.isChecked = true;
         }
         else
         {
             visibility.IsVisible = false;
             visibility.isChecked = false;
             foreach (GameObject detect in ObjectManager.Instance.Detectors)
             {
                 if (!visibility.isChecked)
                 {
                     LineOfSight LoS        = detect.GetComponent <LineOfSight>();
                     Vector3     rayCastDir = enemy.transform.position - detect.transform.position;
                     RaycastHit  rCH;
                     if (Physics.Raycast(detect.transform.position, rayCastDir, out rCH, LoS.ViewDistance, detectionLayerMask))
                     {
                         if (rCH.transform == enemy.transform && Vector3.Angle(rayCastDir, detect.transform.forward) < LoS.ViewAngle * 0.5f)
                         {
                             visibility.IsVisible = true;
                             visibility.isChecked = true;
                             break;
                         }
                     }
                 }
             }
             if (visibility.isChecked)
             {
                 continue;
             }
         }
     }
 }
Ejemplo n.º 4
0
    void Update()
    {
        CheckForObjectOfInterestPlacement();
        RotateIndicators();

        Debug.DrawRay(eye.position, eye.forward.normalized * 2.0f, Color.green);

        if (!isChasing)
        {
            if (Physics.SphereCast(eye.position,
                                   0.3f,
                                   eye.forward,
                                   out hit,
                                   2.0f) &&
                hit.collider.CompareTag("Enemy"))
            {
                CharacterVisibility enemy = hit.collider.gameObject.GetComponent <CharacterVisibility>();
                if (enemy && !enemy.isChased)
                {
                    enemy.isChased = true;

                    StateController targetState = enemy.gameObject.GetComponent <StateController>();
                    targetState.currentState         = null;
                    targetState.navMeshAgent.enabled = false;
                    enemy.gameObject.GetComponent <Collider>().enabled = false;
                    enemyGameObject = enemy.gameObject;
                    StartCoroutine(FetchEnemy());
                }
            }
        }
        else
        {
            if (enemyGameObject != null)
            {
                enemyGameObject.transform.localPosition = new Vector3(0.15f, 1.3f, 3.75f);
            }
        }
    }