Skip to content

Commit 19f2f97

Browse files
committed
Improve visuals and sound
* Adds initial gnd_skydome addon (solves #73) * Adds initial gnd_sfx addon (solves #90) * Adds initial gnd_weather addon for weather system (related to #74 and #73) * Adds more sounds to SM42 demo
1 parent 9b6a10e commit 19f2f97

100 files changed

Lines changed: 11085 additions & 391 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,4 @@ docker-run-tests: docker-build-tests
126126

127127

128128
run-tests: compile
129-
godot --path demo --headless -s addons/gut/gut_cmdln.gd -gdir=res://tests/ -gexit
129+
godot --path demo --headless -s addons/gut/gut_cmdln.gd -gdir=res://tests/,res://addons/gnd_sfx/tests/ -gexit

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ git submodule update --init
137137
Then run tests from the command line (if you have `make` installed, you can use shortcut `make run-tests`):
138138

139139
```bash
140-
godot --path demo --headless -s addons/gut/gut_cmdln.gd -gdir=res://tests/ -gexit
140+
godot --path demo --headless -s addons/gut/gut_cmdln.gd -gdir=res://tests/,res://addons/gnd_sfx/tests/ -gexit
141141
```
142142

143143

addons/libmaszyna/cabin/base_cabin_tool_3d.gd

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ func _process_dirty(delta):
1818
func _process_tool(delta):
1919
pass
2020

21+
func get_cabin() -> Cabin3D:
22+
var node = get_parent()
23+
while node:
24+
if node is Cabin3D:
25+
return node
26+
node = node.get_parent()
27+
return null
28+
2129
func _process(delta):
2230
if _dirty:
2331
_dirty = false

addons/libmaszyna/cabin/cabin_3d.gd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ var _dirty = true
77
var _cabin_ready:bool = false
88
var _e3d_instances:Array[E3DModelInstance] = []
99
var _e3d_loaded_count:int = 0
10+
var controller: TrainController
11+
1012

1113
@export_node_path("TrainController") var controller_path:NodePath = NodePath(""):
1214
set(x):
@@ -18,11 +20,16 @@ var _e3d_loaded_count:int = 0
1820
@export var camera_bound_max = Vector3.ZERO
1921
@export var camera_bound_enabled:bool = false
2022
@export var driver_position = Vector3.ZERO
23+
@export var sound_bank:SfxBank
2124

2225
func get_camera_transform():
2326
return global_transform.translated_local(driver_position)
2427

28+
func is_cabin_ready() -> bool:
29+
return _cabin_ready
30+
2531
func _propagate_train_controller(node: Node, controller: TrainController):
32+
self.controller = controller
2633
for child in node.get_children():
2734
_propagate_train_controller(child, controller)
2835
if "controller_path" in child:

addons/libmaszyna/cabin/cabin_button.gd

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ enum ControllerMode { OnOff, On, Off }
3939
if pushed:
4040
_target_mesh_rotation = x
4141
@export var speed = 10.0
42-
@export var sound_on:AudioStream
43-
@export var sound_off:AudioStream
42+
@export var sound_event = "cabin_button"
4443
@export var sound_max_distance:float = 3.0:
4544
set(x):
4645
sound_max_distance = x
@@ -59,17 +58,24 @@ var _t:float = 0.0
5958

6059
var _enabled:bool = true
6160
var _setup_phase:bool = true
62-
var _sound:AudioStreamPlayer3D = AudioStreamPlayer3D.new()
61+
var _sound:SfxPlayer3D = SfxPlayer3D.new()
6362

6463
func _ready():
65-
add_child(_sound)
6664
_sound.max_distance = sound_max_distance
65+
_sound.max_tracks = 2
66+
var cabin = get_cabin()
67+
if cabin:
68+
_sound.bank = cabin.sound_bank
6769
connect("pushed_changed", self._on_pushed_changed)
6870
controller_changed.connect(_update_state)
6971
Console.console_toggled.connect(_on_console_toggled)
7072

7173
func _enter_tree():
7274
_setup_phase = true
75+
add_child(_sound)
76+
77+
func _exit_tree() -> void:
78+
remove_child(_sound)
7379

7480
func _on_console_toggled(visible:bool):
7581
_enabled = not visible
@@ -124,9 +130,10 @@ func _process_tool(delta):
124130
_mesh.position = _mesh_original_position + _current_position
125131

126132
func _play_sound():
127-
_sound.stream = sound_on if pushed else sound_off
128-
if _sound.stream:
129-
_sound.play()
133+
if pushed:
134+
_sound.play(sound_event)
135+
else:
136+
_sound.stop(sound_event)
130137

131138
func _on_pushed_changed():
132139
if pushed:
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
[gd_scene load_steps=2 format=3 uid="uid://c0toij1foexq6"]
1+
[gd_scene format=3 uid="uid://c0toij1foexq6"]
22

33
[ext_resource type="Script" uid="uid://brys456def41l" path="res://addons/libmaszyna/cabin/cabin_button.gd" id="1_glqim"]
44

5-
[node name="CabinButton" type="Node3D"]
5+
[node name="CabinButton" type="Node3D" unique_id=167396750]
66
script = ExtResource("1_glqim")
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
[gd_scene load_steps=2 format=3 uid="uid://cfj82gn1nfl36"]
1+
[gd_scene format=3 uid="uid://cfj82gn1nfl36"]
22

33
[ext_resource type="Script" uid="uid://c4lj08dvqxvhn" path="res://addons/libmaszyna/cabin/cabin_gauge.gd" id="1_5vh3x"]
44

5-
[node name="CabinGauge" type="Node3D"]
5+
[node name="CabinGauge" type="Node3D" unique_id=258192697]
66
script = ExtResource("1_5vh3x")
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
extends BaseCabinTool3D
2+
class_name CabinHasler
3+
4+
@export var sound_event : StringName = ""
5+
@export var speed_parameter : StringName = "speed"
6+
7+
var _cabin:Cabin3D
8+
var _sfx:SfxPlayer3D
9+
10+
func _ready() -> void:
11+
_cabin = get_cabin()
12+
if not _cabin:
13+
return
14+
_sfx = SfxPlayer3D.new()
15+
add_child(_sfx)
16+
_sfx.bank = _cabin.sound_bank
17+
18+
func _exit_tree() -> void:
19+
if _sfx:
20+
remove_child(_sfx)
21+
_sfx = null
22+
23+
func _process_tool(delta):
24+
if not _cabin or not _sfx or not _controller:
25+
return
26+
var speed = _controller.state.get("speed", 0.0)
27+
if speed > 0.1 and not _sfx.is_playing(sound_event):
28+
_sfx.play(sound_event, 0.0, {speed_parameter: speed})
29+
elif speed <= 0.1 and _sfx.is_playing(sound_event):
30+
_sfx.stop(sound_event, 0.0)
31+
elif _sfx.is_playing(sound_event):
32+
_sfx.modulate(sound_event, {speed_parameter: speed})
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://cigrhgepj7tlg

addons/libmaszyna/cabin/cabin_switch.gd

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ func _handle_position_change(prev, current) -> int:
193193
_controller.send_command(command_set, current)
194194

195195
if state_property and _controller:
196-
return _controller.state.get(state_property, current)
196+
var state_value = _controller.state.get(state_property, current)
197+
return state_value
197198
else:
198199
return current

0 commit comments

Comments
 (0)