73 lines
1.6 KiB
GDScript
73 lines
1.6 KiB
GDScript
extends Control
|
|
|
|
@export var freeze := false
|
|
@export var gear_x_delta := [0, -18, -28, -40, -53, -70]
|
|
@export var actived_gear := 0:
|
|
set(val):
|
|
actived_gear = val
|
|
activate_gear()
|
|
@onready var key = $Key
|
|
|
|
var random_degrees := [0.0, 0.0, 0.0, 0.0, 0.0]
|
|
var key_origin_x := 0.0
|
|
var tween_key
|
|
|
|
|
|
func _ready() -> void:
|
|
key_origin_x = key.position.x
|
|
# randomize the initial rotation of the gears
|
|
for i in range(5):
|
|
random_degrees[i] = snappedi(randf_range(0, 360), 10)
|
|
var gear = get_node("Pivot/" + str(i)) as Area2D
|
|
gear.area_entered.connect(_on_gear_touched)
|
|
$"Pivot/5".area_entered.connect(_on_success)
|
|
_reset_all()
|
|
|
|
|
|
func _on_gear_touched(_area):
|
|
# print("Gear touched!")
|
|
if not freeze:
|
|
_reset_all()
|
|
|
|
|
|
func _on_success(_area):
|
|
freeze = true
|
|
print("Success!")
|
|
$SfxOpen.play()
|
|
#TODO
|
|
|
|
|
|
func _reset_all():
|
|
key.position.x = key_origin_x
|
|
for i in range(5):
|
|
var gear = get_node("Pivot/" + str(i))
|
|
gear.init_rotation(random_degrees[i])
|
|
actived_gear = 0
|
|
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if event.is_action("cancel"):
|
|
# TODO: go back to the previous scene
|
|
print("Cancel action triggered!")
|
|
elif event.is_action("left"):
|
|
if not freeze:
|
|
move_key()
|
|
elif event.is_action("right"):
|
|
if not freeze:
|
|
move_key(-1)
|
|
|
|
|
|
func activate_gear() -> void:
|
|
for i in range(5):
|
|
var gear = get_node("Pivot/" + str(i))
|
|
gear.active = i == actived_gear
|
|
|
|
|
|
func move_key(direction := 1):
|
|
if tween_key and tween_key.is_running():
|
|
return
|
|
actived_gear = clampi(actived_gear + direction, 0, 5)
|
|
$SfxKey.play()
|
|
tween_key = create_tween()
|
|
tween_key.tween_property(key, "position:x", key_origin_x + gear_x_delta[actived_gear], 0.5)
|