void Update()
    {
        AdjustViewForPlayerSpeed();
        switch (aiState)
        {
        case "seenTarget":
            if (visibleTargets.Count > 0)
            {
                targetOfInterest.transform.position = visibleTargets[0].transform.position;
            }
            break;

        case "idlePatrol":

            if (agent.reachedEndOfPath && !agent.pathPending)
            {
                EnterState("lookAround");
            }
            if (visibleTargets.Count > 0)
            {
                alarmGraceTimer += Time.deltaTime;
                if (alarmGraceTimer > alarmGracePeriod * (Vector3.Distance(transform.position, visibleTargets[0].transform.position) / currentViewRadius))
                {
                    EnterState("seenTarget");
                }
            }
            else
            {
                alarmGraceTimer = 0;
            }
            break;

        default:
            break;

        case "reporting":
            agent.destination = gameController.instance.NearestGuard(transform.position).transform.position;
            agent.SearchPath();
            if ((agent.reachedEndOfPath && !agent.pathPending) || Vector3.Distance(transform.position, agent.destination) < 1)
            {
                guardController nearestGuard = gameController.instance.NearestGuard(transform.position).GetComponent <guardController>();
                if (nearestGuard.aiState != "seenTarget")
                {
                    nearestGuard.SetNewTargetOfInterest(targetOfInterest.transform.position, "relayedInfo");
                    nearestGuard.EnterState("checkingReport");
                }
                EnterState("idlePatrol");
            }
            if (visibleTargets.Count > 0)
            {
                EnterState("seenTarget");
            }
            break;
        }
    }
Example #2
0
    public override void OnSceneGUI()
    {
        base.OnSceneGUI();
        guardController fow = (guardController)target;

        Handles.color = Color.white;
        Handles.DrawWireArc(fow.transform.position, Vector3.forward, Vector3.up, 360, fow.currentViewRadius);
        Vector3 viewAngleA = fow.DirFromAngle(-fow.currentViewAngle / 2, false);
        Vector3 viewAngleB = fow.DirFromAngle(fow.currentViewAngle / 2, false);

        Handles.DrawLine(fow.transform.position, fow.transform.position + viewAngleA * fow.currentViewRadius);
        Handles.DrawLine(fow.transform.position, fow.transform.position + viewAngleB * fow.currentViewRadius);

        Handles.color = Color.red;
        foreach (Transform visibleTarget in fow.visibleTargets)
        {
            Handles.DrawLine(fow.transform.position, visibleTarget.position);
        }
    }