Files
aarpg/interactables/dungeon/scripts/pressure_plate.gd
Andriy Yednarovych e877c5f058 init
2026-02-22 19:26:26 +01:00

44 lines
1.2 KiB
GDScript

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()