Bee State Machine
This commit is contained in:
parent
20bcab01b1
commit
752131c955
16 changed files with 467 additions and 13 deletions
29
scenes/scripts/bee_spawner.gd
Normal file
29
scenes/scripts/bee_spawner.gd
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
extends Node2D
|
||||
class_name BeeSpawner
|
||||
|
||||
var bee = preload("res://entities/Bee.tscn")
|
||||
|
||||
@onready var beehive = get_node("../Beehive")
|
||||
|
||||
var bee_count = 0
|
||||
var max_bees = 10
|
||||
var spawn_interval = 3
|
||||
var spawn_timer = 0.0
|
||||
|
||||
func _ready():
|
||||
Log.pr("Bee Spawner ready")
|
||||
|
||||
func spawn_bee():
|
||||
var bee_instance = bee.instantiate()
|
||||
add_child(bee_instance)
|
||||
bee_instance.position = beehive.position
|
||||
# bee_instance.connect("bee_died", self, "bee_died")
|
||||
|
||||
func _process(delta):
|
||||
spawn_timer += delta
|
||||
|
||||
if spawn_timer > spawn_interval and bee_count < max_bees:
|
||||
spawn_bee()
|
||||
spawn_timer = 0.0
|
||||
bee_count += 1
|
||||
Log.pr("Bee count: " + str(bee_count))
|
||||
|
|
@ -1,8 +1,11 @@
|
|||
extends Node2D
|
||||
class_name DroneManager
|
||||
|
||||
var spawning_drone : bool = false
|
||||
var spawning_type : String = ""
|
||||
|
||||
var director_drones : Array = [] # List of all director drones in the world
|
||||
|
||||
@onready var drone_controls = %DroneControls
|
||||
@onready var spawned_drones_container = get_node("SpawnedDrones")
|
||||
@onready var cursor = preload("res://resources/cursors/launch_drone.png")
|
||||
|
|
@ -33,6 +36,7 @@ func spawn_drone(drone_type : String) -> void:
|
|||
# Create a new instance of the drone
|
||||
if drone_type == "director":
|
||||
new_drone = director_drone.instantiate()
|
||||
# new_drone.visit_order = spawned_drones_container.get_child_count()
|
||||
elif drone_type == "dancer":
|
||||
new_drone = dancer_drone.instantiate()
|
||||
elif drone_type == "distractor":
|
||||
|
|
@ -45,6 +49,12 @@ func spawn_drone(drone_type : String) -> void:
|
|||
spawned_drones_container.add_child(new_drone)
|
||||
new_drone.position = get_viewport().get_mouse_position()
|
||||
|
||||
if drone_type == "director":
|
||||
# Set this drones visit order to the next in line
|
||||
new_drone.visit_order = director_drones.size() + 1
|
||||
# Update the director drone list
|
||||
update_director_drone_list()
|
||||
|
||||
func place_drone(drone_type : String) -> void:
|
||||
if !spawning_drone:
|
||||
Input.set_custom_mouse_cursor(cursor, Input.CURSOR_ARROW, Vector2(32, 32))
|
||||
|
|
@ -53,8 +63,6 @@ func place_drone(drone_type : String) -> void:
|
|||
spawning_drone = true
|
||||
spawning_type = drone_type
|
||||
|
||||
|
||||
|
||||
func cancel_spawning() -> void:
|
||||
Input.set_custom_mouse_cursor(null)
|
||||
drone_controls.reset_button_focus()
|
||||
|
|
@ -73,3 +81,31 @@ func _on_spawn_distractor_pressed() -> void:
|
|||
|
||||
func _on_spawn_dancer_pressed() -> void:
|
||||
place_drone("dancer")
|
||||
|
||||
func update_director_drone_list():
|
||||
director_drones.clear()
|
||||
for drone in spawned_drones_container.get_children():
|
||||
if drone is DirectorDrone:
|
||||
director_drones.append(drone)
|
||||
|
||||
Log.pr(director_drones.size())
|
||||
|
||||
func get_next_director(current_director_number : int) -> DirectorDrone:
|
||||
for drone in director_drones:
|
||||
if drone.visit_order == current_director_number + 1:
|
||||
return drone
|
||||
return null
|
||||
|
||||
func get_previous_director(current_director_number : int) -> DirectorDrone:
|
||||
for drone in director_drones:
|
||||
if drone.visit_order == current_director_number - 1:
|
||||
return drone
|
||||
return null
|
||||
|
||||
## For now this just returns the first collector drone it finds
|
||||
## This will need to be updated to return the closest collector drone potentially?
|
||||
func get_collector():
|
||||
for drone in spawned_drones_container.get_children():
|
||||
if drone is CollectorDrone:
|
||||
return drone
|
||||
return null
|
||||
Loading…
Add table
Add a link
Reference in a new issue