Files
Super-Mario-Bros.-Remastere…/Scripts/Classes/Entities/Enemies/Podoboo.gd
John Cooper McDonald 8474bc3c19 Properly implement the Hammer item (#599)
* Properly implement the Hammer item

* Update Boo.gd

* Update LongFirebar.tscn
2025-10-15 18:14:19 +01:00

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()