void StopAtWaypointReached()
      {
          if (isWaitingAtWaypoint == true)
          {
              return;
          }

          switch (waypointNetwork.wayPoints[currentWaypointInList].onReachTaskType)
          {
          case WaypointOnReachTaskType.MOVE_TO_NEXT_WAYPOINT:
              GetNextWaypointInList();
              isWaitingAtWaypoint = false;
              break;

          case WaypointOnReachTaskType.STOP_AND_WAIT:
              movementController.StopAgent();
              stateController.StartCoroutine(WaitAtWaypointTimer(waypointNetwork.wayPoints[currentWaypointInList].stopAndWaitTime));
              isWaitingAtWaypoint = true;
              break;

          case WaypointOnReachTaskType.STOP_LOOK_AT_TARGETS:
              currentLookAtTarget = 0;
              GetNextLookAtTarget();
              isWaitingAtWaypoint = true;
              break;
          }
      }
 //Called when the Start Destination for searching is reached
 public void OnSearchAreaStartDestinationReached()
 {
     reachedStartSearchPosition       = true;
     isObservingCurrentSearchPosition = true;
     stateController.StartCoroutine("SearchAreaTimer");
     stateController.StartCoroutine("ObserveSubAreaTargetTimer");
 }
 private void RangedWeaponAttack()
 {
     runtimeWeaponInHand.canAttack = false;
     animController.SetAnimBool(animController.animData.isFiringBool, true);
     inventoryController.rangedWeaponRuntime.FireGunShared();
     stateController.StartCoroutine(RangedAttackCooldownCoroutine());
 }