Files
CultManor/game/objects/interactive/lever.gd
T

71 lines
1.4 KiB
GDScript

extends AbstractActivatableObject
signal switching
signal switched
enum State {
TurnedLeft,
TurnedRight,
TurningLeft,
TurningRight,
}
const ANIMATION_BY_STATE : Dictionary[State, String] = {
State.TurnedLeft: "turned_left",
State.TurnedRight: "turned_right",
State.TurningLeft: "turning_left",
State.TurningRight: "turning_right",
}
@export var initial_state: State = State.TurnedLeft
var _current_state : State
@onready var animated_sprite : AnimatedSprite2D = $AnimatedSprite2D
func _ready() -> void:
super._ready()
_current_state = initial_state
_update_animation()
func _activate() -> void:
var set_state := func(state: State) -> void:
_current_state = state
_update_animation()
hover_tip.hide()
switching.emit()
SoundManager.play_sfx_stream(SoundManager.sfx_stream_lever, global_position)
match _current_state:
State.TurnedLeft:
set_state.call(State.TurningRight)
State.TurnedRight:
set_state.call(State.TurningLeft)
func _update_animation() -> void:
var animation := ANIMATION_BY_STATE[_current_state]
animated_sprite.play(animation)
func _on_animation_finished() -> void:
var set_state := func(state: State) -> void:
_current_state = state
_update_animation()
switched.emit()
if _player_in_range:
hover_tip.show()
match _current_state:
State.TurningLeft:
set_state.call(State.TurnedLeft)
State.TurningRight:
set_state.call(State.TurnedRight)