move pieces instantaneously and without sound at init
This commit is contained in:
parent
6d788465ab
commit
111b2f7125
|
@ -44,6 +44,7 @@ func _on_NewGamePanel_about_to_show():
|
||||||
"hard":
|
"hard":
|
||||||
$Panel/HBoxContainer/Hard.pressed = true
|
$Panel/HBoxContainer/Hard.pressed = true
|
||||||
_:
|
_:
|
||||||
|
assert("Invalid value")
|
||||||
$Panel/HBoxContainer/Normal.pressed = true
|
$Panel/HBoxContainer/Normal.pressed = true
|
||||||
|
|
||||||
$Panel/Start.grab_focus()
|
$Panel/Start.grab_focus()
|
||||||
|
|
|
@ -81,8 +81,7 @@ func _ready() -> void:
|
||||||
var hidden_piece = rows * columns # Last piece is hidden
|
var hidden_piece = rows * columns # Last piece is hidden
|
||||||
|
|
||||||
init(pieces_order, hidden_piece)
|
init(pieces_order, hidden_piece)
|
||||||
|
shuffle(difficulty, 0.0)
|
||||||
shuffle(difficulty)
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
if $AnimationPlayer.is_playing():
|
if $AnimationPlayer.is_playing():
|
||||||
|
@ -101,13 +100,13 @@ func _input(event):
|
||||||
# Handle keyboard input
|
# Handle keyboard input
|
||||||
#
|
#
|
||||||
if event.is_action_pressed("ui_up"):
|
if event.is_action_pressed("ui_up"):
|
||||||
move_piece(Direction.UP)
|
move_piece(Direction.UP, 1.0)
|
||||||
if event.is_action_pressed("ui_down"):
|
if event.is_action_pressed("ui_down"):
|
||||||
move_piece(Direction.DOWN)
|
move_piece(Direction.DOWN, 1.0)
|
||||||
if event.is_action_pressed("ui_left"):
|
if event.is_action_pressed("ui_left"):
|
||||||
move_piece(Direction.LEFT)
|
move_piece(Direction.LEFT, 1.0)
|
||||||
if event.is_action_pressed("ui_right"):
|
if event.is_action_pressed("ui_right"):
|
||||||
move_piece(Direction.RIGHT)
|
move_piece(Direction.RIGHT, 1.0)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Handle touch input
|
# Handle touch input
|
||||||
|
@ -144,7 +143,7 @@ func _input(event):
|
||||||
var current_position = current_sliding_piece.position
|
var current_position = current_sliding_piece.position
|
||||||
if current_position.distance_to(current_origin) > current_position.distance_to(current_goal):
|
if current_position.distance_to(current_origin) > current_position.distance_to(current_goal):
|
||||||
current_sliding_piece.position = current_goal
|
current_sliding_piece.position = current_goal
|
||||||
commit_slide()
|
commit_slide(true)
|
||||||
else:
|
else:
|
||||||
reset_position(current_sliding_piece)
|
reset_position(current_sliding_piece)
|
||||||
reset_slide()
|
reset_slide()
|
||||||
|
@ -210,30 +209,35 @@ func sliding_piece_for_direction(direction) -> Piece:
|
||||||
|
|
||||||
return piece
|
return piece
|
||||||
|
|
||||||
func move_piece(direction) -> void:
|
func move_piece(direction, speed: float) -> void:
|
||||||
current_sliding_piece = sliding_piece_for_direction(direction)
|
current_sliding_piece = sliding_piece_for_direction(direction)
|
||||||
if current_sliding_piece == null:
|
if current_sliding_piece == null:
|
||||||
reset_slide()
|
reset_slide()
|
||||||
return
|
return
|
||||||
|
|
||||||
var moving_piece_animation: Animation = $AnimationPlayer.get_animation("MovingPiece")
|
if speed > 0.0:
|
||||||
|
var moving_piece_animation: Animation = $AnimationPlayer.get_animation("MovingPiece")
|
||||||
|
|
||||||
assert(moving_piece_animation != null)
|
assert(moving_piece_animation != null)
|
||||||
assert(moving_piece_animation.get_track_count() > 0)
|
assert(moving_piece_animation.get_track_count() > 0)
|
||||||
|
|
||||||
var moving_piece_track_index: int = moving_piece_animation.find_track(current_animation_path)
|
var moving_piece_track_index: int = moving_piece_animation.find_track(current_animation_path)
|
||||||
|
|
||||||
assert(moving_piece_track_index != -1)
|
assert(moving_piece_track_index != -1)
|
||||||
|
|
||||||
var new_animation_path: String = str($AnimationPlayer.get_parent().get_path_to(current_sliding_piece), ":position")
|
var new_animation_path: String = str($AnimationPlayer.get_parent().get_path_to(current_sliding_piece), ":position")
|
||||||
moving_piece_animation.track_set_path(moving_piece_track_index, new_animation_path)
|
moving_piece_animation.track_set_path(moving_piece_track_index, new_animation_path)
|
||||||
current_animation_path = new_animation_path
|
current_animation_path = new_animation_path
|
||||||
|
|
||||||
moving_piece_animation.track_set_key_value(moving_piece_track_index, 0, current_sliding_piece.position)
|
moving_piece_animation.track_set_key_value(moving_piece_track_index, 0, current_sliding_piece.position)
|
||||||
moving_piece_animation.track_set_key_value(moving_piece_track_index, 1, missing_piece.position)
|
moving_piece_animation.track_set_key_value(moving_piece_track_index, 1, missing_piece.position)
|
||||||
$AnimationPlayer.play("MovingPiece")
|
$AnimationPlayer.play("MovingPiece")
|
||||||
|
else:
|
||||||
|
commit_slide(false)
|
||||||
|
update()
|
||||||
|
check_solved()
|
||||||
|
|
||||||
func commit_slide():
|
func commit_slide(audio: bool):
|
||||||
assert(current_sliding_piece != null)
|
assert(current_sliding_piece != null)
|
||||||
assert(current_origin != Vector2.ZERO)
|
assert(current_origin != Vector2.ZERO)
|
||||||
|
|
||||||
|
@ -244,7 +248,8 @@ func commit_slide():
|
||||||
swap_pieces(missing_piece, current_sliding_piece)
|
swap_pieces(missing_piece, current_sliding_piece)
|
||||||
reset_position(missing_piece)
|
reset_position(missing_piece)
|
||||||
|
|
||||||
$AudioStreamPlayer.play()
|
if audio:
|
||||||
|
$AudioStreamPlayer.play()
|
||||||
|
|
||||||
ensure_validity()
|
ensure_validity()
|
||||||
reset_slide()
|
reset_slide()
|
||||||
|
@ -264,11 +269,11 @@ func swap_pieces(a: Piece, b: Piece) -> void:
|
||||||
b.taquin_index = a_index
|
b.taquin_index = a_index
|
||||||
pieces[a_index.x][a_index.y] = b
|
pieces[a_index.x][a_index.y] = b
|
||||||
|
|
||||||
func shuffle(count: int) -> void:
|
func shuffle(count: int, speed: float) -> void:
|
||||||
while count > 0:
|
while count > 0:
|
||||||
count -= 1
|
count -= 1
|
||||||
var direction = rng.randi_range(Direction.UP, Direction.RIGHT)
|
var direction = rng.randi_range(Direction.UP, Direction.RIGHT)
|
||||||
move_piece(direction)
|
move_piece(direction, speed)
|
||||||
|
|
||||||
func check_solved() -> bool:
|
func check_solved() -> bool:
|
||||||
for c in range(columns):
|
for c in range(columns):
|
||||||
|
@ -380,8 +385,6 @@ func init(pieces_order: Array, hidden_piece: int) -> void:
|
||||||
|
|
||||||
pieces.append(pieces_row)
|
pieces.append(pieces_row)
|
||||||
|
|
||||||
shuffle(difficulty)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Signals
|
# Signals
|
||||||
#
|
#
|
||||||
|
@ -391,7 +394,7 @@ func _on_Timer_timeout():
|
||||||
func _on_AnimationPlayer_animation_finished(anim_name):
|
func _on_AnimationPlayer_animation_finished(anim_name):
|
||||||
match anim_name:
|
match anim_name:
|
||||||
"MovingPiece":
|
"MovingPiece":
|
||||||
commit_slide()
|
commit_slide(true)
|
||||||
update()
|
update()
|
||||||
check_solved()
|
check_solved()
|
||||||
|
|
||||||
|
@ -411,6 +414,7 @@ func _on_NewGamePanel_start_triggered(preferences):
|
||||||
columns = 5
|
columns = 5
|
||||||
difficulty = 30
|
difficulty = 30
|
||||||
_:
|
_:
|
||||||
|
assert("Invalid value")
|
||||||
rows = 4
|
rows = 4
|
||||||
columns = 4
|
columns = 4
|
||||||
difficulty = 10
|
difficulty = 10
|
||||||
|
@ -420,4 +424,4 @@ func _on_NewGamePanel_start_triggered(preferences):
|
||||||
pieces_order.append(order)
|
pieces_order.append(order)
|
||||||
var hidden_piece = rows * columns # Last piece is hidden
|
var hidden_piece = rows * columns # Last piece is hidden
|
||||||
init(pieces_order, hidden_piece)
|
init(pieces_order, hidden_piece)
|
||||||
shuffle(difficulty)
|
shuffle(difficulty, 0.0)
|
||||||
|
|
Loading…
Reference in a new issue