sokoban
Diffstat (limited to 'Box.gd')
| -rw-r--r-- | Box.gd | 65 |
1 files changed, 0 insertions, 65 deletions
@@ -1,65 +0,0 @@ -extends Node2D - -var main -var target_count = 0 -var game_over = false - -signal target_updated -signal game_over_detected - - -func push(offset: Vector2) -> bool: - $RayCast.cast_to = offset - $RayCast.force_raycast_update() - - if $RayCast.is_colliding(): - return false - - $Tween.interpolate_property( - self, - "position", - self.position, - self.position + offset, - 0.35, - Tween.TRANS_LINEAR, - Tween.EASE_IN_OUT - ) - $Tween.start() - SoundFx.play("motion_box", -17, rand_range(.5, 1)) - return true - - -func _is_stuck_in_a_corner() -> bool: - var left_or_right_blocked = ( - $WallChecks/LR/Left.is_colliding() - or $WallChecks/LR/Right.is_colliding() - ) - var up_or_down_blocked = $WallChecks/DU/Up.is_colliding() or $WallChecks/DU/Down.is_colliding() - - return left_or_right_blocked and up_or_down_blocked - - -func entered_target(_target): - target_count += 1 - _update_check_mark() - emit_signal("target_updated") - - -func left_target(_target): - target_count -= 1 - _update_check_mark() - emit_signal("target_updated") - - -func _update_check_mark(): - $CheckSprite.visible = target_count > 0 - - -func check_over(): - yield(get_tree().create_timer(0.2), "timeout") - if target_count == 0 and not main.game_over and _is_stuck_in_a_corner(): - emit_signal("game_over_detected") - - -func _on_Tween_tween_all_completed(): - check_over() |