Files
Super-Mario-Bros.-Remastere…/Scripts/Classes/Components/GibSpawner.gd
2025-09-13 16:30:32 +01:00

48 lines
1.4 KiB
GDScript

class_name GibSpawner
extends Node
@export var visuals: Node = null
@export_enum("Spin", "Drop", "Poof") var gib_type := 0
@export var play_death_sfx := true
const ENTITY_GIB = preload("res://Scenes/Prefabs/Entities/EntityGib.tscn")
signal gib_about_to_spawn
func summon_gib(direction := 1, play_sfx := play_death_sfx, override_gib_type := gib_type) -> void:
gib_about_to_spawn.emit()
if play_sfx:
play_die_sfx()
if override_gib_type == 2:
summon_poof()
return
var node = ENTITY_GIB.instantiate()
visuals.show()
if visuals.has_node("ResourceSetterNew"):
visuals.get_node("ResourceSetterNew").update_on_spawn = false
node.visuals = visuals.duplicate()
node.visuals.set_process(false)
node.global_position = visuals.global_position
node.visuals.position = Vector2.ZERO
node.visuals.offset = Vector2.ZERO
node.gib_type = override_gib_type
node.direction = direction
owner.add_sibling(node)
func play_die_sfx() -> void:
AudioManager.play_sfx("kick", owner.global_position)
const SMOKE_PARTICLE = preload("uid://d08nv4qtfouv1")
func summon_poof() -> void:
var particle = SMOKE_PARTICLE.instantiate()
particle.global_position = visuals.global_position + Vector2(0, 8)
owner.add_sibling(particle)
func stomp_die(player: Player, add_combo := true) -> void:
DiscoLevel.combo_amount += 1
AudioManager.play_sfx("enemy_stomp", owner.global_position)
player.enemy_bounce_off(add_combo)
summon_gib(1, false, 1)
owner.queue_free()