71 lines
1.4 KiB
GDScript
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)
|