mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 15:38:14 +00:00
61 lines
1.4 KiB
GDScript
61 lines
1.4 KiB
GDScript
extends Node2D
|
|
|
|
var velocity := 5.0
|
|
|
|
var play_sfx := false
|
|
|
|
@onready var starting_y := global_position.y
|
|
@export_range(0, 3) var jump_delay := 1
|
|
var can_jump := true
|
|
|
|
signal killed
|
|
|
|
const BASE_LINE := 48
|
|
|
|
func _ready() -> void:
|
|
if Global.current_game_mode != Global.GameMode.LEVEL_EDITOR and global_position.y > -32:
|
|
Global.log_warning("Podoboo is too low! Forgot to update!")
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
velocity += (5 / delta) * delta
|
|
velocity = clamp(velocity, -INF, 280)
|
|
global_position.y += velocity * delta
|
|
global_position.y = clamp(global_position.y, -INF, BASE_LINE)
|
|
if global_position.y >= BASE_LINE and can_jump:
|
|
can_jump = false
|
|
do_jump()
|
|
|
|
$Sprite.flip_v = velocity > 0
|
|
|
|
func do_jump() -> void:
|
|
if jump_delay > 0:
|
|
$Timer.start(jump_delay)
|
|
await $Timer.timeout
|
|
if play_sfx:
|
|
AudioManager.play_sfx("podoboo", global_position)
|
|
velocity = calculate_jump_height()
|
|
print(velocity)
|
|
await get_tree().physics_frame
|
|
can_jump = true
|
|
|
|
func damage_player(player: Player) -> void:
|
|
player.damage()
|
|
|
|
func calculate_jump_height() -> float:
|
|
global_position.y = BASE_LINE
|
|
return -sqrt(2 * 5 * abs(starting_y - (global_position.y))) * 8
|
|
|
|
const SMOKE_PARTICLE = preload("uid://d08nv4qtfouv1")
|
|
|
|
func flag_die() -> void:
|
|
die()
|
|
|
|
func die() -> void:
|
|
killed.emit()
|
|
queue_free()
|
|
|
|
func die_from_hammer() -> void:
|
|
AudioManager.play_sfx("hammer_hit", global_position)
|
|
killed.emit()
|
|
queue_free()
|