Handling improvements #2
18
README.md
18
README.md
|
@ -12,3 +12,21 @@ Game is available on [Itch.io](https://esensar.itch.io/bugged-racing).
|
||||||
|
|
||||||
Game source code is licensed under [MIT license](/LICENSE).
|
Game source code is licensed under [MIT license](/LICENSE).
|
||||||
Assets are licensed under [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).
|
Assets are licensed under [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
This game includes assets from [opengameart.org](opengameart.org), [freesound.org](freesound.org) and other sources.
|
||||||
|
|
||||||
|
### Sounds
|
||||||
|
|
||||||
|
#### Wind sounds
|
||||||
|
|
||||||
|
[Wind sounds](/assets/wind woosh loop.ogg) used in the game is available on [opengameart.org](https://opengameart.org/content/wind-whoosh-loop) under CC0 license (public domain).
|
||||||
|
|
||||||
|
#### Engine sounds
|
||||||
|
|
||||||
|
[Engine sounds](/assets/engine.wav) used in the game is available on [freesound.org](https://freesound.org/people/MarlonHJ/sounds/242740/) under CC0 license (public domain).
|
||||||
|
|
||||||
|
#### Tire sounds
|
||||||
|
|
||||||
|
[Tire sounds](/assets/tires_squal_loop.wav) used in the game is available on [opengameart.org](https://opengameart.org/content/car-tire-squeal-skid-loop) under [CC-BY 3.0 license](https://creativecommons.org/licenses/by/3.0/). Sound is provided by [audible-edge (Tom Haigh)](http://www.freesound.org/people/audible-edge/) and submitted by [qubodup](https://opengameart.org/users/qubodup)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,21 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamSample"
|
||||||
|
path="res://.import/engine.wav-cc4df8df683a7f5419ef7019228b045a.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/engine.wav"
|
||||||
|
dest_files=[ "res://.import/engine.wav-cc4df8df683a7f5419ef7019228b045a.sample" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop=true
|
||||||
|
compress/mode=0
|
Binary file not shown.
|
@ -0,0 +1,21 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="wav"
|
||||||
|
type="AudioStreamSample"
|
||||||
|
path="res://.import/tires_squal_loop.wav-6f4aaa09ee4bdf0eca94aed4cc79779d.sample"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/tires_squal_loop.wav"
|
||||||
|
dest_files=[ "res://.import/tires_squal_loop.wav-6f4aaa09ee4bdf0eca94aed4cc79779d.sample" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
force/8_bit=false
|
||||||
|
force/mono=false
|
||||||
|
force/max_rate=false
|
||||||
|
force/max_rate_hz=44100
|
||||||
|
edit/trim=false
|
||||||
|
edit/normalize=false
|
||||||
|
edit/loop=true
|
||||||
|
compress/mode=0
|
Binary file not shown.
|
@ -0,0 +1,15 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="ogg_vorbis"
|
||||||
|
type="AudioStreamOGGVorbis"
|
||||||
|
path="res://.import/wind woosh loop.ogg-843e7b8cdfc6f4a378e2da0a4cb7290b.oggstr"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/wind woosh loop.ogg"
|
||||||
|
dest_files=[ "res://.import/wind woosh loop.ogg-843e7b8cdfc6f4a378e2da0a4cb7290b.oggstr" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
loop=true
|
||||||
|
loop_offset=0
|
|
@ -46,7 +46,7 @@ scroll_horizontal_enabled = false
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/ScrollContainer"]
|
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/ScrollContainer"]
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1974.0
|
margin_bottom = 2300.0
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
[node name="Title" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Title" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
|
@ -139,20 +139,78 @@ __meta__ = {
|
||||||
"_edit_use_anchors_": false
|
"_edit_use_anchors_": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Label7" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label17" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 490.0
|
margin_top = 490.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 508.0
|
margin_bottom = 508.0
|
||||||
custom_fonts/font = SubResource( 2 )
|
custom_fonts/font = SubResource( 2 )
|
||||||
|
text = "Credits:"
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Label20" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
|
margin_top = 516.0
|
||||||
|
margin_right = 800.0
|
||||||
|
margin_bottom = 534.0
|
||||||
|
custom_fonts/font = SubResource( 2 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Label23" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
|
margin_top = 542.0
|
||||||
|
margin_right = 800.0
|
||||||
|
margin_bottom = 782.0
|
||||||
|
size_flags_vertical = 0
|
||||||
|
custom_fonts/normal_font = SubResource( 2 )
|
||||||
|
bbcode_enabled = true
|
||||||
|
bbcode_text = "This game includes assets from [url=https://opengameart.org]opengameart.org[/url], [url=https://freesound.org]freesound.org[/url] and other sources.
|
||||||
|
|
||||||
|
- Sounds:
|
||||||
|
|
||||||
|
Wind sound used in the game is available on [url=https://opengameart.org/content/wind-whoosh-loop]opengameart.org[/url] under CC0 license (public domain).
|
||||||
|
|
||||||
|
Engine sound used in the game is available on [url=https://freesound.org/people/MarlonHJ/sounds/242740/]freesound.org[/url] under CC0 license (public domain).
|
||||||
|
|
||||||
|
Tire sound used in the game is available on [url=https://opengameart.org/content/car-tire-squeal-skid-loop]opengameart.org[/url] under [url=https://creativecommons.org/licenses/by/3.0/]CC-BY 3.0 license[/url]. Sound is provided by [url=http://www.freesound.org/people/audible-edge/]audible-edge (Tom Haigh)[/url] and submitted by [url=https://opengameart.org/users/qubodup]qubodup[/url]"
|
||||||
|
text = "This game includes assets from opengameart.org, freesound.org and other sources.
|
||||||
|
|
||||||
|
- Sounds:
|
||||||
|
|
||||||
|
Wind sound used in the game is available on opengameart.org under CC0 license (public domain).
|
||||||
|
|
||||||
|
Engine sound used in the game is available on freesound.org under CC0 license (public domain).
|
||||||
|
|
||||||
|
Tire sound used in the game is available on opengameart.org under CC-BY 3.0 license. Sound is provided by audible-edge (Tom Haigh) and submitted by qubodup"
|
||||||
|
fit_content_height = true
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Label21" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
|
margin_top = 790.0
|
||||||
|
margin_right = 800.0
|
||||||
|
margin_bottom = 808.0
|
||||||
|
custom_fonts/font = SubResource( 2 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Label7" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
|
margin_top = 816.0
|
||||||
|
margin_right = 800.0
|
||||||
|
margin_bottom = 834.0
|
||||||
|
custom_fonts/font = SubResource( 2 )
|
||||||
text = "Open source licences:"
|
text = "Open source licences:"
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
"_edit_use_anchors_": false
|
"_edit_use_anchors_": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Label8" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label8" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 516.0
|
margin_top = 842.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 534.0
|
margin_bottom = 860.0
|
||||||
custom_fonts/font = SubResource( 2 )
|
custom_fonts/font = SubResource( 2 )
|
||||||
align = 1
|
align = 1
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
|
@ -160,9 +218,9 @@ __meta__ = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Label11" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label11" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 542.0
|
margin_top = 868.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 562.0
|
margin_bottom = 888.0
|
||||||
custom_fonts/normal_font = SubResource( 2 )
|
custom_fonts/normal_font = SubResource( 2 )
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
bbcode_text = "Godot Engine (also available in [url=https://godotengine.org/license]web version[/url]):"
|
bbcode_text = "Godot Engine (also available in [url=https://godotengine.org/license]web version[/url]):"
|
||||||
|
@ -170,9 +228,9 @@ text = "Godot Engine (also available in web version):"
|
||||||
fit_content_height = true
|
fit_content_height = true
|
||||||
|
|
||||||
[node name="Label9" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label9" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 570.0
|
margin_top = 896.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1092.0
|
margin_bottom = 1418.0
|
||||||
custom_fonts/font = SubResource( 2 )
|
custom_fonts/font = SubResource( 2 )
|
||||||
text = "
|
text = "
|
||||||
This game uses Godot Engine, available under the following license:
|
This game uses Godot Engine, available under the following license:
|
||||||
|
@ -190,9 +248,9 @@ __meta__ = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Label12" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label12" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 1100.0
|
margin_top = 1426.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1118.0
|
margin_bottom = 1444.0
|
||||||
custom_fonts/font = SubResource( 2 )
|
custom_fonts/font = SubResource( 2 )
|
||||||
align = 1
|
align = 1
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
|
@ -200,9 +258,9 @@ __meta__ = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Label10" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label10" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 1126.0
|
margin_top = 1452.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1206.0
|
margin_bottom = 1532.0
|
||||||
custom_fonts/normal_font = SubResource( 2 )
|
custom_fonts/normal_font = SubResource( 2 )
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
bbcode_text = "[url=https://www.freetype.org/]FreeType[/url]:
|
bbcode_text = "[url=https://www.freetype.org/]FreeType[/url]:
|
||||||
|
@ -214,9 +272,9 @@ text = "FreeType:
|
||||||
fit_content_height = true
|
fit_content_height = true
|
||||||
|
|
||||||
[node name="Label13" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label13" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 1214.0
|
margin_top = 1540.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1232.0
|
margin_bottom = 1558.0
|
||||||
custom_fonts/font = SubResource( 2 )
|
custom_fonts/font = SubResource( 2 )
|
||||||
align = 1
|
align = 1
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
|
@ -224,9 +282,9 @@ __meta__ = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Label14" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label14" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 1240.0
|
margin_top = 1566.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1660.0
|
margin_bottom = 1986.0
|
||||||
custom_fonts/normal_font = SubResource( 2 )
|
custom_fonts/normal_font = SubResource( 2 )
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
bbcode_text = "[url=http://enet.bespin.org/]ENet[/url]:
|
bbcode_text = "[url=http://enet.bespin.org/]ENet[/url]:
|
||||||
|
@ -252,9 +310,9 @@ text = "ENet:
|
||||||
fit_content_height = true
|
fit_content_height = true
|
||||||
|
|
||||||
[node name="Label15" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label15" type="Label" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 1668.0
|
margin_top = 1994.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1686.0
|
margin_bottom = 2012.0
|
||||||
custom_fonts/font = SubResource( 2 )
|
custom_fonts/font = SubResource( 2 )
|
||||||
align = 1
|
align = 1
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
|
@ -262,9 +320,9 @@ __meta__ = {
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="Label16" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
[node name="Label16" type="RichTextLabel" parent="MarginContainer/ScrollContainer/VBoxContainer"]
|
||||||
margin_top = 1694.0
|
margin_top = 2020.0
|
||||||
margin_right = 800.0
|
margin_right = 800.0
|
||||||
margin_bottom = 1974.0
|
margin_bottom = 2300.0
|
||||||
custom_fonts/normal_font = SubResource( 2 )
|
custom_fonts/normal_font = SubResource( 2 )
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
bbcode_text = "[url=https://tls.mbed.org/]MBedTLS[/url]:
|
bbcode_text = "[url=https://tls.mbed.org/]MBedTLS[/url]:
|
||||||
|
@ -293,6 +351,7 @@ fit_content_height = true
|
||||||
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label3" to="." method="_on_link_meta_clicked"]
|
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label3" to="." method="_on_link_meta_clicked"]
|
||||||
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label19" to="." method="_on_link_meta_clicked"]
|
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label19" to="." method="_on_link_meta_clicked"]
|
||||||
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label18" to="." method="_on_link_meta_clicked"]
|
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label18" to="." method="_on_link_meta_clicked"]
|
||||||
|
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label23" to="." method="_on_link_meta_clicked"]
|
||||||
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label11" to="." method="_on_link_meta_clicked"]
|
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label11" to="." method="_on_link_meta_clicked"]
|
||||||
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label10" to="." method="_on_link_meta_clicked"]
|
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label10" to="." method="_on_link_meta_clicked"]
|
||||||
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label14" to="." method="_on_link_meta_clicked"]
|
[connection signal="meta_clicked" from="MarginContainer/ScrollContainer/VBoxContainer/Label14" to="." method="_on_link_meta_clicked"]
|
||||||
|
|
|
@ -19,7 +19,7 @@ func _on_MultiplayerButton_pressed() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _on_ExitButton_pressed() -> void:
|
func _on_ExitButton_pressed() -> void:
|
||||||
get_tree().quit()
|
get_tree().notification(MainLoop.NOTIFICATION_WM_QUIT_REQUEST)
|
||||||
|
|
||||||
|
|
||||||
func _on_SettingsButton_pressed() -> void:
|
func _on_SettingsButton_pressed() -> void:
|
||||||
|
|
|
@ -50,9 +50,7 @@ func _physics_process(delta: float) -> void:
|
||||||
|
|
||||||
var steering_factor = steering_sensitivity
|
var steering_factor = steering_sensitivity
|
||||||
if abs(_input_sink.inputs.steering) > abs(steering_input):
|
if abs(_input_sink.inputs.steering) > abs(steering_input):
|
||||||
print("detected returning: %s, %s" % [steering_factor, return_speed])
|
|
||||||
steering_factor *= return_speed
|
steering_factor *= return_speed
|
||||||
print("updated turn speed: %s" % steering_factor)
|
|
||||||
|
|
||||||
_input_sink.inputs.steering = move_toward(
|
_input_sink.inputs.steering = move_toward(
|
||||||
_input_sink.inputs.steering, steering_input, lerp(delta, 1, steering_factor)
|
_input_sink.inputs.steering, steering_input, lerp(delta, 1, steering_factor)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
var auto_clutch: bool = false
|
var auto_clutch: bool = true
|
||||||
var automatic_transmission: bool = true
|
var automatic_transmission: bool = true
|
||||||
var steering_sensitivity = 1.0
|
var steering_sensitivity = 1.0
|
||||||
var return_speed = 2.0
|
var return_speed = 2.0
|
||||||
|
@ -17,6 +17,23 @@ var _config: Dictionary
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
_config = read_json_file("res://info.json")
|
_config = read_json_file("res://info.json")
|
||||||
|
get_tree().set_auto_accept_quit(false)
|
||||||
|
var stored_config = read_json_file("user://settings.json")
|
||||||
|
if stored_config.has("hidden"):
|
||||||
|
selected_camera = stored_config["hidden"].get("selected_camera", 0)
|
||||||
|
|
||||||
|
if stored_config.has("gameplay"):
|
||||||
|
multiplayer_name = stored_config["gameplay"].get("multiplayer_name", "Player")
|
||||||
|
|
||||||
|
if stored_config.has("controls"):
|
||||||
|
auto_clutch = stored_config["controls"].get("auto_clutch", true)
|
||||||
|
automatic_transmission = stored_config["controls"].get("automatic_transmission", true)
|
||||||
|
steering_sensitivity = stored_config["controls"].get("steering_sensitivity", 1.0)
|
||||||
|
return_speed = stored_config["controls"].get("return_speed", 2.0)
|
||||||
|
throttle_sensitivity = stored_config["controls"].get("throttle_sensitivity", 1.0)
|
||||||
|
brake_sensitivity = stored_config["controls"].get("brake_sensitivity", 1.0)
|
||||||
|
steering_deadzone_inner = stored_config["controls"].get("steering_deadzone_inner", 1.0)
|
||||||
|
steering_deadzone_outer = stored_config["controls"].get("steering_deadzone_outer", 1.0)
|
||||||
|
|
||||||
|
|
||||||
func read_json_file(file_path: String) -> Dictionary:
|
func read_json_file(file_path: String) -> Dictionary:
|
||||||
|
@ -43,3 +60,32 @@ func get_version_string() -> String:
|
||||||
var minor = version["minor"]
|
var minor = version["minor"]
|
||||||
var patch = version["patch"]
|
var patch = version["patch"]
|
||||||
return "%d.%d.%d" % [major, minor, patch]
|
return "%d.%d.%d" % [major, minor, patch]
|
||||||
|
|
||||||
|
|
||||||
|
func save_settings() -> void:
|
||||||
|
save_json_file("user://settings.json", to_dictionary())
|
||||||
|
|
||||||
|
|
||||||
|
func to_dictionary() -> Dictionary:
|
||||||
|
return {
|
||||||
|
"hidden": {"selected_camera": selected_camera},
|
||||||
|
"gameplay": {"multiplayer_name": multiplayer_name},
|
||||||
|
"controls":
|
||||||
|
{
|
||||||
|
"auto_clutch": auto_clutch,
|
||||||
|
"automatic_transmission": automatic_transmission,
|
||||||
|
"steering_sensitivity": steering_sensitivity,
|
||||||
|
"return_speed": return_speed,
|
||||||
|
"throttle_sensitivity": throttle_sensitivity,
|
||||||
|
"brake_sensitivity": brake_sensitivity,
|
||||||
|
"steering_deadzone_inner": steering_deadzone_inner,
|
||||||
|
"steering_deadzone_outer": steering_deadzone_outer,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Handle quit
|
||||||
|
func _notification(what):
|
||||||
|
if what == MainLoop.NOTIFICATION_WM_QUIT_REQUEST:
|
||||||
|
save_settings()
|
||||||
|
get_tree().quit() # default behavior
|
||||||
|
|
|
@ -6,21 +6,16 @@
|
||||||
[ext_resource path="res://vehicles/pedal.gd" type="Script" id=4]
|
[ext_resource path="res://vehicles/pedal.gd" type="Script" id=4]
|
||||||
[ext_resource path="res://vehicles/meter.gd" type="Script" id=5]
|
[ext_resource path="res://vehicles/meter.gd" type="Script" id=5]
|
||||||
[ext_resource path="res://vehicles/steering_controller.gd" type="Script" id=6]
|
[ext_resource path="res://vehicles/steering_controller.gd" type="Script" id=6]
|
||||||
|
[ext_resource path="res://assets/engine.wav" type="AudioStream" id=7]
|
||||||
|
[ext_resource path="res://assets/wind woosh loop.ogg" type="AudioStream" id=8]
|
||||||
|
|
||||||
[sub_resource type="Curve" id=3]
|
[sub_resource type="Curve" id=3]
|
||||||
_data = [ Vector2( 0, 0 ), 0.0, 3.60634, 0, 1, Vector2( 0.15566, 0.561364 ), 1.56017, 1.56017, 0, 0, Vector2( 0.830189, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
|
_data = [ Vector2( 0, 0 ), 0.0, 3.60634, 0, 1, Vector2( 0.15566, 0.561364 ), 1.56017, 1.56017, 0, 0, Vector2( 0.830189, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
|
||||||
|
|
||||||
[sub_resource type="Curve" id=4]
|
|
||||||
_data = [ Vector2( 0, 0.492045 ), 0.0, 0.0, 0, 0, Vector2( 0.15566, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.212264, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.29717, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.410377, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.481132, 0.701136 ), 0.0, 0.0, 0, 0, Vector2( 0.566038, 0.282955 ), 0.0, 0.0, 0, 0, Vector2( 0.589623, 0.6375 ), 0.0, 0.0, 0, 0, Vector2( 0.660377, 0.373864 ), 0.0, 0.0, 0, 0, Vector2( 0.669811, 0.5375 ), 0.0, 0.0, 0, 0, Vector2( 0.764151, 0.0284091 ), 0.0, 0.0, 0, 0, Vector2( 0.811321, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.938679, 0 ), 0.0, 0.0, 0, 0, Vector2( 1, 1 ), 0.0, 0.0, 0, 0 ]
|
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape" id=11]
|
[sub_resource type="CapsuleShape" id=11]
|
||||||
radius = 0.394377
|
radius = 0.394377
|
||||||
height = 2.03536
|
height = 2.03536
|
||||||
|
|
||||||
[sub_resource type="AudioStreamGenerator" id=2]
|
|
||||||
mix_rate = 5500.0
|
|
||||||
buffer_length = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id=9]
|
[sub_resource type="Curve" id=9]
|
||||||
_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.493182 ), 0.0, 0.0, 0, 0 ]
|
_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.493182 ), 0.0, 0.0, 0, 0 ]
|
||||||
|
|
||||||
|
@ -46,27 +41,31 @@ radial_segments = 4
|
||||||
rings = 3
|
rings = 3
|
||||||
|
|
||||||
[node name="beetlecar" groups=["car"] instance=ExtResource( 2 )]
|
[node name="beetlecar" groups=["car"] instance=ExtResource( 2 )]
|
||||||
mass = 340.0
|
mass = 750.0
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
max_steer_input = 40.0
|
max_steer_input = 35.0
|
||||||
max_engine_force = 100.0
|
max_engine_force = 650.0
|
||||||
max_brake_force = 60.0
|
max_brake_force = 90.0
|
||||||
base_engine_pitch = 0.38
|
base_engine_pitch = 0.38
|
||||||
gear_ratios = [ 2.99, 2.5, 1.98, 1.56, 1.32, 1.12 ]
|
expected_max_speed = 170.0
|
||||||
final_drive = 4.0
|
drag_factor = 1.55
|
||||||
max_rpm = 8000.0
|
downforce_factor = 0.2
|
||||||
gear_switch_time = 0.5
|
gear_ratios = [ 6.67, 4.95, 3.65, 2.78, 2.25 ]
|
||||||
|
final_drive = 2.5
|
||||||
|
max_rpm = 8500.0
|
||||||
|
gear_switch_time = 0.3
|
||||||
power_curve = SubResource( 3 )
|
power_curve = SubResource( 3 )
|
||||||
sound_curve = SubResource( 4 )
|
automatic_gear_up_threshold = 0.85
|
||||||
|
|
||||||
[node name="rear_right" parent="." index="0"]
|
[node name="rear_right" parent="." index="0"]
|
||||||
use_as_traction = true
|
use_as_traction = true
|
||||||
wheel_roll_influence = 0.01
|
wheel_roll_influence = 0.01
|
||||||
wheel_radius = 0.38
|
wheel_radius = 0.38
|
||||||
wheel_rest_length = 0.3
|
wheel_rest_length = 0.3
|
||||||
wheel_friction_slip = 12.0
|
wheel_friction_slip = 2.0
|
||||||
suspension_travel = 0.3
|
suspension_travel = 0.3
|
||||||
suspension_stiffness = 12.0
|
suspension_stiffness = 12.0
|
||||||
|
suspension_max_force = 4000.0
|
||||||
damping_compression = 0.75
|
damping_compression = 0.75
|
||||||
damping_relaxation = 0.8
|
damping_relaxation = 0.8
|
||||||
|
|
||||||
|
@ -97,9 +96,10 @@ use_as_traction = true
|
||||||
wheel_roll_influence = 0.01
|
wheel_roll_influence = 0.01
|
||||||
wheel_radius = 0.38
|
wheel_radius = 0.38
|
||||||
wheel_rest_length = 0.3
|
wheel_rest_length = 0.3
|
||||||
wheel_friction_slip = 12.0
|
wheel_friction_slip = 2.0
|
||||||
suspension_travel = 0.3
|
suspension_travel = 0.3
|
||||||
suspension_stiffness = 12.0
|
suspension_stiffness = 12.0
|
||||||
|
suspension_max_force = 4000.0
|
||||||
damping_compression = 0.75
|
damping_compression = 0.75
|
||||||
damping_relaxation = 0.8
|
damping_relaxation = 0.8
|
||||||
|
|
||||||
|
@ -111,9 +111,10 @@ use_as_steering = true
|
||||||
wheel_roll_influence = 0.01
|
wheel_roll_influence = 0.01
|
||||||
wheel_radius = 0.38
|
wheel_radius = 0.38
|
||||||
wheel_rest_length = 0.3
|
wheel_rest_length = 0.3
|
||||||
wheel_friction_slip = 10.0
|
wheel_friction_slip = 1.95
|
||||||
suspension_travel = 0.3
|
suspension_travel = 0.3
|
||||||
suspension_stiffness = 12.0
|
suspension_stiffness = 12.0
|
||||||
|
suspension_max_force = 4000.0
|
||||||
damping_compression = 0.75
|
damping_compression = 0.75
|
||||||
damping_relaxation = 0.8
|
damping_relaxation = 0.8
|
||||||
|
|
||||||
|
@ -123,9 +124,10 @@ use_as_steering = true
|
||||||
wheel_roll_influence = 0.01
|
wheel_roll_influence = 0.01
|
||||||
wheel_radius = 0.38
|
wheel_radius = 0.38
|
||||||
wheel_rest_length = 0.3
|
wheel_rest_length = 0.3
|
||||||
wheel_friction_slip = 10.0
|
wheel_friction_slip = 1.95
|
||||||
suspension_travel = 0.3
|
suspension_travel = 0.3
|
||||||
suspension_stiffness = 12.0
|
suspension_stiffness = 12.0
|
||||||
|
suspension_max_force = 4000.0
|
||||||
damping_compression = 0.75
|
damping_compression = 0.75
|
||||||
damping_relaxation = 0.8
|
damping_relaxation = 0.8
|
||||||
|
|
||||||
|
@ -138,8 +140,8 @@ shape = SubResource( 11 )
|
||||||
|
|
||||||
[node name="engine_sound_player" type="AudioStreamPlayer3D" parent="." index="7"]
|
[node name="engine_sound_player" type="AudioStreamPlayer3D" parent="." index="7"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.14201, 0.968668 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.14201, 0.968668 )
|
||||||
stream = SubResource( 2 )
|
stream = ExtResource( 7 )
|
||||||
unit_db = 14.0
|
pitch_scale = 0.1
|
||||||
bus = "Sound"
|
bus = "Sound"
|
||||||
|
|
||||||
[node name="Smoke" type="Particles" parent="." index="8"]
|
[node name="Smoke" type="Particles" parent="." index="8"]
|
||||||
|
@ -173,6 +175,10 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.535274, 1.89154 )
|
||||||
[node name="static_follow" type="Position3D" parent="." index="16"]
|
[node name="static_follow" type="Position3D" parent="." index="16"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.59115, -3.01375 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.59115, -3.01375 )
|
||||||
|
|
||||||
|
[node name="wind_sound_player" type="AudioStreamPlayer3D" parent="." index="17"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.08447, 1.12391 )
|
||||||
|
stream = ExtResource( 8 )
|
||||||
|
|
||||||
[connection signal="brake_updated" from="." to="chassis/cockpit/brake_pedal" method="_on_value_updated"]
|
[connection signal="brake_updated" from="." to="chassis/cockpit/brake_pedal" method="_on_value_updated"]
|
||||||
[connection signal="clutch_updated" from="." to="chassis/cockpit/clutch_pedal" method="_on_value_updated"]
|
[connection signal="clutch_updated" from="." to="chassis/cockpit/clutch_pedal" method="_on_value_updated"]
|
||||||
[connection signal="rpm_updated" from="." to="chassis/cockpit/rpm_meter" method="_on_value_updated"]
|
[connection signal="rpm_updated" from="." to="chassis/cockpit/rpm_meter" method="_on_value_updated"]
|
||||||
|
|
|
@ -5,21 +5,17 @@
|
||||||
[ext_resource path="res://vehicles/vehicle.gd" type="Script" id=3]
|
[ext_resource path="res://vehicles/vehicle.gd" type="Script" id=3]
|
||||||
[ext_resource path="res://vehicles/steering_controller.gd" type="Script" id=4]
|
[ext_resource path="res://vehicles/steering_controller.gd" type="Script" id=4]
|
||||||
[ext_resource path="res://vehicles/meter.gd" type="Script" id=5]
|
[ext_resource path="res://vehicles/meter.gd" type="Script" id=5]
|
||||||
|
[ext_resource path="res://assets/engine.wav" type="AudioStream" id=6]
|
||||||
[ext_resource path="res://vehicles/pedal.gd" type="Script" id=7]
|
[ext_resource path="res://vehicles/pedal.gd" type="Script" id=7]
|
||||||
|
[ext_resource path="res://assets/wind woosh loop.ogg" type="AudioStream" id=8]
|
||||||
|
|
||||||
[sub_resource type="Curve" id=2]
|
[sub_resource type="Curve" id=2]
|
||||||
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.0660377, 0.243255 ), 0.0, 0.0, 0, 0, Vector2( 0.25, 0.563636 ), 4.02975, 4.02975, 0, 0, Vector2( 0.518868, 0.761364 ), 3.22818, 3.22818, 0, 0, Vector2( 0.849057, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
|
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.0660377, 0.243255 ), 0.0, 0.0, 0, 0, Vector2( 0.25, 0.563636 ), 4.02975, 4.02975, 0, 0, Vector2( 0.518868, 0.761364 ), 3.22818, 3.22818, 0, 0, Vector2( 0.849057, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
|
||||||
|
|
||||||
[sub_resource type="Curve" id=4]
|
|
||||||
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.0849057, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.15566, 0.746591 ), 0.0, 0.0, 0, 0, Vector2( 0.349057, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.382075, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.400943, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.438679, 0 ), 0.0, 0.0, 0, 0, Vector2( 1, 1 ), 0.0, 0.0, 0, 0 ]
|
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape" id=11]
|
[sub_resource type="CapsuleShape" id=11]
|
||||||
radius = 0.452181
|
radius = 0.452181
|
||||||
height = 2.78888
|
height = 2.78888
|
||||||
|
|
||||||
[sub_resource type="AudioStreamGenerator" id=3]
|
|
||||||
mix_rate = 5500.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id=8]
|
[sub_resource type="Curve" id=8]
|
||||||
_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.205682 ), 0.0, 0.0, 0, 0 ]
|
_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.205682 ), 0.0, 0.0, 0, 0 ]
|
||||||
|
|
||||||
|
@ -45,16 +41,18 @@ radial_segments = 4
|
||||||
rings = 3
|
rings = 3
|
||||||
|
|
||||||
[node name="buggy" groups=["car"] instance=ExtResource( 1 )]
|
[node name="buggy" groups=["car"] instance=ExtResource( 1 )]
|
||||||
mass = 400.0
|
mass = 1400.0
|
||||||
script = ExtResource( 3 )
|
script = ExtResource( 3 )
|
||||||
max_engine_force = 160.0
|
max_engine_force = 550.0
|
||||||
max_brake_force = 80.0
|
max_brake_force = 220.0
|
||||||
throttle_power = 10000.0
|
throttle_power = 10000.0
|
||||||
max_rpm_loss_ps = 4000.0
|
max_rpm_loss_ps = 4000.0
|
||||||
base_engine_pitch = 0.45
|
base_engine_pitch = 0.45
|
||||||
|
drag_factor = 1.65
|
||||||
|
downforce_factor = 1.1
|
||||||
gear_ratios = [ 3.8, 2.7, 2.2, 1.75, 1.4, 1.2 ]
|
gear_ratios = [ 3.8, 2.7, 2.2, 1.75, 1.4, 1.2 ]
|
||||||
|
max_rpm = 5000.0
|
||||||
power_curve = SubResource( 2 )
|
power_curve = SubResource( 2 )
|
||||||
sound_curve = SubResource( 4 )
|
|
||||||
automatic_gear_up_threshold = 0.85
|
automatic_gear_up_threshold = 0.85
|
||||||
automatic_gear_down_threshold = 0.4
|
automatic_gear_down_threshold = 0.4
|
||||||
|
|
||||||
|
@ -90,7 +88,7 @@ use_as_traction = true
|
||||||
use_as_steering = true
|
use_as_steering = true
|
||||||
wheel_radius = 0.6
|
wheel_radius = 0.6
|
||||||
wheel_rest_length = 0.68
|
wheel_rest_length = 0.68
|
||||||
wheel_friction_slip = 2.0
|
wheel_friction_slip = 2.25
|
||||||
suspension_travel = 1.2
|
suspension_travel = 1.2
|
||||||
suspension_stiffness = 4.5
|
suspension_stiffness = 4.5
|
||||||
suspension_max_force = 14000.0
|
suspension_max_force = 14000.0
|
||||||
|
@ -107,7 +105,7 @@ use_as_traction = true
|
||||||
use_as_steering = true
|
use_as_steering = true
|
||||||
wheel_radius = 0.6
|
wheel_radius = 0.6
|
||||||
wheel_rest_length = 0.68
|
wheel_rest_length = 0.68
|
||||||
wheel_friction_slip = 2.0
|
wheel_friction_slip = 2.25
|
||||||
suspension_travel = 1.2
|
suspension_travel = 1.2
|
||||||
suspension_stiffness = 4.5
|
suspension_stiffness = 4.5
|
||||||
suspension_max_force = 14000.0
|
suspension_max_force = 14000.0
|
||||||
|
@ -121,7 +119,7 @@ transform = Transform( -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
use_as_traction = true
|
use_as_traction = true
|
||||||
wheel_radius = 0.6
|
wheel_radius = 0.6
|
||||||
wheel_rest_length = 0.68
|
wheel_rest_length = 0.68
|
||||||
wheel_friction_slip = 1.9
|
wheel_friction_slip = 2.05
|
||||||
suspension_travel = 1.2
|
suspension_travel = 1.2
|
||||||
suspension_stiffness = 4.5
|
suspension_stiffness = 4.5
|
||||||
suspension_max_force = 14000.0
|
suspension_max_force = 14000.0
|
||||||
|
@ -133,7 +131,7 @@ transform = Transform( 1, 0, 0, 0, 1, -1.50996e-07, 0, 1.50996e-07, 1, -0.950755
|
||||||
use_as_traction = true
|
use_as_traction = true
|
||||||
wheel_radius = 0.6
|
wheel_radius = 0.6
|
||||||
wheel_rest_length = 0.68
|
wheel_rest_length = 0.68
|
||||||
wheel_friction_slip = 1.9
|
wheel_friction_slip = 2.05
|
||||||
suspension_travel = 1.2
|
suspension_travel = 1.2
|
||||||
suspension_stiffness = 4.5
|
suspension_stiffness = 4.5
|
||||||
suspension_max_force = 14000.0
|
suspension_max_force = 14000.0
|
||||||
|
@ -144,9 +142,9 @@ damping_relaxation = 0.94
|
||||||
transform = Transform( -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
transform = Transform( -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
|
||||||
[node name="engine_sound_player" type="AudioStreamPlayer3D" parent="." index="7"]
|
[node name="engine_sound_player" type="AudioStreamPlayer3D" parent="." index="7"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.14201, 0.968668 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.14201, -1.46122 )
|
||||||
stream = SubResource( 3 )
|
stream = ExtResource( 6 )
|
||||||
unit_db = 14.0
|
pitch_scale = 0.1
|
||||||
bus = "Sound"
|
bus = "Sound"
|
||||||
|
|
||||||
[node name="Smoke" type="Particles" parent="." index="8"]
|
[node name="Smoke" type="Particles" parent="." index="8"]
|
||||||
|
@ -179,6 +177,10 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.811448, 1.79879 )
|
||||||
[node name="static_follow" type="Position3D" parent="." index="16"]
|
[node name="static_follow" type="Position3D" parent="." index="16"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.15146, -4.84184 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.15146, -4.84184 )
|
||||||
|
|
||||||
|
[node name="wind_sound_player" type="AudioStreamPlayer3D" parent="." index="17"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.39214, 1.12139 )
|
||||||
|
stream = ExtResource( 8 )
|
||||||
|
|
||||||
[connection signal="brake_updated" from="." to="chassis/cockpit/brake_pedal" method="_on_value_updated"]
|
[connection signal="brake_updated" from="." to="chassis/cockpit/brake_pedal" method="_on_value_updated"]
|
||||||
[connection signal="clutch_updated" from="." to="chassis/cockpit/clutch_pedal" method="_on_value_updated"]
|
[connection signal="clutch_updated" from="." to="chassis/cockpit/clutch_pedal" method="_on_value_updated"]
|
||||||
[connection signal="rpm_updated" from="." to="chassis/cockpit/rpm_meter" method="_on_value_updated"]
|
[connection signal="rpm_updated" from="." to="chassis/cockpit/rpm_meter" method="_on_value_updated"]
|
||||||
|
|
|
@ -6,20 +6,16 @@
|
||||||
[ext_resource path="res://vehicles/steering_controller.gd" type="Script" id=4]
|
[ext_resource path="res://vehicles/steering_controller.gd" type="Script" id=4]
|
||||||
[ext_resource path="res://vehicles/pedal.gd" type="Script" id=5]
|
[ext_resource path="res://vehicles/pedal.gd" type="Script" id=5]
|
||||||
[ext_resource path="res://vehicles/meter.gd" type="Script" id=6]
|
[ext_resource path="res://vehicles/meter.gd" type="Script" id=6]
|
||||||
|
[ext_resource path="res://assets/engine.wav" type="AudioStream" id=7]
|
||||||
|
[ext_resource path="res://assets/wind woosh loop.ogg" type="AudioStream" id=8]
|
||||||
|
|
||||||
[sub_resource type="Curve" id=18]
|
[sub_resource type="Curve" id=18]
|
||||||
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.179245, 0.584091 ), 4.91185, 4.91185, 0, 0, Vector2( 0.603774, 0.954545 ), 6.05975, 6.05975, 0, 0, Vector2( 0.806604, 0.989773 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
|
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.179245, 0.584091 ), 4.91185, 4.91185, 0, 0, Vector2( 0.603774, 0.954545 ), 6.05975, 6.05975, 0, 0, Vector2( 0.806604, 0.989773 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
|
||||||
|
|
||||||
[sub_resource type="Curve" id=19]
|
|
||||||
_data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.127358, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.174528, 0.65 ), 0.0, 0.0, 0, 0, Vector2( 0.212264, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.353774, 0.35 ), 0.0, 0.0, 0, 0, Vector2( 0.363208, 0.968182 ), 0.0, 0.0, 0, 0, Vector2( 0.485849, 0.313636 ), 0.0, 0.0, 0, 0, Vector2( 0.627358, 0.140909 ), 0.0, 0.0, 0, 0, Vector2( 0.721698, 0.259091 ), 0.0, 0.0, 0, 0, Vector2( 0.745283, 0.623864 ), 0.0, 0.0, 0, 0, Vector2( 0.872642, 0.794318 ), 0.0, 0.0, 0, 0, Vector2( 0.915094, 0.248864 ), 0.0, 0.0, 0, 0, Vector2( 0.933962, 0.5125 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ]
|
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape" id=20]
|
[sub_resource type="CapsuleShape" id=20]
|
||||||
radius = 0.274866
|
radius = 0.274866
|
||||||
height = 2.75974
|
height = 2.75974
|
||||||
|
|
||||||
[sub_resource type="AudioStreamGenerator" id=12]
|
|
||||||
mix_rate = 5500.0
|
|
||||||
|
|
||||||
[sub_resource type="Gradient" id=13]
|
[sub_resource type="Gradient" id=13]
|
||||||
offsets = PoolRealArray( 0, 0.5, 1 )
|
offsets = PoolRealArray( 0, 0.5, 1 )
|
||||||
colors = PoolColorArray( 0, 0.278431, 0.270588, 1, 0.356863, 0.764706, 0.670588, 1, 1, 1, 1, 1 )
|
colors = PoolColorArray( 0, 0.278431, 0.270588, 1, 0.356863, 0.764706, 0.670588, 1, 1, 1, 1, 1 )
|
||||||
|
@ -53,38 +49,39 @@ radial_segments = 4
|
||||||
rings = 3
|
rings = 3
|
||||||
|
|
||||||
[node name="bugmobile" groups=["car"] instance=ExtResource( 2 )]
|
[node name="bugmobile" groups=["car"] instance=ExtResource( 2 )]
|
||||||
mass = 600.0
|
mass = 1900.0
|
||||||
script = ExtResource( 3 )
|
script = ExtResource( 3 )
|
||||||
max_engine_force = 320.0
|
max_engine_force = 1400.0
|
||||||
max_brake_force = 95.0
|
max_brake_force = 230.0
|
||||||
throttle_power = 8000.0
|
throttle_power = 8000.0
|
||||||
max_rpm_loss_ps = 2200.0
|
max_rpm_loss_ps = 2200.0
|
||||||
base_engine_pitch = 0.65
|
base_engine_pitch = 0.65
|
||||||
|
drag_factor = 0.85
|
||||||
|
downforce_factor = 1.8
|
||||||
gear_ratios = [ 3.5, 2.95, 2.64, 2.0, 1.67, 1.42 ]
|
gear_ratios = [ 3.5, 2.95, 2.64, 2.0, 1.67, 1.42 ]
|
||||||
final_drive = 4.36
|
final_drive = 4.36
|
||||||
max_rpm = 9000.0
|
max_rpm = 9000.0
|
||||||
power_curve = SubResource( 18 )
|
power_curve = SubResource( 18 )
|
||||||
sound_curve = SubResource( 19 )
|
|
||||||
|
|
||||||
[node name="rear_left" parent="." index="0"]
|
[node name="rear_left" parent="." index="0"]
|
||||||
use_as_traction = true
|
use_as_traction = true
|
||||||
wheel_radius = 0.52
|
wheel_radius = 0.52
|
||||||
wheel_rest_length = 0.47
|
wheel_rest_length = 0.47
|
||||||
wheel_friction_slip = 8.0
|
wheel_friction_slip = 5.54
|
||||||
suspension_travel = 0.4
|
suspension_travel = 0.35
|
||||||
suspension_stiffness = 9.0
|
suspension_stiffness = 12.0
|
||||||
suspension_max_force = 7000.0
|
suspension_max_force = 10000.0
|
||||||
damping_compression = 0.87
|
damping_compression = 0.87
|
||||||
damping_relaxation = 0.9
|
damping_relaxation = 0.9
|
||||||
|
|
||||||
[node name="front_left" parent="." index="2"]
|
[node name="front_left" parent="." index="2"]
|
||||||
use_as_steering = true
|
use_as_steering = true
|
||||||
wheel_radius = 0.35
|
wheel_radius = 0.35
|
||||||
wheel_rest_length = 0.45
|
wheel_rest_length = 0.47
|
||||||
wheel_friction_slip = 7.0
|
wheel_friction_slip = 4.45
|
||||||
suspension_travel = 0.45
|
suspension_travel = 0.55
|
||||||
suspension_stiffness = 12.0
|
suspension_stiffness = 15.0
|
||||||
suspension_max_force = 7000.0
|
suspension_max_force = 15000.0
|
||||||
damping_compression = 0.9
|
damping_compression = 0.9
|
||||||
damping_relaxation = 0.92
|
damping_relaxation = 0.92
|
||||||
|
|
||||||
|
@ -111,11 +108,11 @@ needle_path = NodePath("speed_needle")
|
||||||
[node name="front_right" parent="." index="4"]
|
[node name="front_right" parent="." index="4"]
|
||||||
use_as_steering = true
|
use_as_steering = true
|
||||||
wheel_radius = 0.35
|
wheel_radius = 0.35
|
||||||
wheel_rest_length = 0.45
|
wheel_rest_length = 0.47
|
||||||
wheel_friction_slip = 7.0
|
wheel_friction_slip = 4.45
|
||||||
suspension_travel = 0.45
|
suspension_travel = 0.55
|
||||||
suspension_stiffness = 12.0
|
suspension_stiffness = 15.0
|
||||||
suspension_max_force = 7000.0
|
suspension_max_force = 15000.0
|
||||||
damping_compression = 0.9
|
damping_compression = 0.9
|
||||||
damping_relaxation = 0.92
|
damping_relaxation = 0.92
|
||||||
|
|
||||||
|
@ -123,10 +120,10 @@ damping_relaxation = 0.92
|
||||||
use_as_traction = true
|
use_as_traction = true
|
||||||
wheel_radius = 0.52
|
wheel_radius = 0.52
|
||||||
wheel_rest_length = 0.47
|
wheel_rest_length = 0.47
|
||||||
wheel_friction_slip = 8.0
|
wheel_friction_slip = 5.54
|
||||||
suspension_travel = 0.4
|
suspension_travel = 0.35
|
||||||
suspension_stiffness = 9.0
|
suspension_stiffness = 12.0
|
||||||
suspension_max_force = 7000.0
|
suspension_max_force = 10000.0
|
||||||
damping_compression = 0.87
|
damping_compression = 0.87
|
||||||
damping_relaxation = 0.9
|
damping_relaxation = 0.9
|
||||||
|
|
||||||
|
@ -136,8 +133,8 @@ shape = SubResource( 20 )
|
||||||
|
|
||||||
[node name="engine_sound_player" type="AudioStreamPlayer3D" parent="." index="7"]
|
[node name="engine_sound_player" type="AudioStreamPlayer3D" parent="." index="7"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.791119, -2.27857 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.791119, -2.27857 )
|
||||||
stream = SubResource( 12 )
|
stream = ExtResource( 7 )
|
||||||
unit_db = 14.0
|
pitch_scale = 0.1
|
||||||
bus = "Sound"
|
bus = "Sound"
|
||||||
|
|
||||||
[node name="Smoke" type="Particles" parent="." index="8"]
|
[node name="Smoke" type="Particles" parent="." index="8"]
|
||||||
|
@ -170,6 +167,10 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.605405, 1.5324 )
|
||||||
[node name="static_follow" type="Position3D" parent="." index="16"]
|
[node name="static_follow" type="Position3D" parent="." index="16"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.88984, -4.78212 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.88984, -4.78212 )
|
||||||
|
|
||||||
|
[node name="wind_sound_player" type="AudioStreamPlayer3D" parent="." index="17"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.18462, 0.791153 )
|
||||||
|
stream = ExtResource( 8 )
|
||||||
|
|
||||||
[connection signal="brake_updated" from="." to="chassis/cockpit/brake_pedal" method="_on_value_updated"]
|
[connection signal="brake_updated" from="." to="chassis/cockpit/brake_pedal" method="_on_value_updated"]
|
||||||
[connection signal="clutch_updated" from="." to="chassis/cockpit/clutch_pedal" method="_on_value_updated"]
|
[connection signal="clutch_updated" from="." to="chassis/cockpit/clutch_pedal" method="_on_value_updated"]
|
||||||
[connection signal="rpm_updated" from="." to="chassis/cockpit/steering_controller/rpm_meter" method="_on_value_updated"]
|
[connection signal="rpm_updated" from="." to="chassis/cockpit/steering_controller/rpm_meter" method="_on_value_updated"]
|
||||||
|
|
|
@ -7,24 +7,19 @@ onready var sound_playback: AudioStreamPlayback = $tire_sound_player.get_stream_
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
_update_sound(1)
|
_update_sound(1)
|
||||||
# sound_player.play()
|
sound_player.playing = true
|
||||||
|
sound_player.stream_paused = true
|
||||||
|
|
||||||
|
|
||||||
func update(skidinfo: float) -> void:
|
func update(skidinfo: float) -> void:
|
||||||
_update_sound(skidinfo)
|
_update_sound(skidinfo)
|
||||||
if skidinfo < 0.5:
|
if skidinfo < 0.25:
|
||||||
emitting = true
|
emitting = true
|
||||||
|
sound_player.stream_paused = false
|
||||||
else:
|
else:
|
||||||
emitting = false
|
emitting = false
|
||||||
|
sound_player.stream_paused = true
|
||||||
|
|
||||||
|
|
||||||
func _update_sound(skidinfo: float) -> void:
|
func _update_sound(skidinfo: float) -> void:
|
||||||
sound_player.pitch_scale = 1 + (1 - skidinfo)
|
sound_player.pitch_scale = 1 + pow(skidinfo, 2) - skidinfo / 3
|
||||||
var to_fill = sound_playback.get_frames_available()
|
|
||||||
var factor = (1 - skidinfo) * 2
|
|
||||||
if to_fill <= 0:
|
|
||||||
return
|
|
||||||
while to_fill > 0:
|
|
||||||
sound_playback.push_frame(Vector2(1.0, 1.0) * factor)
|
|
||||||
factor += 1
|
|
||||||
to_fill -= 1
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
[gd_scene load_steps=8 format=2]
|
[gd_scene load_steps=8 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://vehicles/tire_smoke.gd" type="Script" id=1]
|
[ext_resource path="res://vehicles/tire_smoke.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://assets/tires_squal_loop.wav" type="AudioStream" id=2]
|
||||||
|
|
||||||
[sub_resource type="Curve" id=1]
|
[sub_resource type="Curve" id=1]
|
||||||
_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.0170454 ), 0.0, 0.0, 0, 0 ]
|
_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0.0170454 ), 0.0, 0.0, 0, 0 ]
|
||||||
|
@ -25,9 +26,6 @@ material = SubResource( 4 )
|
||||||
radial_segments = 4
|
radial_segments = 4
|
||||||
rings = 4
|
rings = 4
|
||||||
|
|
||||||
[sub_resource type="AudioStreamGenerator" id=6]
|
|
||||||
mix_rate = 5000.0
|
|
||||||
|
|
||||||
[node name="tire_smoke" type="Particles"]
|
[node name="tire_smoke" type="Particles"]
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.541801, 0 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.541801, 0 )
|
||||||
emitting = false
|
emitting = false
|
||||||
|
@ -39,8 +37,7 @@ draw_pass_1 = SubResource( 5 )
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
[node name="tire_sound_player" type="AudioStreamPlayer3D" parent="."]
|
[node name="tire_sound_player" type="AudioStreamPlayer3D" parent="."]
|
||||||
stream = SubResource( 6 )
|
stream = ExtResource( 2 )
|
||||||
unit_db = 25.0
|
max_db = 1.0
|
||||||
unit_size = 2.0
|
|
||||||
bus = "Sound"
|
bus = "Sound"
|
||||||
area_mask = 2
|
area_mask = 2
|
||||||
|
|
|
@ -21,6 +21,9 @@ export(float) var max_rpm_loss_ps = 3000.0
|
||||||
export(float) var base_engine_pitch = 0.5
|
export(float) var base_engine_pitch = 0.5
|
||||||
export(float) var expected_max_speed = 200
|
export(float) var expected_max_speed = 200
|
||||||
|
|
||||||
|
export(float) var drag_factor = 1.0
|
||||||
|
export(float) var downforce_factor = 1.0
|
||||||
|
|
||||||
export(Array) var gear_ratios = [3.4, 2.5, 2.0, 1.5, 1.25]
|
export(Array) var gear_ratios = [3.4, 2.5, 2.0, 1.5, 1.25]
|
||||||
export(float) var reverse_ratio = -3
|
export(float) var reverse_ratio = -3
|
||||||
export(float) var final_drive = 3.45
|
export(float) var final_drive = 3.45
|
||||||
|
@ -54,7 +57,7 @@ onready var rrsmoke: TireSmoke = $rr_tire_smoke
|
||||||
onready var rlsmoke: TireSmoke = $rl_tire_smoke
|
onready var rlsmoke: TireSmoke = $rl_tire_smoke
|
||||||
|
|
||||||
onready var engine_sound_player: AudioStreamPlayer3D = $engine_sound_player
|
onready var engine_sound_player: AudioStreamPlayer3D = $engine_sound_player
|
||||||
onready var engine_sound_playback: AudioStreamPlayback = $engine_sound_player.get_stream_playback()
|
onready var wind_sound_player: AudioStreamPlayer3D = $wind_sound_player
|
||||||
|
|
||||||
onready var max_steer_input_rad: float = deg2rad(max_steer_input)
|
onready var max_steer_input_rad: float = deg2rad(max_steer_input)
|
||||||
|
|
||||||
|
@ -89,6 +92,7 @@ func _ready():
|
||||||
|
|
||||||
_generate_engine_sound(0)
|
_generate_engine_sound(0)
|
||||||
engine_sound_player.play()
|
engine_sound_player.play()
|
||||||
|
wind_sound_player.play()
|
||||||
|
|
||||||
|
|
||||||
func get_cockpit_position() -> Node:
|
func get_cockpit_position() -> Node:
|
||||||
|
@ -198,6 +202,13 @@ func _physics_process(delta: float):
|
||||||
|
|
||||||
if GlobalSettings.auto_clutch or GlobalSettings.automatic_transmission:
|
if GlobalSettings.auto_clutch or GlobalSettings.automatic_transmission:
|
||||||
clutch_position = 1 - min(rpm, auto_clutch_rpm_limit) / auto_clutch_rpm_limit
|
clutch_position = 1 - min(rpm, auto_clutch_rpm_limit) / auto_clutch_rpm_limit
|
||||||
|
if throttle == 0.0 and linear_velocity.length() < 1:
|
||||||
|
clutch_position = 1
|
||||||
|
|
||||||
|
apply_central_impulse(linear_velocity * -1 * drag_factor)
|
||||||
|
apply_central_impulse(
|
||||||
|
linear_velocity.length() * -1 * global_transform.basis.y * downforce_factor
|
||||||
|
)
|
||||||
|
|
||||||
if gear_timer > 0:
|
if gear_timer > 0:
|
||||||
clutch_position = 1
|
clutch_position = 1
|
||||||
|
@ -220,6 +231,7 @@ func _physics_process(delta: float):
|
||||||
var power_factor = power_curve.interpolate_baked(rpm_factor)
|
var power_factor = power_curve.interpolate_baked(rpm_factor)
|
||||||
|
|
||||||
_generate_engine_sound(rpm_factor)
|
_generate_engine_sound(rpm_factor)
|
||||||
|
_generate_wind_sound(speed)
|
||||||
|
|
||||||
# Transfer to transmission
|
# Transfer to transmission
|
||||||
var transmission_input = power_factor * (1 - clutch_position) * _get_gear_ratio()
|
var transmission_input = power_factor * (1 - clutch_position) * _get_gear_ratio()
|
||||||
|
@ -259,22 +271,12 @@ func _physics_process(delta: float):
|
||||||
|
|
||||||
func _generate_engine_sound(rpm_factor):
|
func _generate_engine_sound(rpm_factor):
|
||||||
engine_sound_player.pitch_scale = base_engine_pitch + 2 * rpm_factor
|
engine_sound_player.pitch_scale = base_engine_pitch + 2 * rpm_factor
|
||||||
var to_fill = engine_sound_playback.get_frames_available()
|
engine_sound_player.unit_db = 1 + 2 * rpm_factor
|
||||||
var factor = rpm_factor
|
|
||||||
if to_fill <= 0:
|
|
||||||
return
|
func _generate_wind_sound(speed):
|
||||||
var fill_segment = 1.0 / to_fill
|
wind_sound_player.pitch_scale = 1 + speed / 150
|
||||||
var fill_percent = 0.0
|
wind_sound_player.unit_db = pow(speed, 2) / 1500 * (0.5 + drag_factor) - 20
|
||||||
while to_fill > 0:
|
|
||||||
engine_sound_playback.push_frame(Vector2(1.0, 1.0) * factor)
|
|
||||||
factor += (
|
|
||||||
cos(factor)
|
|
||||||
* sin(factor)
|
|
||||||
* (1 + to_fill % 2)
|
|
||||||
* ((sound_curve.interpolate_baked(fill_percent) - 0.5) * 2)
|
|
||||||
)
|
|
||||||
to_fill -= 1
|
|
||||||
fill_percent += fill_segment
|
|
||||||
|
|
||||||
|
|
||||||
func _synchronize():
|
func _synchronize():
|
||||||
|
|
Loading…
Reference in New Issue