do not check for solved during initial shuffle
This commit is contained in:
parent
547e00ec09
commit
f0c0c6d12e
|
@ -64,6 +64,7 @@ func compute_padding(piece_size: int) -> Vector2:
|
|||
return p
|
||||
|
||||
func _ready() -> void:
|
||||
print_debug("")
|
||||
$AnimationPlayer/MockPiece.visible = false
|
||||
$Particles2D.emitting = false
|
||||
|
||||
|
@ -71,10 +72,7 @@ func _ready() -> void:
|
|||
$Background.rect_size.y = height
|
||||
|
||||
rng.randomize()
|
||||
# var piece_size: int = compute_piece_size()
|
||||
# padding = compute_padding(piece_size)
|
||||
# print("piece size: ", piece_size)
|
||||
# print("padding: ", padding)
|
||||
|
||||
var pieces_order: Array = []
|
||||
for order in range(1, rows * columns + 1):
|
||||
pieces_order.append(order)
|
||||
|
@ -143,7 +141,7 @@ func _input(event):
|
|||
var current_position = current_sliding_piece.position
|
||||
if current_position.distance_to(current_origin) > current_position.distance_to(current_goal):
|
||||
current_sliding_piece.position = current_goal
|
||||
commit_slide(true)
|
||||
commit_slide(true, true)
|
||||
else:
|
||||
reset_position(current_sliding_piece)
|
||||
reset_slide()
|
||||
|
@ -209,11 +207,11 @@ func sliding_piece_for_direction(direction) -> Piece:
|
|||
|
||||
return piece
|
||||
|
||||
func move_piece(direction, speed: float) -> void:
|
||||
func move_piece(direction, speed: float) -> bool:
|
||||
current_sliding_piece = sliding_piece_for_direction(direction)
|
||||
if current_sliding_piece == null:
|
||||
reset_slide()
|
||||
return
|
||||
return false
|
||||
|
||||
if speed > 0.0:
|
||||
var moving_piece_animation: Animation = $AnimationPlayer.get_animation("MovingPiece")
|
||||
|
@ -233,11 +231,12 @@ func move_piece(direction, speed: float) -> void:
|
|||
moving_piece_animation.track_set_key_value(moving_piece_track_index, 1, missing_piece.position)
|
||||
$AnimationPlayer.play("MovingPiece")
|
||||
else:
|
||||
commit_slide(false)
|
||||
commit_slide(false, false)
|
||||
update()
|
||||
check_solved()
|
||||
|
||||
func commit_slide(audio: bool):
|
||||
return true
|
||||
|
||||
func commit_slide(audio: bool, check_solved: bool):
|
||||
assert(current_sliding_piece != null)
|
||||
assert(current_origin != Vector2.ZERO)
|
||||
|
||||
|
@ -253,6 +252,7 @@ func commit_slide(audio: bool):
|
|||
|
||||
ensure_validity()
|
||||
reset_slide()
|
||||
if check_solved:
|
||||
check_solved()
|
||||
|
||||
func reset_slide():
|
||||
|
@ -270,10 +270,27 @@ func swap_pieces(a: Piece, b: Piece) -> void:
|
|||
pieces[a_index.x][a_index.y] = b
|
||||
|
||||
func shuffle(count: int, speed: float) -> void:
|
||||
print_debug("")
|
||||
var previous_direction: int = Direction.DOWN
|
||||
|
||||
while count > 0:
|
||||
count -= 1
|
||||
var direction = rng.randi_range(Direction.UP, Direction.RIGHT)
|
||||
move_piece(direction, speed)
|
||||
|
||||
# Avoid reversing the previous move
|
||||
if direction == Direction.UP and previous_direction == Direction.DOWN:
|
||||
continue
|
||||
if direction == Direction.DOWN and previous_direction == Direction.UP:
|
||||
continue
|
||||
if direction == Direction.RIGHT and previous_direction == Direction.LEFT:
|
||||
continue
|
||||
if direction == Direction.LEFT and previous_direction == Direction.RIGHT:
|
||||
continue
|
||||
|
||||
# Retry until the move is valid
|
||||
if move_piece(direction, speed):
|
||||
previous_direction = direction
|
||||
count -= 1
|
||||
debug_print_direction(direction)
|
||||
|
||||
func check_solved() -> bool:
|
||||
for c in range(columns):
|
||||
|
@ -337,6 +354,7 @@ func load(saved_state) -> void:
|
|||
init(saved_state["pieces"], saved_state["hidden_piece"])
|
||||
|
||||
func init(pieces_order: Array, hidden_piece: int) -> void:
|
||||
print_debug("")
|
||||
var piece_size: int = compute_piece_size()
|
||||
padding = compute_padding(piece_size)
|
||||
print("piece size: ", piece_size)
|
||||
|
@ -344,10 +362,8 @@ func init(pieces_order: Array, hidden_piece: int) -> void:
|
|||
|
||||
if pieces.size() > 0:
|
||||
for c in range(pieces.size()):
|
||||
for r in range(pieces[0].size()):
|
||||
var piece: Piece = pieces[c][r]
|
||||
$Background.remove_child(piece)
|
||||
piece.queue_free()
|
||||
for r in range(pieces[c].size()):
|
||||
var piece: Piece = pieces[c][r].queue_free()
|
||||
pieces.clear()
|
||||
|
||||
for c in range(columns):
|
||||
|
@ -394,7 +410,7 @@ func _on_Timer_timeout():
|
|||
func _on_AnimationPlayer_animation_finished(anim_name):
|
||||
match anim_name:
|
||||
"MovingPiece":
|
||||
commit_slide(true)
|
||||
commit_slide(true, true)
|
||||
update()
|
||||
check_solved()
|
||||
|
||||
|
|
|
@ -60,6 +60,9 @@ difficulty = 0
|
|||
margin_right = 512.0
|
||||
margin_bottom = 512.0
|
||||
color = Color( 0.12549, 0.235294, 0.337255, 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
anims/MovingPiece = SubResource( 1 )
|
||||
|
|
Loading…
Reference in a new issue