funnymemellama/Button.gd

71 lines
1.4 KiB
GDScript

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
var sound: AudioStream = null :
get:
return $AudioStreamPlayer3D.stream
set(value):
$AudioStreamPlayer3D.stream = value
@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)
_sound.play()
_anim.play('trigger')
_button.material = pressed_material
func _on_anim_finished(name):
if _resetting:
_button.material = released_material
_resetting = false
_triggered = false
if momentary and _triggered:
_anim.play_backwards('trigger')
_resetting = true