mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 15:38:14 +00:00
66 lines
1.7 KiB
GDScript
66 lines
1.7 KiB
GDScript
class_name Thwomp
|
|
extends Enemy
|
|
|
|
enum States{IDLE, FALLING, LANDED, RISING}
|
|
|
|
var current_state := States.IDLE
|
|
|
|
@onready var starting_y := global_position.y
|
|
|
|
var can_fall := true
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
velocity.x = move_toward(velocity.x, 0, 20)
|
|
match current_state:
|
|
States.IDLE:
|
|
handle_idle(delta)
|
|
States.FALLING:
|
|
handle_falling(delta)
|
|
States.RISING:
|
|
handle_rising(delta)
|
|
_:
|
|
pass
|
|
move_and_slide()
|
|
|
|
func handle_idle(delta: float) -> void:
|
|
var target_player = get_tree().get_first_node_in_group("Players")
|
|
var x_distance = abs(target_player.global_position.x - global_position.x)
|
|
velocity = Vector2.ZERO
|
|
if x_distance < 24 and can_fall:
|
|
can_fall = false
|
|
current_state = States.FALLING
|
|
$TrackJoint.detach()
|
|
elif x_distance < 48:
|
|
%Sprite.play("Look")
|
|
else:
|
|
%Sprite.play("Idle")
|
|
|
|
func handle_falling(delta: float) -> void:
|
|
%Sprite.play("Fall")
|
|
velocity.y += (15 / delta) * delta
|
|
velocity.y = clamp(velocity.y, -INF, Global.entity_max_fall_speed)
|
|
handle_block_breaking()
|
|
if is_on_floor():
|
|
land()
|
|
|
|
func handle_block_breaking() -> void:
|
|
for i in %BlockBreakingHitbox.get_overlapping_bodies():
|
|
if i is Block and i.get("destructable") == true:
|
|
i.destroy()
|
|
|
|
func land() -> void:
|
|
AudioManager.play_sfx("cannon", global_position)
|
|
current_state = States.LANDED
|
|
await get_tree().create_timer(1, false).timeout
|
|
current_state = States.RISING
|
|
|
|
func handle_rising(delta: float) -> void:
|
|
velocity.y = -50
|
|
%Sprite.play("Idle")
|
|
if global_position.y <= starting_y:
|
|
global_position.y = starting_y
|
|
if global_position.y <= starting_y or is_on_ceiling():
|
|
current_state = States.IDLE
|
|
await get_tree().create_timer(0.5, false).timeout
|
|
can_fall = true
|