{{tag>dragonscript behavior}} [[:start|Start Page]] >> [[main|DragonScript Scripting Language]] >> [[dragengine:modules:dragonscript:abstractions|Abstraction Layers: How you want to build your Game]] >> [[dragengine:modules:dragonscript:behavior_elements|Behavior Elements]] >> **ECBehaviorHearSounds** * [[behaviors_use_cases|Behaviors Explained: By Use-Case]] * [[behaviors_a_to_z|Behaviors Explained: From A to Z]] ====== ECBehaviorHearSounds ====== Behavior element behavior adding hearing sounds support. Uses a SoundLevelMeter resources to hear what sounds are playing in the audible range of the element. SoundLevelMeter resources take sound properties of the environment into account like occlusion and how sound propagates through the world geometry. This allows game entities to hear the world similar to how a player hears the world what goes for sound volumes. The SoundLevelMeter resource can be queried for the speakers currently in audible range and the volume they exhibit. Advanced effects audible to players like frequency band specific gains or special effects are disregarded. Furthermore speakers entering and leaving trigger a notification allowing elements to track elements of interest. If the [[behavior_collider|ECBehaviorCollider]] is present in the behavior element the SoundLevelMeter is attached to the collider. The behavior retrieves the owner of Speakers inside the audible range. If these owners are elements they are stored in a list of elements heared by the owner element. This list is updated when elements enter or leave the audible range. The volume of an element can be queried if required but is not stored. The owner behavior element as well as other ECBehavior subclasses can add a listener to be notified if elements enter and exit the audible range. ====== Instance Counts ====== This behavior can be used only once on an element. ====== Element Class Properties ====== Element class properties have the prefix ''hearSound.'' . ===== audibleDistance ===== Audible distance in meters. * Full name: ''hearSound.audibleDistance'' * Type: float * Default Value: ''100'' * Restriction: At least ''1'' * Example (*.deeclass) 50 ===== volumeThreshold ===== Volume threshold required for elements to be considered audible. * Full name: ''hearSound.volumeThreshold'' * Type: float * Default Value: ''0.01'' * Restriction: At least ''1'' * Example (*.deeclass) 0.02 ===== position ===== Position to attach resource to collider. * Full name: ''hearSound.position'' or ''hearSound({id}).position'' * Type: 3-component float vector * Default Value: (0,0,0) * Example (*.deeclass) ===== orientation ===== Orientation to attach resource to collider in degrees. * Full name: ''hearSound.orientation'' or ''hearSound({id}).orientation'' * Type: 3-component float vector * Default Value: (0,0,0) * Example (*.deeclass) ===== bone ===== Bone to attach resource to. If empty string attach to collider. * Full name: ''hearSound.bone'' or ''hearSound({id}).bone'' * Type: string * Default Value: empty string * Example (*.deeclass) attach ====== Events ====== ===== elementAudible ===== Element become audible. ===== elementInaudible ===== Element became inaudible. ====== Behavior Tree Actions ====== This behavior adds these behavior tree actions if behavior tree is present. ===== hearSound.check ===== Check one or more hear sound parameters. Action succeeds if all parameter value matches their respective hear sound parameter otherwise action fails. This action is typically used as first action in a sequence to run the sequence only if a hear sound parameter matches (or not). ^Parameter^Value^Description^ |count|integer|Count of audible elements equals integer value| |count.not|integer|Count of audible elements does not equal integer value| |count.less|integer|Count of audible elements is less than integer value| |count.greater|integer|Count of audible elements is greater than integer value| |player|''true'', ''false''|Player is audible| |wait| |If present action returns BTResult.running instead of BTResult.failed to wait until the checks are all fulfilled| This is an example of using this action: true ====== Behavior Tree Conditions ====== This behavior adds these behavior tree conditions if behavior tree is present. ===== hearSound.check ===== Check one or more hear sound parameters. Conditions returns true if all parameter value match their respective hear sound parameter. This condition is typically used to run an action or sequence of actions as long as hear sound conditions are true. ^Parameter^Value^Description^ |hearSound.count|integer|Count of audible elements equals integer value| |hearSound.count.not|integer|Count of audible elements does not equal integer value| |hearSound.count.less|integer|Count of audible elements is less than integer value| |hearSound.count.greater|integer|Count of audible elements is greater than integer value| |hearSound.player|''true'', ''false''|Player is audible| This is an example of using this condition: true hearSound.check ====== State Machine Actions ====== Same as [[#behavior_tree_actions|Behavior Tree Actions]]. ====== State Machine Conditions ====== Same as [[#behavior_tree_conditions|Behavior Tree Conditions]]. ====== State Machine Events ====== This behavior sends these state machine events. ===== hearSound.audible ===== Element become audible. ===== hearSound.inaudible ===== Element became inaudible. ====== Required Behaviors ====== This behavior requires no other behaviors. ====== Optional Behaviors ====== * [[behavior_collider|ECBehaviorCollider]]: Attach to collider. * [[behavior_behaviortree|ECBehaviorBehaviorTree]]: Add actions and conditions for behavior trees to use. * [[behavior_statemachine|ECBehaviorStateMachine]]: Add actions and conditions for state machine to use and events to send to the state machine. ====== Persistency ====== This behavior does support element class to be persistable (setPersistable). ====== API Documentation ====== #@LinkApiDocDEDS2_HTML~classDragengine_1_1Scenery_1_1ECBehaviorHearSounds.html,ECBehaviorHearSounds~@#. Since DragonScript Module Version ''1.0'' ====== Use Cases ====== * Detect if element is hearing sounds. ====== Element Class Example ====== This example defines an element which can detect hearing sounds. class MyElement extends BehaviorElementClass public var ECBehaviorComponent component public var ECBehaviorCollider collider public var ECBehaviorHearSounds hearSounds func new() component = ECBehaviorComponent.new(this, null) collider = ECBehaviorCollider.new(this, component) headSounds = ECBehaviorHearSounds.new(this, collider) end end ====== Behavior Factory ====== Using element class supporting adding behaviors the behavior can be added like this: second second 50 ====== Live Examples ====== * [[https://github.com/LordOfDragons/deexamples|DEExamples Repository]]