From 2ab280fb92354f08877a9cf106d31c2dddd6d1cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Sat, 13 Nov 2021 23:55:18 +0100 Subject: [PATCH] Add basic GUI --- assets/gauge.png | Bin 0 -> 18685 bytes assets/gauge.png.import | 35 ++++++++++++++++ assets/needle.png | Bin 0 -> 1754 bytes assets/needle.png.import | 35 ++++++++++++++++ player/gui.gd | 26 ++++++++++++ player/gui.tscn | 82 ++++++++++++++++++++++++++++++++++++++ scenes/menu/start_menu.gd | 7 +++- scenes/test_level.gd | 5 ++- vehicles/beetlecar.tscn | 1 + vehicles/buggy.gd | 9 +++++ 10 files changed, 198 insertions(+), 2 deletions(-) create mode 100644 assets/gauge.png create mode 100644 assets/gauge.png.import create mode 100644 assets/needle.png create mode 100644 assets/needle.png.import create mode 100644 player/gui.gd create mode 100644 player/gui.tscn diff --git a/assets/gauge.png b/assets/gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..995799eb747788bc5c8a3c1618969079414836f1 GIT binary patch literal 18685 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 literal 0 HcmV?d00001 diff --git a/assets/gauge.png.import b/assets/gauge.png.import new file mode 100644 index 0000000..e2687a1 --- /dev/null +++ b/assets/gauge.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/gauge.png-9154e7a04792a5507193a3fa8e514e90.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gauge.png" +dest_files=[ "res://.import/gauge.png-9154e7a04792a5507193a3fa8e514e90.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/needle.png b/assets/needle.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd666c91def30a7b3ec76402e4f56ae7f7bb443 GIT binary patch literal 1754 zcmV<01||84P)e@h>d^1S0iD)V*&}Hv&`O)GjlF8XTTq~^qkumg8?F7GZW|E@p*?&)!T^b_5Z#1;VrMQf34YZxoT=kf9qU;qCp;kBo3n~~^*rh(AtOIO zE45o@4=xF&h!G}5krgZoM5N{=v%h`OAKx^q;?d=AQ^FBPhOBr8MJ-BKL#ipdA)iG_ z<^DTQ*BlB;ln`XI0a9w!k{r4{PF|2>hPgJ=tA@#JO2gQ*IpaO@uovt4fu+x_LEa2IKd$S-mt{-kYtC zX1BGqJf?3b*U{`Em^H~PQoovoL$L5{)<5-TYwUMFnjIT(!eyLZ0u7Q75n=POKE< zeBU=vqs^Mm+7&L{WBdRUfqjdCM!%G6JVyq5rCy*BRXXy%M$aeox@h2BZPBN;q>--y zxkm$tn%KxS^zgwFHFIJWz!0fmlK7rhw6)D6ExgquV6eD>`VAeZ?HZ#iIx%bVUK&N1 z1ZCqy=*}~wj2 zZtox_YR`3)bv5qDM{wI44rt?ECZ}hW+ z<-c}+J{ok$mE*M>YX3x3 zoROH(Ny0mY0BTtRuoJ;ISGO~orY{Ig)2@I^T18%>PrX)k4r}H?#QEke;La$6QHPP~ zi`p6`Hk!|rI%NjaY)wUx46$5(msXTSj2@b^*vJLV9nUwcM=I)^bs8BdMPehiSaL?W zqx{Z$NNxwc7nTCoEJ+u&`-)c4&R&Vk93)N~6RESA*7?rdh57Vq|5JoGol?PXecvt-Xdpzpt%%rtvHJnAoVZ zbSRmTbUO0BK~M6$^a#k)NIyjCpcb_)w2KcIY&a<&@nJ!YFckxMUZPV0`yfUe2Kp0Q z?82H4dzea^QJEtuhT-d@C#JnzC;}5XJnG?4T<2D w+|;H9Ne8vo783M3W=d>#e?Z_jUpAKh0-MRR^{Gc`X8-^I07*qoM6N<$f=@X%Hvj+t literal 0 HcmV?d00001 diff --git a/assets/needle.png.import b/assets/needle.png.import new file mode 100644 index 0000000..28b9b97 --- /dev/null +++ b/assets/needle.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/needle.png-0f8fd3822e6cc0a1cd19175fda72da7b.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/needle.png" +dest_files=[ "res://.import/needle.png-0f8fd3822e6cc0a1cd19175fda72da7b.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/player/gui.gd b/player/gui.gd new file mode 100644 index 0000000..59c5c71 --- /dev/null +++ b/player/gui.gd @@ -0,0 +1,26 @@ +extends MarginContainer + + +onready var rpm_needle = $HBoxContainer/RPMGauge/RPMNeedle +onready var speed_needle = $HBoxContainer/SpeedGauge/SpeedNeedle +onready var gear_label = $HBoxContainer/GearLabel + +var min_rotation = -85 +var max_rotation = 75 + +func _get_rotation(percent: float) -> float: + return min_rotation + (max_rotation - min_rotation) * percent + +func update_speed(speed_percent: float) -> void: + speed_needle.rect_rotation = _get_rotation(speed_percent) + +func update_rpm(rpm_percent: float) -> void: + rpm_needle.rect_rotation = _get_rotation(rpm_percent) + +func update_gear(gear: int) -> void: + if gear == -1: + gear_label.text = "R" + elif gear == 0: + gear_label.text = "N" + else: + gear_label.text = str(gear) diff --git a/player/gui.tscn b/player/gui.tscn new file mode 100644 index 0000000..f40ef24 --- /dev/null +++ b/player/gui.tscn @@ -0,0 +1,82 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://assets/gauge.png" type="Texture" id=1] +[ext_resource path="res://assets/needle.png" type="Texture" id=2] +[ext_resource path="res://player/gui.gd" type="Script" id=3] +[ext_resource path="res://assets/fonts/kenney-future-narrow.ttf" type="DynamicFontData" id=4] + +[sub_resource type="CanvasItemMaterial" id=3] + +[sub_resource type="DynamicFont" id=1] +size = 48 +font_data = ExtResource( 4 ) + +[node name="GUIContainer" type="MarginContainer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 20.0 +margin_top = 20.0 +margin_right = -20.0 +margin_bottom = -20.0 +script = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +material = SubResource( 3 ) +margin_top = 432.0 +margin_right = 318.0 +margin_bottom = 560.0 +size_flags_horizontal = 0 +size_flags_vertical = 8 +custom_constants/separation = 20 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="RPMGauge" type="TextureRect" parent="HBoxContainer"] +margin_right = 128.0 +margin_bottom = 128.0 +texture = ExtResource( 1 ) + +[node name="RPMNeedle" type="TextureRect" parent="HBoxContainer/RPMGauge"] +margin_left = 54.0 +margin_top = 11.0 +margin_right = 72.0 +margin_bottom = 66.0 +rect_pivot_offset = Vector2( 9, 50 ) +size_flags_horizontal = 5 +size_flags_vertical = 5 +texture = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="SpeedGauge" type="TextureRect" parent="HBoxContainer"] +margin_left = 148.0 +margin_right = 276.0 +margin_bottom = 128.0 +texture = ExtResource( 1 ) + +[node name="SpeedNeedle" type="TextureRect" parent="HBoxContainer/SpeedGauge"] +margin_left = 54.0 +margin_top = 11.0 +margin_right = 72.0 +margin_bottom = 66.0 +rect_pivot_offset = Vector2( 9, 50 ) +size_flags_horizontal = 5 +size_flags_vertical = 5 +texture = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="GearLabel" type="Label" parent="HBoxContainer"] +margin_left = 296.0 +margin_top = 37.0 +margin_right = 318.0 +margin_bottom = 91.0 +custom_colors/font_color = Color( 0.282353, 0.0196078, 0.0196078, 1 ) +custom_fonts/font = SubResource( 1 ) +text = "1" diff --git a/scenes/menu/start_menu.gd b/scenes/menu/start_menu.gd index 5cebbe4..0722ce9 100644 --- a/scenes/menu/start_menu.gd +++ b/scenes/menu/start_menu.gd @@ -3,6 +3,7 @@ extends Panel const buggy = preload("res://vehicles/buggy.tscn") const beetle = preload("res://vehicles/beetlecar.tscn") const test_scene = preload("res://scenes/test_level.tscn") +const gui_scene = preload("res://player/gui.tscn") func _on_BuggyButton_pressed() -> void: _start_with_vehicle(buggy.instance()) @@ -11,8 +12,12 @@ func _on_BeetleButton_pressed() -> void: _start_with_vehicle(beetle.instance()) func _start_with_vehicle(vehicle: Node) -> void: + var gui = gui_scene.instance() var scene = test_scene.instance() - scene.call_deferred("spawn_player", vehicle) + vehicle.connect("speed_updated", gui, "update_speed") + vehicle.connect("rpm_updated", gui, "update_rpm") + vehicle.connect("gear_updated", gui, "update_gear") + scene.call_deferred("spawn_player", vehicle, gui) get_tree().root.call_deferred("add_child", scene) queue_free() diff --git a/scenes/test_level.gd b/scenes/test_level.gd index 46817de..bdae7c8 100644 --- a/scenes/test_level.gd +++ b/scenes/test_level.gd @@ -3,13 +3,16 @@ extends Spatial const camera = preload("res://player/camera.tscn") onready var spawn_point = $PlayerSpawnLocation var player_node: Node +var gui: Node func _ready() -> void: player_node.global_transform = spawn_point.global_transform add_child(player_node) + add_child(gui) var player_camera = camera.instance() player_camera.follow_target_path = player_node.get_path() add_child(player_camera) -func spawn_player(player_node: Node) -> void: +func spawn_player(player_node: Node, gui: Node) -> void: self.player_node = player_node + self.gui = gui diff --git a/vehicles/beetlecar.tscn b/vehicles/beetlecar.tscn index e26775a..57f976f 100644 --- a/vehicles/beetlecar.tscn +++ b/vehicles/beetlecar.tscn @@ -44,6 +44,7 @@ rings = 3 [node name="beetlecar" instance=ExtResource( 2 )] mass = 140.0 script = ExtResource( 1 ) +EXPECTED_MAX_SPEED = 180.0 gear_ratios = [ 2.95, 2.2, 1.76, 1.43, 1.25, 1.0 ] final_drive = 5.0 max_rpm = 8000.0 diff --git a/vehicles/buggy.gd b/vehicles/buggy.gd index 8664146..de27a4b 100644 --- a/vehicles/buggy.gd +++ b/vehicles/buggy.gd @@ -1,5 +1,9 @@ extends VehicleBody +signal speed_updated(speed_percent) +signal rpm_updated(rpm_percent) +signal gear_updated(gear) + export (float) var MAX_STEER_ANGLE = 25 export (float) var SPEED_STEER_ANGLE = 10 export (float) var MAX_STEER_SPEED = 100.0 @@ -15,6 +19,7 @@ export (float) var MAX_BRAKE_FORCE = 50.0 export (float) var THROTTLE_POWER = 6000.0 export (float) var MAX_RPM_LOSS_PS = 3000.0 export (float) var BASE_ENGINE_PITCH = 0.5 +export (float) var EXPECTED_MAX_SPEED = 200 export (Array) var gear_ratios = [ 3.4, 2.5, 2.0, 1.5, 1.25 ] export (float) var reverse_ratio = -3 @@ -69,10 +74,12 @@ func _handle_gear_switch(delta: float): if gear + 1 <= gear_ratios.size(): gear += 1 gear_timer = gear_switch_time * (2 - clutch_position) + emit_signal("gear_updated", gear) if Input.is_action_just_pressed("gear_down"): if gear - 1 >= -1: gear -= 1 gear_timer = gear_switch_time * (2 - clutch_position) + emit_signal("gear_updated", gear) func _has_traction(): for wheel in traction_wheels: @@ -132,6 +139,8 @@ func _physics_process(delta: float): rlwheel.brake = handbrake * MAX_BRAKE_FORCE / 2 var speed = wheel_rpm * 2.0 * PI * rrwheel.wheel_radius / 60.0 * 3600.0 / 1000.0 + emit_signal("speed_updated", speed / EXPECTED_MAX_SPEED) + emit_signal("rpm_updated", rpm_factor) $Info.text = "Gear: %d, KPH: %.0f, RPM: %.0f, WheelRPM: %.0f, FinalRPM: %.0f, TRPM: %.0f, Engine force: %.0f" % [ gear, speed, rpm, wheel_rpm, final_rpm, transmission_rpm, engine_force ] var steering_input = Input.get_action_strength("steer_left") - Input.get_action_strength("steer_right")