예제 #1
0
 void stopDestroying()
 {
     seekState = seekerState.Returning;
     myObjectHandler.dropObject();
     destroyingObject = false;
 }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        if (seekState == seekerState.Patrol)
        {
            if (beeper.isPlaying && beeper.clip == alarm)
            {
                if (beeper.volume > 0.05f)
                {
                    beeper.volume -= 0.03f;
                }
                else
                {
                    beeper.Stop();
                    beeper.loop = false;
                }
            }
            //here we do our raycasting
            if (Vector3.Distance(transform.position, patrolPoints[currentPatrolPoint].position) < 0.3f)
            {
                currentPatrolPoint = (currentPatrolPoint + 1) % patrolPoints.Length;

                turning     = true;
                agent.speed = turnSpeed;
                Invoke("stopTurning", 1f);
                if (!beeper.isPlaying || (beeper.clip == alarm && beeper.isPlaying))
                {
                    beeper.clip   = wallBeep;
                    beeper.pitch  = initPitch;
                    beeper.volume = initVolume;
                    beeper.Play();
                }
            }
            agent.SetDestination(patrolPoints[currentPatrolPoint].position);

            eyeRot = eyeRot + eyeSwaySpeed;
            if (eyeRot > maxEyeSwayAngle)
            {
                eyeSwaySpeed = -1 * Mathf.Abs(eyeSwaySpeed); //use sine graph
            }
            else if (eyeRot < -maxEyeSwayAngle)
            {
                eyeSwaySpeed = Mathf.Abs(eyeSwaySpeed); //use sine graph
            }
            Eye.localEulerAngles = new Vector3(0, eyeRot, 0);
        }
        else if (seekState == seekerState.Chasing)
        {
            if (!beeper.isPlaying)
            {
                beeper.clip   = alarm;
                beeper.pitch  = 1;
                beeper.volume = alarmVolume;
                beeper.Play();
                beeper.loop = true;
            }
            Eye.LookAt(energyCubeTarget.transform);
            //eyeRot = Eye.eulerAngles.y;
            //Eye.localEulerAngles = new Vector3(0, eyeRot, 0);

            if (eyeState == EyeState.Passive)
            {
                eyeState = EyeState.LockedOn;
                for (int i = 0; i < eyeLights.Length; i++)
                {
                    eyeLights[i].color = lockedOnEyeColours[i];
                }
                rend.material = lockedOnEyeMat;
            }

            agent.speed        = chaseSpeed;
            agent.angularSpeed = chaseAngularSpeed;

            //if (Vector3.Distance(energyCubeTarget.transform.position, transform.position) < 15f)   //Change to hide out of sight
            //{
            if (Vector3.Distance(energyCubeTarget.transform.position, transform.position) < 2.85f)
            {
                seekState = seekerState.Destroying;
                agent.SetDestination(transform.position);
            }
            else
            {
                agent.SetDestination(energyCubeTarget.transform.position);
            }
            //}
            //else
            //{
            //    seekState = seekerState.Destroying;
            //}
        }
        else if (seekState == seekerState.Destroying)
        {
            if (!destroyingObject)
            {
                DestroyDelay = energyCubeTarget.dissolveTime / 2;
                Invoke("stopDestroying", DestroyDelay);
                if (energyCubeTarget.Interactions != null)
                {
                    energyCubeTarget.Interactions.dropObject();
                }
                myObjectHandler.objectToLift = energyCubeTarget.gameObject;
                myObjectHandler.LiftObject();
                destroyingObject = true;
                if (beeper.isPlaying)
                {
                    if (beeper.clip == alarm && beeper.volume > 0.05f)
                    {
                        beeper.volume -= 0.03f;
                    }
                    else
                    {
                        beeper.Stop();
                        beeper.loop = false;
                    }
                }
                energyCubeTarget.Dissolve();
            }
        }
        else if (seekState == seekerState.Returning)
        {
            agent.speed        = stdSpeed;
            agent.angularSpeed = stdAngularSpeed;
            //Here we go back on patrol
            if (eyeState == EyeState.LockedOn)
            {
                eyeState = EyeState.Passive;
                for (int i = 0; i < eyeLights.Length; i++)
                {
                    eyeLights[i].color = PassiveEyeColours[i];
                }
                rend.material = passiveEyeMat;
            }

            if (beeper.isPlaying)
            {
                if (beeper.clip == alarm && beeper.volume > 0.05f)
                {
                    beeper.volume -= 0.03f;
                }
                else
                {
                    beeper.Stop();
                    beeper.loop = false;
                }
            }

            if (Vector3.Distance(transform.position, initPatrolPos) < 0.2f)
            {
                seekState = seekerState.Patrol;
            }
            else
            {
                agent.SetDestination(initPatrolPos);
            }
        }
    }