GibSpawner.gd 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. class_name GibSpawner
  2. extends Node
  3. @export var visuals: Node = null
  4. @export_enum("Spin", "Drop", "Poof") var gib_type := 0
  5. @export var play_death_sfx := true
  6. const ENTITY_GIB = preload("res://Scenes/Prefabs/Entities/EntityGib.tscn")
  7. signal gib_about_to_spawn
  8. func summon_gib(direction := 1, play_sfx := play_death_sfx, override_gib_type := gib_type) -> void:
  9. gib_about_to_spawn.emit()
  10. if play_sfx:
  11. play_die_sfx()
  12. if override_gib_type == 2:
  13. summon_poof()
  14. return
  15. var node = ENTITY_GIB.instantiate()
  16. visuals.show()
  17. if visuals.has_node("ResourceSetterNew"):
  18. visuals.get_node("ResourceSetterNew").update_on_spawn = false
  19. node.visuals = visuals.duplicate()
  20. node.visuals.set_process(false)
  21. node.global_position = visuals.global_position
  22. node.visuals.position = Vector2.ZERO
  23. node.visuals.offset = Vector2.ZERO
  24. node.gib_type = override_gib_type
  25. node.direction = direction
  26. owner.add_sibling(node)
  27. func play_die_sfx() -> void:
  28. AudioManager.play_sfx("kick", owner.global_position)
  29. const SMOKE_PARTICLE = preload("uid://d08nv4qtfouv1")
  30. func summon_poof() -> void:
  31. var particle = SMOKE_PARTICLE.instantiate()
  32. particle.global_position = visuals.global_position + Vector2(0, 8)
  33. owner.add_sibling(particle)
  34. func stomp_die(player: Player, add_combo := true) -> void:
  35. DiscoLevel.combo_amount += 1
  36. AudioManager.play_sfx("enemy_stomp", owner.global_position)
  37. player.enemy_bounce_off(add_combo)
  38. summon_gib(1, false, 1)
  39. owner.queue_free()