/// <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; } }
private void Sensors_OnHearSound(SoundStimuli obj) { assignedZone.ForceAttention(); assignedZone.PropogatePlayerPosition(obj.caster.position); }
private void Sensors_OnHearSound(SoundStimuli obj) { entity.Data.lastSeenPlayerPosition = obj.caster.position; }
//Wake up and switch to attention on sound private void Sensors_OnHearSound(SoundStimuli obj) { entity.Data.lastSeenPlayerPosition = obj.caster.position; controller?.SwitchState(controller?.attentionState); }