fuzzyworld

godot-shooter / asteroids / files / items / LevelItemGenerator.gd

Branch asteroids · default branch · all branches

LevelItemGenerator.gd

1002 B · history · blame

1class_name LevelItemGenerator
2
3const Utils = preload("res://utils/Utils.gd")
4var generated_count: int = 0
5var simultaneous_count: int = 1
6
7var item_count: int
8var creator_name: String
9var instance_object: Object
10var group_name: String
11
12func _init(count, creator, instance, group, sim_count = 1) -> void:
13 item_count = count
14 creator_name = creator
15 group_name = group
16 instance_object = instance
17 simultaneous_count = sim_count
18
19# runs the generator, returns is_done, a boolean
20func run(node: Node) -> bool:
21 var items = node.get_tree().get_nodes_in_group(group_name)
22 var generated_enough = generated_count == item_count
23 var finished = generated_enough && items.size() == 0
24 if finished:
25 return true
26 if generated_enough:
27 return true
28 var should_add = items.size() < simultaneous_count
29 if should_add:
30 var item: Node = funcref(instance_object, creator_name).call_func()
31 item.add_to_group(group_name)
32 node.add_child(item)
33 generated_count += 1
34 var is_done = not should_add
35 return is_done