diff --git a/project/demos/arrive/Arrive.tscn b/project/demos/arrive/Arrive.tscn index 1b5d194..144bd97 100644 --- a/project/demos/arrive/Arrive.tscn +++ b/project/demos/arrive/Arrive.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://demos/arrive/Arriver.gd" type="Script" id=1] [ext_resource path="res://demos/arrive/ArriveDemo.gd" type="Script" id=2] [ext_resource path="res://demos/arrive/Target.gd" type="Script" id=3] +[ext_resource path="res://demos/arrive/GUI.tscn" type="PackedScene" id=4] [sub_resource type="CircleShape2D" id=1] radius = 15.0 @@ -18,3 +19,7 @@ shape = SubResource( 1 ) [node name="Target" type="Node2D" parent="."] script = ExtResource( 3 ) + +[node name="GUI" parent="." instance=ExtResource( 4 )] +margin_right = 227.0 +margin_bottom = 184.0 diff --git a/project/demos/arrive/ArriveDemo.gd b/project/demos/arrive/ArriveDemo.gd index ab3fe71..a60cc04 100644 --- a/project/demos/arrive/ArriveDemo.gd +++ b/project/demos/arrive/ArriveDemo.gd @@ -2,7 +2,36 @@ extends Node2D onready var _target: = $Target +onready var _arriver: = $Arriver +onready var _gui: = $GUI + + +func _ready() -> void: + _gui.connect("align_tolerance_changed", self, "_on_GUI_align_tolerance_changed") + _gui.connect("decel_radius_changed", self, "_on_GUI_decel_radius_changed") + _gui.connect("max_speed_changed", self, "_on_GUI_max_speed_changed") + _gui.connect("max_accel_changed", self, "_on_GUI_max_accel_changed") + _gui.max_speed.text = str(_arriver._agent.max_linear_speed) + _gui.max_accel.text = str(_arriver._agent.max_linear_acceleration) + _gui.arrival_tolerance.text = str(_arriver._arrive.arrival_tolerance) + _gui.deceleration_radius.text = str(_arriver._arrive.deceleration_radius) func draw(location: Vector2) -> void: _target.draw(location) + + +func _on_GUI_align_tolerance_changed(value: int) -> void: + _arriver._arrive.arrival_tolerance = value + + +func _on_GUI_decel_radius_changed(value: int) -> void: + _arriver._arrive.deceleration_radius = value + + +func _on_GUI_max_speed_changed(value: int) -> void: + _arriver._agent.max_linear_speed = value + + +func _on_GUI_max_accel_changed(value: int) -> void: + _arriver._agent.max_linear_acceleration = value diff --git a/project/demos/arrive/GUI.gd b/project/demos/arrive/GUI.gd new file mode 100644 index 0000000..3ed6a03 --- /dev/null +++ b/project/demos/arrive/GUI.gd @@ -0,0 +1,47 @@ +extends MarginContainer + + +signal max_speed_changed(value) +signal max_accel_changed(value) +signal align_tolerance_changed(value) +signal decel_radius_changed(value) + +onready var max_speed: = $Controls/MaxSpeed/LineEdit +onready var max_accel: = $Controls/MaxAccel/LineEdit +onready var arrival_tolerance: = $Controls/ArrivalTolerance/LineEdit +onready var deceleration_radius: = $Controls/DecelRadius/LineEdit + + +func _ready() -> void: + max_speed.connect("text_changed", self, "_on_MaxSpeed_text_changed") + max_accel.connect("text_changed", self, "_on_MaxAccel_text_changed") + arrival_tolerance.connect("text_changed", self, "_on_ArrivalTolerance_text_changed") + deceleration_radius.connect("text_changed", self, "_on_DecelerationRadius_text_changed") + + +func _unhandled_input(event: InputEvent) -> void: + if event is InputEventMouseButton: + max_speed.release_focus() + max_accel.release_focus() + arrival_tolerance.release_focus() + deceleration_radius.release_focus() + + +func _on_MaxSpeed_text_changed(new_text: String) -> void: + if new_text.is_valid_integer(): + emit_signal("max_speed_changed", int(float(new_text))) + + +func _on_MaxAccel_text_changed(new_text: String) -> void: + if new_text.is_valid_integer(): + emit_signal("max_accel_changed", int(float(new_text))) + + +func _on_ArrivalTolerance_text_changed(new_text: String) -> void: + if new_text.is_valid_integer(): + emit_signal("align_tolerance_changed", int(float(new_text))) + + +func _on_DecelerationRadius_text_changed(new_text: String) -> void: + if new_text.is_valid_integer(): + emit_signal("decel_radius_changed", int(float(new_text))) diff --git a/project/demos/arrive/GUI.tscn b/project/demos/arrive/GUI.tscn new file mode 100644 index 0000000..d870e56 --- /dev/null +++ b/project/demos/arrive/GUI.tscn @@ -0,0 +1,108 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://demos/arrive/GUI.gd" type="Script" id=1] + +[node name="GUI" type="MarginContainer"] +anchor_bottom = 1.0 +margin_right = 40.0 +custom_constants/margin_right = 20 +custom_constants/margin_top = 20 +custom_constants/margin_left = 20 +custom_constants/margin_bottom = 20 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Controls" type="VBoxContainer" parent="."] +margin_left = 20.0 +margin_top = 20.0 +margin_right = 207.0 +margin_bottom = 580.0 + +[node name="MaxSpeed" type="HBoxContainer" parent="Controls"] +margin_right = 187.0 +margin_bottom = 24.0 + +[node name="Label" type="Label" parent="Controls/MaxSpeed"] +margin_top = 4.0 +margin_right = 125.0 +margin_bottom = 19.0 +rect_min_size = Vector2( 125, 15 ) +text = "Max speed" + +[node name="LineEdit" type="LineEdit" parent="Controls/MaxSpeed"] +margin_left = 129.0 +margin_right = 187.0 +margin_bottom = 24.0 +focus_mode = 1 + +[node name="MaxAccel" type="HBoxContainer" parent="Controls"] +margin_top = 28.0 +margin_right = 187.0 +margin_bottom = 52.0 + +[node name="Label" type="Label" parent="Controls/MaxAccel"] +margin_top = 4.0 +margin_right = 125.0 +margin_bottom = 19.0 +rect_min_size = Vector2( 125, 15 ) +text = "Max acceleration" + +[node name="LineEdit" type="LineEdit" parent="Controls/MaxAccel"] +margin_left = 129.0 +margin_right = 187.0 +margin_bottom = 24.0 +focus_mode = 1 + +[node name="ArrivalTolerance" type="HBoxContainer" parent="Controls"] +margin_top = 56.0 +margin_right = 187.0 +margin_bottom = 80.0 + +[node name="Label" type="Label" parent="Controls/ArrivalTolerance"] +margin_top = 4.0 +margin_right = 125.0 +margin_bottom = 19.0 +rect_min_size = Vector2( 125, 15 ) +text = "Arrival tolerance" + +[node name="LineEdit" type="LineEdit" parent="Controls/ArrivalTolerance"] +margin_left = 129.0 +margin_right = 187.0 +margin_bottom = 24.0 +focus_mode = 1 + +[node name="DecelRadius" type="HBoxContainer" parent="Controls"] +margin_top = 84.0 +margin_right = 187.0 +margin_bottom = 108.0 + +[node name="Label" type="Label" parent="Controls/DecelRadius"] +margin_top = 4.0 +margin_right = 125.0 +margin_bottom = 19.0 +rect_min_size = Vector2( 125, 15 ) +text = "Deceleration radius" + +[node name="LineEdit" type="LineEdit" parent="Controls/DecelRadius"] +margin_left = 129.0 +margin_right = 187.0 +margin_bottom = 24.0 +focus_mode = 1 + +[node name="Help" type="VBoxContainer" parent="Controls"] +margin_top = 112.0 +margin_right = 187.0 +margin_bottom = 144.0 + +[node name="Controls" type="Label" parent="Controls/Help"] +margin_right = 187.0 +margin_bottom = 14.0 +text = "Controls" + +[node name="Label" type="Label" parent="Controls/Help"] +margin_top = 18.0 +margin_right = 187.0 +margin_bottom = 32.0 +text = "Mouse click" diff --git a/project/demos/face/Face.tscn b/project/demos/face/Face.tscn index 16f3a08..42b34d0 100644 --- a/project/demos/face/Face.tscn +++ b/project/demos/face/Face.tscn @@ -17,8 +17,6 @@ __meta__ = { "_editor_description_": "A demo showing the usage of the Face steering behavior." } -[node name="GUI" parent="." instance=ExtResource( 4 )] - [node name="Player" type="KinematicBody2D" parent="."] position = Vector2( 512, 450 ) script = ExtResource( 1 ) @@ -32,3 +30,7 @@ script = ExtResource( 2 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="Turret"] shape = SubResource( 2 ) + +[node name="GUI" parent="." instance=ExtResource( 4 )] +margin_right = 232.0 +margin_bottom = 204.0 diff --git a/project/demos/pursue_vs_seek/PursueVSSeek.tscn b/project/demos/pursue_vs_seek/PursueVSSeek.tscn index c60f216..3545a89 100644 --- a/project/demos/pursue_vs_seek/PursueVSSeek.tscn +++ b/project/demos/pursue_vs_seek/PursueVSSeek.tscn @@ -12,8 +12,6 @@ __meta__ = { "_editor_description_": "Toy demo to demonstrate the use of the Pursue contrasted to the more naive Seek steering behavior." } -[node name="GUI" parent="." instance=ExtResource( 4 )] - [node name="BoundaryManager" type="Node2D" parent="."] script = ExtResource( 2 ) @@ -47,3 +45,7 @@ use_seek = true [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="BoundaryManager/Seeker"] modulate = Color( 0.317647, 0.317647, 0.317647, 1 ) polygon = PoolVector2Array( 0, -30, -25, 25, 25, 25 ) + +[node name="GUI" parent="." instance=ExtResource( 4 )] +margin_right = 261.0 +margin_bottom = 150.0 diff --git a/project/demos/seek_and_flee/SeekFlee.tscn b/project/demos/seek_and_flee/SeekFlee.tscn index 7183345..dce36b1 100644 --- a/project/demos/seek_and_flee/SeekFlee.tscn +++ b/project/demos/seek_and_flee/SeekFlee.tscn @@ -22,12 +22,6 @@ __meta__ = { "_editor_description_": "A toy demo to demonstrate the usage for the Seek and Flee steering behaviors." } -[node name="GUI" parent="." instance=ExtResource( 7 )] -margin_left = -512.0 -margin_top = -300.0 -margin_right = -414.0 -margin_bottom = -208.0 - [node name="Camera2D" type="Camera2D" parent="."] current = true @@ -77,3 +71,9 @@ shape = SubResource( 3 ) [node name="Spawner" type="Node2D" parent="."] script = ExtResource( 2 ) Entity = ExtResource( 4 ) + +[node name="GUI" parent="." instance=ExtResource( 7 )] +margin_left = -512.0 +margin_top = -300.0 +margin_right = -414.0 +margin_bottom = -152.0