mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 15:38:14 +00:00
72 lines
2.3 KiB
GDScript
72 lines
2.3 KiB
GDScript
extends Node2D
|
|
|
|
var moving := false
|
|
|
|
@export var path: PathFollow2D = null
|
|
@export var time_needed := [60, 45, 30]
|
|
|
|
const COLOURS := ["White", "Green", "Red", "Black", "Gold"]
|
|
|
|
var last_position := global_position
|
|
var tween: Tween = null
|
|
|
|
@export var force_colour := -1
|
|
|
|
func play_laugh_animation() -> void:
|
|
if get_tree().get_nodes_in_group("BooSwitchBlocks").is_empty() == false:
|
|
$Warning.show()
|
|
$Sprite.play("Laugh")
|
|
await get_tree().create_timer(1, false).timeout
|
|
$Warning.hide()
|
|
if moving:
|
|
$Sprite.play("Idle")
|
|
|
|
func _ready() -> void:
|
|
if force_colour != -1:
|
|
BooRaceHandler.boo_colour = force_colour
|
|
$Sprite.play("Lose")
|
|
$OffScreenIcon.frame = BooRaceHandler.boo_colour
|
|
$GoldParticles.visible = BooRaceHandler.boo_colour == 4
|
|
get_tree().get_first_node_in_group("Players").dead.connect(func(): $Sprite.play("Win"))
|
|
|
|
func _process(_delta: float) -> void:
|
|
if Global.current_game_mode == Global.GameMode.BOO_RACE:
|
|
handle_off_screen_icon()
|
|
|
|
func handle_off_screen_icon() -> void:
|
|
$OffScreenIcon.visible = $Sprite/VisibleOnScreenNotifier2D.is_on_screen() == false and moving
|
|
var sprite_position = $Sprite.global_position
|
|
var screen_center = get_viewport().get_camera_2d().get_screen_center_position()
|
|
var screen_size = get_viewport().get_visible_rect().size
|
|
sprite_position.x = clamp(sprite_position.x, (screen_center.x - (screen_size.x / 2)) + 8, (screen_center.x + (screen_size.x / 2)) - 8)
|
|
sprite_position.y = clamp(sprite_position.y, (screen_center.y - (screen_size.y / 2)) + 8, (screen_center.y + (screen_size.y / 2)) - 8)
|
|
$OffScreenIcon.global_position = sprite_position
|
|
if global_position.x > get_tree().get_first_node_in_group("Players").global_position.x and path.progress_ratio >= 0.8:
|
|
$OffScreenIcon/Animation.play("CloseFlash")
|
|
$Sprite.play("Win")
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
var dir = sign(global_position.x - last_position.x)
|
|
if moving and dir != 0:
|
|
$Sprite.scale.x = dir
|
|
last_position = global_position
|
|
|
|
func flag_die() -> void:
|
|
tween.kill()
|
|
$Sprite.play("Lose")
|
|
moving = false
|
|
|
|
func move_tween() -> void:
|
|
if path == null:
|
|
return
|
|
moving = true
|
|
$Sprite.play("Idle")
|
|
tween = create_tween()
|
|
tween.tween_property(path, "progress_ratio", 1, time_needed[BooRaceHandler.boo_colour])
|
|
await tween.finished
|
|
boo_win()
|
|
|
|
func boo_win() -> void:
|
|
$Sprite.play("Win")
|
|
get_tree().call_group("Players", "time_up")
|