From f0c0c6d12e40ed3afa401f76f8de41816bb163f0 Mon Sep 17 00:00:00 2001 From: Fabien Freling Date: Fri, 22 May 2020 17:24:58 +0200 Subject: [PATCH] do not check for solved during initial shuffle --- src/Taquin.gd | 54 ++++++++++++++++++++++++++++++++----------------- src/Taquin.tscn | 3 +++ 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/Taquin.gd b/src/Taquin.gd index 08618cf..32043aa 100644 --- a/src/Taquin.gd +++ b/src/Taquin.gd @@ -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,7 +252,8 @@ func commit_slide(audio: bool): ensure_validity() reset_slide() - check_solved() + if check_solved: + check_solved() func reset_slide(): current_sliding_piece = null @@ -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,11 +362,9 @@ 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() - pieces.clear() + for r in range(pieces[c].size()): + var piece: Piece = pieces[c][r].queue_free() + pieces.clear() for c in range(columns): var pieces_row: Array = [] @@ -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() diff --git a/src/Taquin.tscn b/src/Taquin.tscn index 39c51ee..4e2e4c2 100644 --- a/src/Taquin.tscn +++ b/src/Taquin.tscn @@ -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 )