class_name PressurePlate extends Node2D signal activated signal deactivated var bodies := 0 var is_active := false var offset_rectangle: Rect2 @onready var area: Area2D = $Area2D @onready var audio: AudioStreamPlayer2D = $AudioStreamPlayer2D @onready var audio_activate: AudioStream = preload("res://interactables/dungeon/lever-01.wav") @onready var audio_deactivate: AudioStream = preload("res://interactables/dungeon/lever-02.wav") @onready var sprite: Sprite2D = $Sprite2D func _ready() -> void: area.body_entered.connect(on_body_entered) area.body_exited.connect(on_body_exited) offset_rectangle = sprite.region_rect func on_body_entered(_body: Node2D) -> void: bodies += 1 calc_state_activated() func on_body_exited(_body: Node2D) -> void: bodies -= 1 calc_state_activated() func calc_state_activated() -> void: if bodies > 0 and !is_active: is_active = true sprite.region_rect.position.x = offset_rectangle.position.x - 32 activated.emit() play_audio(audio_activate) elif bodies <= 0 and is_active: is_active = false sprite.region_rect.position.x = offset_rectangle.position.x deactivated.emit() play_audio(audio_deactivate) func play_audio(stream: AudioStream) -> void: audio.stream = stream audio.play()