Basic mouse interface

This commit is contained in:
Dan 2024-05-02 13:54:43 +01:00
parent 2099f0b1ff
commit b0583bd97f
8 changed files with 177 additions and 4 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
# Godot 4+ specific ignores # Godot 4+ specific ignores
.godot/ .godot/
.vscode/

View file

@ -1,3 +0,0 @@
{
"godotTools.editorPath.godot4": "c:\\Dev\\Godot\\Godot_v4.2.2-stable_win64.exe"
}

3
entities/Bee.tscn Normal file
View file

@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://deek6uv574xas"]
[node name="Bee" type="Node2D"]

View file

@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://c44o1ygkb5861"]
[node name="DirectorDrone" type="Node2D"]

View file

@ -15,6 +15,12 @@ run/main_scene="res://scenes/test_level.tscn"
config/features=PackedStringArray("4.2", "Forward Plus") config/features=PackedStringArray("4.2", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[display]
window/size/viewport_width=1280
window/size/viewport_height=720
window/vsync/vsync_mode=0
[editor_plugins] [editor_plugins]
enabled=PackedStringArray("res://addons/log/plugin.cfg") enabled=PackedStringArray("res://addons/log/plugin.cfg")

View file

@ -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()

View file

@ -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")

View file

@ -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/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"] [node name="TestLevel" type="Node2D"]
script = ExtResource("1_lgt1m") 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"]