Add GUI to Face demo

This commit is contained in:
Francois Belair 2019-12-22 14:08:53 -05:00
parent fc0b36ff22
commit 87aef48251
5 changed files with 242 additions and 8 deletions

View File

@ -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/Player.gd" type="Script" id=1]
[ext_resource path="res://demos/face/Turret.gd" type="Script" id=2] [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/FaceDemo.gd" type="Script" id=3]
[ext_resource path="res://demos/face/GUI.tscn" type="PackedScene" id=4]
[sub_resource type="CircleShape2D" id=1] [sub_resource type="CircleShape2D" id=1]
radius = 20.0 radius = 20.0
@ -16,6 +17,8 @@ __meta__ = {
"_editor_description_": "A demo showing the usage of the Face steering behavior." "_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="."] [node name="Player" type="KinematicBody2D" parent="."]
position = Vector2( 512, 450 ) position = Vector2( 512, 450 )
script = ExtResource( 1 ) script = ExtResource( 1 )

View File

@ -2,3 +2,33 @@ extends Node2D
onready var player: = $Player 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
View 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
View 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

View File

@ -16,9 +16,10 @@ func _draw() -> void:
draw_circle(Vector2.ZERO, _radius, Color.teal) draw_circle(Vector2.ZERO, _radius, Color.teal)
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
if not _face: if not _face:
_setup() return
_accel = _face.calculate_steering(_accel) _accel = _face.calculate_steering(_accel)
_angular_velocity += _accel.angular _angular_velocity += _accel.angular
@ -33,12 +34,7 @@ func _physics_process(delta: float) -> void:
_update_agent() _update_agent()
func _update_agent() -> void: func setup() -> void:
_agent.angular_velocity = _angular_velocity
_agent.orientation = rotation
func _setup() -> void:
_face = GSTFace.new(_agent, owner.player.agent) _face = GSTFace.new(_agent, owner.player.agent)
_face.alignment_tolerance = 0.1 _face.alignment_tolerance = 0.1
@ -49,3 +45,8 @@ func _setup() -> void:
_agent.position = Vector3(global_position.x, global_position.y, 0) _agent.position = Vector3(global_position.x, global_position.y, 0)
_update_agent() _update_agent()
func _update_agent() -> void:
_agent.angular_velocity = _angular_velocity
_agent.orientation = rotation