fuzzyworld

godot-shooter / files / items / LevelItemGenerator.gd

LevelItemGenerator.gd

Blame: the commit that last changed each line · file · history

212b7b25 2023-11-08 Pavel Safronov1class_name LevelItemGenerator
2
16938031 2023-11-17 Pavel Safronov3const Utils = preload("res://utils/Utils.gd")
212b7b25 2023-11-08 Pavel Safronov4var 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
7929daa8 2023-11-30 Pavel Safronov19# runs the generator, returns is_done, a boolean
212b7b25 2023-11-08 Pavel Safronov20func 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:
7929daa8 2023-11-30 Pavel Safronov27 return true
212b7b25 2023-11-08 Pavel Safronov28 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
7929daa8 2023-11-30 Pavel Safronov34 var is_done = not should_add
35 return is_done