Add wrong way indicator

soundtrack
Ensar Sarajčić 2021-11-18 20:44:53 +01:00
parent ab209ad1c5
commit 90c65dbcf9
3 changed files with 48 additions and 14 deletions

View File

@ -123,11 +123,15 @@ __meta__ = {
"_edit_use_anchors_": false
}
[node name="HBoxContainer" type="HBoxContainer" parent="TrackGUI"]
[node name="VBoxContainer" type="VBoxContainer" parent="TrackGUI"]
margin_right = 984.0
margin_bottom = 560.0
[node name="TimeLabel" type="Label" parent="TrackGUI/HBoxContainer"]
[node name="HBoxContainer" type="HBoxContainer" parent="TrackGUI/VBoxContainer"]
margin_right = 984.0
margin_bottom = 41.0
[node name="TimeLabel" type="Label" parent="TrackGUI/VBoxContainer/HBoxContainer"]
margin_right = 289.0
margin_bottom = 41.0
size_flags_horizontal = 3
@ -138,7 +142,7 @@ text = "Current lap -"
align = 1
valign = 1
[node name="TimeValue" type="Label" parent="TrackGUI/HBoxContainer"]
[node name="TimeValue" type="Label" parent="TrackGUI/VBoxContainer/HBoxContainer"]
margin_left = 297.0
margin_right = 489.0
margin_bottom = 41.0
@ -151,7 +155,7 @@ __meta__ = {
"_edit_use_anchors_": false
}
[node name="Divider" type="Label" parent="TrackGUI/HBoxContainer"]
[node name="Divider" type="Label" parent="TrackGUI/VBoxContainer/HBoxContainer"]
margin_left = 497.0
margin_right = 562.0
margin_bottom = 41.0
@ -163,7 +167,7 @@ __meta__ = {
"_edit_use_anchors_": false
}
[node name="BestTimeLabel" type="Label" parent="TrackGUI/HBoxContainer"]
[node name="BestTimeLabel" type="Label" parent="TrackGUI/VBoxContainer/HBoxContainer"]
margin_left = 570.0
margin_right = 784.0
margin_bottom = 41.0
@ -173,7 +177,7 @@ custom_colors/font_color = Color( 0.482353, 0, 0, 1 )
custom_fonts/font = SubResource( 8 )
text = "Best Lap -"
[node name="BestTimeValue" type="Label" parent="TrackGUI/HBoxContainer"]
[node name="BestTimeValue" type="Label" parent="TrackGUI/VBoxContainer/HBoxContainer"]
margin_left = 792.0
margin_right = 984.0
margin_bottom = 41.0
@ -186,5 +190,21 @@ __meta__ = {
"_edit_use_anchors_": false
}
[node name="WrongWayLabel" type="Label" parent="TrackGUI/VBoxContainer"]
visible = false
margin_top = 49.0
margin_right = 984.0
margin_bottom = 90.0
size_flags_horizontal = 3
size_flags_vertical = 0
custom_colors/font_color = Color( 0.482353, 0, 0, 1 )
custom_fonts/font = SubResource( 8 )
text = "Wrong Way! Turn Around!"
align = 1
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="lap_complete" from="Track" to="TrackGUI" method="_on_lap_complete"]
[connection signal="time_updated" from="Track" to="TrackGUI" method="_on_time_updated"]
[connection signal="wrong_way" from="Track" to="TrackGUI" method="_on_wrong_way_detected"]

View File

@ -3,6 +3,7 @@ extends Spatial
signal time_updated(new_time)
signal lap_complete(lap_time)
signal wrong_way()
export (NodePath) var track_path = null
export (int, 10, 50) var checkpoint_count = 20
@ -11,6 +12,7 @@ export (Material) var debug_material = null
onready var checkpoints = $Checkpoints
onready var path: Path = get_node(track_path)
var furthest_checkpoint = -1
var last_checkpoint = -1
var start_time = 0
@ -47,15 +49,21 @@ func _process(delta: float) -> void:
func _on_body_entered_area(body: Node, area: Area) -> void:
if body.get_groups().has("car"):
# We got the correct checkpoint
if last_checkpoint == area.get_index() - 1:
last_checkpoint += 1
if last_checkpoint == checkpoints.get_child_count() - 1:
if area.get_index() < last_checkpoint || abs(area.get_index() - last_checkpoint) > 1:
emit_signal("wrong_way")
last_checkpoint = area.get_index()
# We got the correct checkpoint
if furthest_checkpoint == area.get_index() - 1:
furthest_checkpoint += 1
if furthest_checkpoint == checkpoints.get_child_count() - 1:
emit_signal("lap_complete", current_time)
start_time = OS.get_ticks_msec()
_update_time()
last_checkpoint = -1
furthest_checkpoint = -1
func _build_checkpoint_collision():

View File

@ -2,8 +2,9 @@ extends MarginContainer
var best_time = -1
onready var time_value = $HBoxContainer/TimeValue
onready var best_time_value = $HBoxContainer/BestTimeValue
onready var time_value = $VBoxContainer/HBoxContainer/TimeValue
onready var best_time_value = $VBoxContainer/HBoxContainer/BestTimeValue
onready var wrong_way_label = $VBoxContainer/WrongWayLabel
func _ready() -> void:
time_value.text = "NaN"
@ -15,12 +16,17 @@ func _on_time_updated(new_time: float) -> void:
func _on_lap_complete(lap_time: float) -> void:
print(lap_time)
if lap_time < best_time or best_time < 0:
best_time = lap_time
best_time_value.text = _format_time(best_time)
func _on_wrong_way_detected() -> void:
wrong_way_label.visible = true
yield(get_tree().create_timer(3.0), "timeout")
wrong_way_label.visible = false
func _format_time(time: float) -> String:
var minute = floor(time / 1000.0 / 60.0)
var second = floor((time / 1000.0) - minute * 60)