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)