initial shit
This commit is contained in:
59
Objects/Scripts/IButton.gd
Normal file
59
Objects/Scripts/IButton.gd
Normal file
@@ -0,0 +1,59 @@
|
||||
extends Node
|
||||
|
||||
signal buttonPressed
|
||||
signal buttonReleased
|
||||
signal buttonUpdated
|
||||
|
||||
@export var isBeingPressed = false
|
||||
@export var text : String
|
||||
@export var isLoopingUpdate : bool = false
|
||||
@export var color : Color
|
||||
|
||||
# FIX: Do not instantly assign an empty .new() if it might have been loaded
|
||||
var material : StandardMaterial3D
|
||||
|
||||
func _ready() -> void:
|
||||
# Reconstruct or override the material instance cleanly on load
|
||||
material = StandardMaterial3D.new()
|
||||
material.albedo_color = color
|
||||
|
||||
ButtonAnimation.loop_mode = Animation.LOOP_NONE
|
||||
$StaticBody3D/Label3D.text = text
|
||||
$StaticBody3D/MeshInstance3D.material_override = material
|
||||
|
||||
# Keep animation visually synced with the saved press state
|
||||
if isBeingPressed:
|
||||
$AnimationPlayer.play("interact")
|
||||
$AnimationPlayer.advance(ButtonAnimation.length)
|
||||
else:
|
||||
$AnimationPlayer.play_backwards("interact")
|
||||
|
||||
@onready var ButtonAnimation = $AnimationPlayer.get_animation("interact")
|
||||
|
||||
func _press():
|
||||
if not isBeingPressed:
|
||||
emit_signal("buttonPressed")
|
||||
isBeingPressed = true
|
||||
$AnimationPlayer.play("interact")
|
||||
$Sound.pitch_scale = 1.5
|
||||
$Sound.play()
|
||||
emit_signal("buttonUpdated")
|
||||
|
||||
func _release():
|
||||
if isBeingPressed:
|
||||
emit_signal("buttonReleased")
|
||||
isBeingPressed = false
|
||||
$AnimationPlayer.play_backwards("interact")
|
||||
$Sound.pitch_scale = 1.3
|
||||
$Sound.play()
|
||||
emit_signal("buttonUpdated")
|
||||
|
||||
func _interact_press(is_alt_click: bool = false) -> void:
|
||||
_press()
|
||||
|
||||
func _interact_release() -> void:
|
||||
_release()
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if isLoopingUpdate:
|
||||
emit_signal("buttonUpdated")
|
||||
Reference in New Issue
Block a user