diff --git a/.gitignore b/.gitignore index 4709183..3294fbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Godot 4+ specific ignores .godot/ +.vscode/ diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 68fc1a7..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "godotTools.editorPath.godot4": "c:\\Dev\\Godot\\Godot_v4.2.2-stable_win64.exe" -} \ No newline at end of file diff --git a/entities/Bee.tscn b/entities/Bee.tscn new file mode 100644 index 0000000..1d01258 --- /dev/null +++ b/entities/Bee.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://deek6uv574xas"] + +[node name="Bee" type="Node2D"] diff --git a/entities/DirectorDrone.tscn b/entities/DirectorDrone.tscn new file mode 100644 index 0000000..340ab9d --- /dev/null +++ b/entities/DirectorDrone.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://c44o1ygkb5861"] + +[node name="DirectorDrone" type="Node2D"] diff --git a/project.godot b/project.godot index d05045b..9d814a3 100644 --- a/project.godot +++ b/project.godot @@ -15,6 +15,12 @@ run/main_scene="res://scenes/test_level.tscn" config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://icon.svg" +[display] + +window/size/viewport_width=1280 +window/size/viewport_height=720 +window/vsync/vsync_mode=0 + [editor_plugins] enabled=PackedStringArray("res://addons/log/plugin.cfg") diff --git a/scenes/scripts/drone_controls.gd b/scenes/scripts/drone_controls.gd new file mode 100644 index 0000000..37cc0be --- /dev/null +++ b/scenes/scripts/drone_controls.gd @@ -0,0 +1,30 @@ +extends HBoxContainer + +func disable_buttons(): + ## Get all children buttons + var buttons = get_children() + + ## Disable all buttons + for button in buttons: + button.disabled = true + + visible = false + +func enable_buttons(): + ## Get all children buttons + var buttons = get_children() + + ## Enable all buttons + for button in buttons: + button.disabled = false + + visible = true + +func reset_button_focus(): + ## Get all children buttons + var buttons = get_children() + + ## Reset focus on all buttons + for button in buttons: + button.release_focus() + \ No newline at end of file diff --git a/scenes/scripts/drone_manager.gd b/scenes/scripts/drone_manager.gd new file mode 100644 index 0000000..ab2ce90 --- /dev/null +++ b/scenes/scripts/drone_manager.gd @@ -0,0 +1,47 @@ +extends Node2D + +var spawning_drone : bool = false +var spawning_type : String = "" + +@onready var drone_controls = %DroneControls + +func _ready() -> void: + Log.pr("Drone Manager Ready...") + +## Function to detect right click event +func _input(event) -> void: + if spawning_drone: + if (event is InputEventMouseButton && event.button_index == MOUSE_BUTTON_RIGHT && event.pressed): + Log.pr("Cancelling placement of drone") + cancel_spawning() + if (event is InputEventMouseButton && event.button_index == MOUSE_BUTTON_LEFT && event.pressed): + spawn_drone(spawning_type) + cancel_spawning() + +func spawn_drone(drone_type : String) -> void: + Log.pr("This function will put a " + drone_type + " drone in the world") + +func place_drone(drone_type : String) -> void: + if !spawning_drone: + drone_controls.disable_buttons() + Log.pr("Placing " + drone_type + "...") + spawning_drone = true + spawning_type = drone_type + +func cancel_spawning() -> void: + drone_controls.reset_button_focus() + drone_controls.enable_buttons() + spawning_drone = false + spawning_type = "" + +func _on_spawn_director_pressed() -> void: + place_drone("director") + +func _on_spawn_collector_pressed() -> void: + place_drone("collector") + +func _on_spawn_distractor_pressed() -> void: + place_drone("distractor") + +func _on_spawn_dancer_pressed() -> void: + place_drone("dancer") diff --git a/scenes/test_level.tscn b/scenes/test_level.tscn index cb812dc..3502a1f 100644 --- a/scenes/test_level.tscn +++ b/scenes/test_level.tscn @@ -1,6 +1,92 @@ -[gd_scene load_steps=2 format=3 uid="uid://mk5n0hrwk4yi"] +[gd_scene load_steps=4 format=3 uid="uid://mk5n0hrwk4yi"] [ext_resource type="Script" path="res://scenes/scripts/test_level.gd" id="1_lgt1m"] +[ext_resource type="Script" path="res://scenes/scripts/drone_manager.gd" id="2_474nc"] +[ext_resource type="Script" path="res://scenes/scripts/drone_controls.gd" id="3_rqkyv"] [node name="TestLevel" type="Node2D"] script = ExtResource("1_lgt1m") + +[node name="Background" type="Polygon2D" parent="."] +position = Vector2(52, -26) +color = Color(0.329412, 0.494118, 0.392157, 1) +polygon = PackedVector2Array(-141, -86, 1456, -97, 1337, 753, -193, 771) + +[node name="Beehive" type="Polygon2D" parent="."] +position = Vector2(-37, 87) +color = Color(0.588235, 0.423529, 0.423529, 1) +polygon = PackedVector2Array(95, 146, 203, 134, 186, 274, 78, 287) + +[node name="Flower" type="Polygon2D" parent="."] +position = Vector2(648, 225) +scale = Vector2(0.435897, 0.276596) +color = Color(0.301961, 0.607843, 0.901961, 1) +polygon = PackedVector2Array(752, 145, 875, 200, 893, 272, 866, 359, 781, 427, 715, 362, 659, 226) + +[node name="Pesticide" type="Polygon2D" parent="."] +position = Vector2(74.7948, -103.963) +scale = Vector2(0.851611, 0.815599) +color = Color(0.682353, 0.137255, 0.203922, 1) +polygon = PackedVector2Array(441, 122, 520, 54, 548, 154, 625, 114, 593, 234, 686, 281, 581, 325, 605, 472, 512, 363, 399, 468, 429, 311, 239, 362, 322, 226, 152, 92, 345, 130, 346, 15) + +[node name="Dog" type="Polygon2D" parent="."] +position = Vector2(-354, 53) +color = Color(0.803922, 0.407843, 0.239216, 1) +polygon = PackedVector2Array(819, 301, 866, 278, 888, 364, 842, 319, 832, 373, 806, 423, 775, 424, 754, 377, 762, 319, 728, 360, 739, 263, 765, 284) + +[node name="DroneManager" type="Node2D" parent="."] +script = ExtResource("2_474nc") + +[node name="SpawnedDrones" type="Node2D" parent="DroneManager"] + +[node name="Control" type="Control" parent="DroneManager"] +top_level = true +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +metadata/_edit_use_anchors_ = true + +[node name="DroneControls" type="HBoxContainer" parent="DroneManager/Control"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -155.5 +offset_top = -31.0 +offset_right = 155.5 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_vertical = 10 +alignment = 1 +script = ExtResource("3_rqkyv") + +[node name="SpawnDirector" type="Button" parent="DroneManager/Control/DroneControls"] +layout_mode = 2 +tooltip_text = "Place a director drone, these are the main drones that define the path bees should follow. The order bees should visit these drones can be defined by clicking on them." +text = "Director" + +[node name="SpawnCollector" type="Button" parent="DroneManager/Control/DroneControls"] +layout_mode = 2 +tooltip_text = "Place a drone that encourages bees to collect pollen near this area." +text = "Collector" + +[node name="SpawnDistractor" type="Button" parent="DroneManager/Control/DroneControls"] +layout_mode = 2 +tooltip_text = "Place a distracting drone that will (hopefully) divert threats attention so they ignore the bees." +text = "Distractor" + +[node name="SpawnDancer" type="Button" parent="DroneManager/Control/DroneControls"] +layout_mode = 2 +tooltip_text = "Spawn a dancing drone that will encourage bees to leave the hive. Best to put this near to the hive. " +text = "Dancer" + +[connection signal="pressed" from="DroneManager/Control/DroneControls/SpawnDirector" to="DroneManager" method="_on_spawn_director_pressed"] +[connection signal="pressed" from="DroneManager/Control/DroneControls/SpawnCollector" to="DroneManager" method="_on_spawn_collector_pressed"] +[connection signal="pressed" from="DroneManager/Control/DroneControls/SpawnDistractor" to="DroneManager" method="_on_spawn_distractor_pressed"] +[connection signal="pressed" from="DroneManager/Control/DroneControls/SpawnDancer" to="DroneManager" method="_on_spawn_dancer_pressed"]