|
@@ -5,7 +5,14 @@ extends Path2D
|
|
|
|
|
|
signal reset
|
|
|
|
|
|
-export (Array, PackedScene) var mobs
|
|
|
+export (Array, PackedScene) var mob_list
|
|
|
+
|
|
|
+var _mob_storage: Array
|
|
|
+var _running_mob: Array
|
|
|
+
|
|
|
+
|
|
|
+func _ready():
|
|
|
+ assert(!mob_list.empty())
|
|
|
|
|
|
|
|
|
func spawn():
|
|
@@ -21,23 +28,48 @@ func spawn():
|
|
|
add_child(newMob)
|
|
|
|
|
|
|
|
|
-func _on_MobTimer_timeout():
|
|
|
+func _on_SpawnTimer_timeout():
|
|
|
spawn()
|
|
|
- $MobTimer.start()
|
|
|
+ $SpawnTimer.start()
|
|
|
+
|
|
|
+
|
|
|
+func _on_NewMobTimer_timeout():
|
|
|
+ _add_mob()
|
|
|
+ if _has_remaining_mob_in_storage():
|
|
|
+ $NewMobTimer.start()
|
|
|
|
|
|
|
|
|
func _on_HUD_start_game():
|
|
|
- emit_signal("reset")
|
|
|
+ _reset()
|
|
|
|
|
|
|
|
|
func _on_Main_game_started():
|
|
|
- $MobTimer.start()
|
|
|
+ _add_mob()
|
|
|
+ $SpawnTimer.start()
|
|
|
+ $NewMobTimer.start()
|
|
|
|
|
|
|
|
|
func _on_Main_game_over():
|
|
|
- $MobTimer.stop()
|
|
|
+ $SpawnTimer.stop()
|
|
|
+ $NewMobTimer.stop()
|
|
|
|
|
|
|
|
|
func _pick_a_mob() -> PackedScene:
|
|
|
- mobs.shuffle()
|
|
|
- return mobs.front()
|
|
|
+ assert(!_running_mob.empty())
|
|
|
+ _running_mob.shuffle()
|
|
|
+ return _running_mob.front()
|
|
|
+
|
|
|
+
|
|
|
+func _add_mob():
|
|
|
+ assert(!_mob_storage.empty())
|
|
|
+ _running_mob.append(_mob_storage.pop_front())
|
|
|
+
|
|
|
+
|
|
|
+func _has_remaining_mob_in_storage() -> bool:
|
|
|
+ return !_mob_storage.empty()
|
|
|
+
|
|
|
+
|
|
|
+func _reset():
|
|
|
+ _mob_storage = mob_list.duplicate()
|
|
|
+ _running_mob.clear()
|
|
|
+ emit_signal("reset")
|