funnymemellama/Button.gd

74 lines
1.4 KiB
GDScript3
Raw Permalink Normal View History

extends StaticBody3D
signal triggered(by_what: Node3D)
@export_category('Button')
@export
var momentary: bool = false
@export_subgroup('Material')
@export
var released_material: StandardMaterial3D = null
@export
var pressed_material: StandardMaterial3D = null
# NOTE: These functions need to use the $ notation instead of the @onready sound
# because it seems like the editor calls these before @onready fires.
# Not sure why this doesnt work...
@export_subgroup('Sound')
@export
2023-10-01 23:39:28 -04:00
var press_sound: AudioStream = null
@export
var release_sound: AudioStream = null
@export_range(-80, 80, 1, "suffix:dB")
var volume = 0.0 :
get:
return $AudioStreamPlayer3D.volume_db
set(value):
$AudioStreamPlayer3D.volume_db = value
@onready
var _anim = $AnimationPlayer
@onready
var _button = $CSGMesh3D
@onready
var _sound = $AudioStreamPlayer3D
var _triggered = false
var _resetting = false
func _ready():
_anim.animation_finished.connect(_on_anim_finished)
func interact(other):
if _triggered:
return
_triggered = true
triggered.emit(other)
2023-10-01 23:39:28 -04:00
_sound.stream = press_sound
_sound.play()
_anim.play('trigger')
_button.material = pressed_material
func _on_anim_finished(name):
if _resetting:
2023-10-02 00:40:13 -04:00
_sound.stop()
_sound.stream = release_sound
_sound.play()
_button.material = released_material
_resetting = false
_triggered = false
if momentary and _triggered:
_anim.play_backwards('trigger')
_resetting = true