wait for animation to finish to indicate victory

This commit is contained in:
mehbark 2025-05-30 23:36:34 -04:00
parent a4f612f33b
commit 4357e8b66d

24
main.gd
View file

@ -6,6 +6,7 @@ extends Node3D
# we lose some sokobanness, but is that a bad thing?
@onready var camera: Camera3D = $Camera
@onready var camera_start_y := camera.position.y
@onready var rolltime_indicator: Sprite2D = $RolltimeIndicator
@onready var victory_indicator: Sprite2D = $VictoryIndicator
@ -16,11 +17,13 @@ var board: Board
var player: Piece
var level_num := -1
# TODO: save progress
@export var test := true
var levels: Array[PackedScene] = [
preload("res://level/test_nightmare_mini.tscn"),
preload("res://level/player_barrier_01.tscn"),
preload("res://level/level_00.tscn"),
preload("res://level/level_01.tscn"),
preload("res://level/diagonal_bounce_00.tscn"),
]
var time := 0
@ -35,6 +38,8 @@ var advancing := false
@export_range(0, 1) var slowmo_speed := 0.2
func _ready() -> void:
if test:
levels.reverse()
advance_level()
func _process(delta: float) -> void:
@ -109,6 +114,11 @@ func restart():
# scratch that i like that, don't clear the history
# you can like replay your steps up to a point
func finish_tween():
if last_sun_tween:
last_sun_tween.custom_step(413)
last_sun_tween.kill()
var last_sun_tween: Tween = null
# time advancing, basically
func board_step():
@ -116,9 +126,7 @@ func board_step():
hist.add_do_method(board.do_step)
hist.add_do_property(self, "time", time+1)
hist.add_do_method(func():
if last_sun_tween:
last_sun_tween.custom_step(413)
last_sun_tween.kill()
finish_tween()
var tween := get_tree().create_tween()
tween.tween_property($Sun, "rotation_degrees:y", -15*time, anim_time)
@ -128,9 +136,7 @@ func board_step():
)
hist.add_undo_property(self, "time", time)
hist.add_undo_method(func():
if last_sun_tween:
last_sun_tween.custom_step(413)
last_sun_tween.kill()
finish_tween()
var tween := get_tree().create_tween()
tween.tween_property($Sun, "rotation_degrees:y", -15*time, 0.1)
last_sun_tween = tween
@ -151,6 +157,7 @@ func step(move: Vector2i):
advance_level()
return
finish_tween()
board.finish_tween()
var pos := player.lpos
var ball := board.find_piece_at(pos + move, func(p): return p.type == Piece.Type.Ball)
@ -186,10 +193,13 @@ func advance_level():
advancing = true
if level_num >= 0:
print("level won")
if last_sun_tween and last_sun_tween.is_running():
await last_sun_tween.finished
var tween := get_tree().create_tween()
tween.tween_property(victory_indicator, "modulate:a", 1, 0.1).set_delay(0.3)
tween.tween_callback(func(): victory_indicator.modulate.a = 0).set_delay(0.9)
await tween.finished
camera.position.y = camera_start_y
advancing = false
$Sun.rotation.y = 0
time = 0