wait for animation to finish to indicate victory
This commit is contained in:
parent
a4f612f33b
commit
4357e8b66d
1 changed files with 17 additions and 7 deletions
24
main.gd
24
main.gd
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue