mirror of
https://github.com/Relintai/godot-steering-ai-framework.git
synced 2024-11-14 04:57:19 +01:00
Add GUI to Face demo
This commit is contained in:
parent
fc0b36ff22
commit
87aef48251
@ -1,8 +1,9 @@
|
||||
[gd_scene load_steps=6 format=2]
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://demos/face/Player.gd" type="Script" id=1]
|
||||
[ext_resource path="res://demos/face/Turret.gd" type="Script" id=2]
|
||||
[ext_resource path="res://demos/face/FaceDemo.gd" type="Script" id=3]
|
||||
[ext_resource path="res://demos/face/GUI.tscn" type="PackedScene" id=4]
|
||||
|
||||
[sub_resource type="CircleShape2D" id=1]
|
||||
radius = 20.0
|
||||
@ -16,6 +17,8 @@ __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 )
|
||||
|
@ -2,3 +2,33 @@ extends Node2D
|
||||
|
||||
|
||||
onready var player: = $Player
|
||||
onready var _gui: = $GUI
|
||||
onready var _turret: = $Turret
|
||||
|
||||
|
||||
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_accel_changed", self, "_on_GUI_max_accel_changed")
|
||||
_gui.connect("max_speed_changed", self, "_on_GUI_max_speed_changed")
|
||||
_turret.setup()
|
||||
_gui.align_tolerance.text = str(int(rad2deg(_turret._face.alignment_tolerance)))
|
||||
_gui.decel_radius.text = str(int(rad2deg(_turret._face.deceleration_radius)))
|
||||
_gui.max_speed.text = str(int(rad2deg(_turret._agent.max_angular_speed)))
|
||||
_gui.max_accel.text = str(int(rad2deg(_turret._agent.max_angular_acceleration)))
|
||||
|
||||
|
||||
func _on_GUI_align_tolerance_changed(value: int) -> void:
|
||||
_turret._face.alignment_tolerance = deg2rad(value)
|
||||
|
||||
|
||||
func _on_GUI_decel_radius_changed(value: int) -> void:
|
||||
_turret._face.deceleration_radius = deg2rad(value)
|
||||
|
||||
|
||||
func _on_GUI_max_accel_changed(value: int) -> void:
|
||||
_turret._agent.max_angular_acceleration = deg2rad(value)
|
||||
|
||||
|
||||
func _on_GUI_max_speed_changed(value: int) -> void:
|
||||
_turret._agent.max_angular_speed = deg2rad(value)
|
||||
|
47
project/demos/face/GUI.gd
Normal file
47
project/demos/face/GUI.gd
Normal file
@ -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 align_tolerance: = $Controls/AlignmentTolerance/LineEdit
|
||||
onready var decel_radius: = $Controls/DecelerationRadius/LineEdit
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
max_speed.connect("text_changed", self, "_on_MaxSpeed_text_changed")
|
||||
max_accel.connect("text_changed", self, "_on_MaxAccel_text_changed")
|
||||
align_tolerance.connect("text_changed", self, "_on_AlignTolerance_text_changed")
|
||||
decel_radius.connect("text_changed", self, "_on_DecelRadius_text_changed")
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseButton:
|
||||
max_speed.release_focus()
|
||||
max_accel.release_focus()
|
||||
align_tolerance.release_focus()
|
||||
decel_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_AlignTolerance_text_changed(new_text: String) -> void:
|
||||
if new_text.is_valid_integer():
|
||||
emit_signal("align_tolerance_changed", int(float(new_text)))
|
||||
|
||||
|
||||
func _on_DecelRadius_text_changed(new_text: String) -> void:
|
||||
if new_text.is_valid_integer():
|
||||
emit_signal("decel_radius_changed", int(float(new_text)))
|
153
project/demos/face/GUI.tscn
Normal file
153
project/demos/face/GUI.tscn
Normal file
@ -0,0 +1,153 @@
|
||||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://demos/face/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 = 212.0
|
||||
margin_bottom = 580.0
|
||||
|
||||
[node name="MaxSpeed" type="HBoxContainer" parent="Controls"]
|
||||
margin_right = 192.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="Label" type="Label" parent="Controls/MaxSpeed"]
|
||||
margin_top = 4.0
|
||||
margin_right = 130.0
|
||||
margin_bottom = 19.0
|
||||
rect_min_size = Vector2( 130, 15 )
|
||||
text = "Max speed"
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="Controls/MaxSpeed"]
|
||||
margin_left = 134.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 24.0
|
||||
focus_mode = 1
|
||||
|
||||
[node name="MaxAccel" type="HBoxContainer" parent="Controls"]
|
||||
margin_top = 28.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 52.0
|
||||
|
||||
[node name="Label" type="Label" parent="Controls/MaxAccel"]
|
||||
margin_top = 4.0
|
||||
margin_right = 130.0
|
||||
margin_bottom = 19.0
|
||||
rect_min_size = Vector2( 130, 15 )
|
||||
text = "Max acceleration"
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="Controls/MaxAccel"]
|
||||
margin_left = 134.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 24.0
|
||||
focus_mode = 1
|
||||
|
||||
[node name="AlignmentTolerance" type="HBoxContainer" parent="Controls"]
|
||||
margin_top = 56.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 80.0
|
||||
|
||||
[node name="Label" type="Label" parent="Controls/AlignmentTolerance"]
|
||||
margin_top = 4.0
|
||||
margin_right = 130.0
|
||||
margin_bottom = 19.0
|
||||
rect_min_size = Vector2( 130, 15 )
|
||||
text = "Alignment tolerance"
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="Controls/AlignmentTolerance"]
|
||||
margin_left = 134.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 24.0
|
||||
focus_mode = 1
|
||||
|
||||
[node name="DecelerationRadius" type="HBoxContainer" parent="Controls"]
|
||||
margin_top = 84.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 108.0
|
||||
|
||||
[node name="Label" type="Label" parent="Controls/DecelerationRadius"]
|
||||
margin_top = 4.0
|
||||
margin_right = 130.0
|
||||
margin_bottom = 19.0
|
||||
rect_min_size = Vector2( 130, 15 )
|
||||
text = "Deceleration radius"
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="Controls/DecelerationRadius"]
|
||||
margin_left = 134.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 24.0
|
||||
focus_mode = 1
|
||||
|
||||
[node name="Help" type="VBoxContainer" parent="Controls"]
|
||||
margin_top = 112.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 164.0
|
||||
|
||||
[node name="Controls" type="Label" parent="Controls/Help"]
|
||||
margin_right = 192.0
|
||||
margin_bottom = 14.0
|
||||
text = "Controls"
|
||||
|
||||
[node name="GridContainer" type="GridContainer" parent="Controls/Help"]
|
||||
margin_top = 18.0
|
||||
margin_right = 192.0
|
||||
margin_bottom = 52.0
|
||||
columns = 3
|
||||
|
||||
[node name="Sep" type="Control" parent="Controls/Help/GridContainer"]
|
||||
margin_right = 15.0
|
||||
margin_bottom = 15.0
|
||||
rect_min_size = Vector2( 15, 15 )
|
||||
|
||||
[node name="W" type="Label" parent="Controls/Help/GridContainer"]
|
||||
margin_left = 19.0
|
||||
margin_right = 34.0
|
||||
margin_bottom = 15.0
|
||||
rect_min_size = Vector2( 15, 15 )
|
||||
text = "W"
|
||||
align = 1
|
||||
|
||||
[node name="Sep2" type="Control" parent="Controls/Help/GridContainer"]
|
||||
margin_left = 38.0
|
||||
margin_right = 53.0
|
||||
margin_bottom = 15.0
|
||||
rect_min_size = Vector2( 15, 15 )
|
||||
|
||||
[node name="A" type="Label" parent="Controls/Help/GridContainer"]
|
||||
margin_top = 19.0
|
||||
margin_right = 15.0
|
||||
margin_bottom = 34.0
|
||||
rect_min_size = Vector2( 15, 15 )
|
||||
text = "A"
|
||||
align = 1
|
||||
|
||||
[node name="S" type="Label" parent="Controls/Help/GridContainer"]
|
||||
margin_left = 19.0
|
||||
margin_top = 19.0
|
||||
margin_right = 34.0
|
||||
margin_bottom = 34.0
|
||||
rect_min_size = Vector2( 15, 15 )
|
||||
text = "S"
|
||||
align = 1
|
||||
|
||||
[node name="D" type="Label" parent="Controls/Help/GridContainer"]
|
||||
margin_left = 38.0
|
||||
margin_top = 19.0
|
||||
margin_right = 53.0
|
||||
margin_bottom = 34.0
|
||||
rect_min_size = Vector2( 15, 15 )
|
||||
text = "D"
|
||||
align = 1
|
@ -16,9 +16,10 @@ func _draw() -> void:
|
||||
draw_circle(Vector2.ZERO, _radius, Color.teal)
|
||||
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if not _face:
|
||||
_setup()
|
||||
return
|
||||
|
||||
_accel = _face.calculate_steering(_accel)
|
||||
_angular_velocity += _accel.angular
|
||||
@ -33,12 +34,7 @@ func _physics_process(delta: float) -> void:
|
||||
_update_agent()
|
||||
|
||||
|
||||
func _update_agent() -> void:
|
||||
_agent.angular_velocity = _angular_velocity
|
||||
_agent.orientation = rotation
|
||||
|
||||
|
||||
func _setup() -> void:
|
||||
func setup() -> void:
|
||||
_face = GSTFace.new(_agent, owner.player.agent)
|
||||
|
||||
_face.alignment_tolerance = 0.1
|
||||
@ -49,3 +45,8 @@ func _setup() -> void:
|
||||
_agent.position = Vector3(global_position.x, global_position.y, 0)
|
||||
|
||||
_update_agent()
|
||||
|
||||
|
||||
func _update_agent() -> void:
|
||||
_agent.angular_velocity = _angular_velocity
|
||||
_agent.orientation = rotation
|
||||
|
Loading…
Reference in New Issue
Block a user