EntityGenerator.gd 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. class_name EntityGenerator
  2. extends Node2D
  3. var spawn_meter := 0.0
  4. @export var threshold := 2.0
  5. var active := false
  6. @export_enum("Target Player", "Random Height") var y_pos := 0
  7. @export_enum("Right", "Bottom") var direction := 0
  8. @export var entity_scene: PackedScene = null
  9. func _physics_process(delta: float) -> void:
  10. if active:
  11. spawn_meter += delta
  12. if spawn_meter >= threshold:
  13. spawn_entity()
  14. spawn_meter = randf_range(-2, 0)
  15. func activate() -> void:
  16. if not active:
  17. active = true
  18. spawn_meter = 0
  19. spawn_entity()
  20. func deactivate_all_generators() -> void:
  21. for i in get_tree().get_nodes_in_group("EntityGenerators"):
  22. i.active = false
  23. i.deactivate()
  24. func deactivate() -> void:
  25. pass
  26. func spawn_entity() -> void:
  27. if entity_scene == null: return
  28. var node = entity_scene.instantiate()
  29. if direction == 1:
  30. node.global_position.x = get_viewport().get_camera_2d().get_screen_center_position().x + [ -32 ,-64, -96, -128].pick_random()
  31. node.global_position.y = 48
  32. else:
  33. if y_pos == 0:
  34. node.global_position.y = get_tree().get_first_node_in_group("Players").global_position.y + randi_range(-4, 4)
  35. else:
  36. node.global_position.y = randf_range(-56, -120)
  37. node.global_position.x = get_viewport().get_camera_2d().get_screen_center_position().x + ((get_viewport().get_visible_rect().size.x / 2) + 4)
  38. add_sibling(node)