示例#1
0
        /// <summary>
        /// Check if sound is hearable
        /// </summary>
        public void HearSound(SoundStimuli stimuli)
        {
            if (stimuli.loud)
            {
                OnHearSound?.Invoke(stimuli);
                return;
            }

            if (stimuli.distance <= 0)
            {
                return;
            }

            if (stimuli.caster.position.y < HearingPosition.y || stimuli.caster.position.y > HearingTopPosition.y)
            {
                return;
            }

            float maxDistance = HearingRadius + stimuli.distance;
            float distance    = Vector3.Distance(stimuli.caster.position, transform.position);

            if (distance > maxDistance)
            {
                return;
            }

            float k = (1 - (distance / maxDistance)) * stimuli.multiplier;

            if (k >= 0.5f && k > lastNoiseLevel)
            {
                lastNoiseLevel    = k;
                noiseLevelTimeout = 5;
                OnHearSound?.Invoke(stimuli);
            }
        }
 //Move to sound position if player not in vision
 private void Sensors_OnHearSound(SoundStimuli obj)
 {
     AISensors.VisionResult visionResult = entity.Sensors.CheckVision();
     if (!visionResult.playerVisible)
     {
         entity.Data.currentAttentionWaitTime = entity.Data.AttentionWaitTime;
         entity.Data.lastSeenPlayerPosition   = obj.caster.position;
     }
 }
示例#3
0
 private void Sensors_OnHearSound(SoundStimuli obj)
 {
     assignedZone.ForceAttention();
     assignedZone.PropogatePlayerPosition(obj.caster.position);
 }
示例#4
0
 private void Sensors_OnHearSound(SoundStimuli obj)
 {
     entity.Data.lastSeenPlayerPosition = obj.caster.position;
 }
示例#5
0
 //Wake up and switch to attention on sound
 private void Sensors_OnHearSound(SoundStimuli obj)
 {
     entity.Data.lastSeenPlayerPosition = obj.caster.position;
     controller?.SwitchState(controller?.attentionState);
 }