Compare commits

..

11 Commits

Author SHA1 Message Date
Sebastian Lohff 807d9e2b0f Make WebMIDI optional, MIDI for multiplayer
We now only open MIDI by default on non-Web platforms. On web, there is
an extra button to open MIDI devices. This allows us to no longer pester
users with the "allow MIDI" popup when they don't want to use MIDI.

If MIDI devices have been opened, the multiplayer part of this project
now uses it as well, in the same way the "singleplayer" part does it.
2025-05-10 20:32:19 +02:00
Sebastian Lohff cfddacb278 Renaming / moving buttons
Move "Leave" buttons always to upper right of screen. The "Get a Wav"
button now has a text that expresses better what it does depending on
the platform (save, download, share).
2025-05-10 20:32:19 +02:00
Sebastian Lohff d25f7fe0a3 Better player tones, back button 2025-05-10 20:32:19 +02:00
Sebastian Lohff bdea597057 Autoconnect, reconnect, connection display
We can now autoconnect via parameter on web, e.g. `freq=430.200`, which
then autoconnects to that frequency, creating it when it is not already
created. We also now reconnect on connection failure and display the
connection state down below.
2025-05-10 20:32:19 +02:00
Sebastian Lohff 9d4b72d85f CW server: send out messages in parallel
We now send out messages to all participants at the same time (or more
or less, as asyncio permits). To not fail in case we can't send the
message to one player, we ignore send-exceptions in these occasions and
hope that the `for data in self.websocket` in _handle_client() will
throw an error and kick the client out of our game.
2025-05-10 20:32:19 +02:00
Sebastian Lohff bfe3418f79 Also add Utils script 2025-05-10 20:32:19 +02:00
Sebastian Lohff 35d8abb2a9 MP: Logging, test js parameters (broken) 2025-05-10 20:32:19 +02:00
Sebastian Lohff 1f6c534b1a Working Multiplayer
...now with a GUI Theme! Players can leave a room as well. Actually
usable on mobile!
2025-05-10 20:32:19 +02:00
Sebastian Lohff a0ee2491dd External multiplayer server test 2025-05-10 20:31:46 +02:00
Sebastian Lohff 0bd80b400b Further multiplayer progress (still broken) 2025-05-10 20:19:06 +02:00
Sebastian Lohff 9442e3cdfb First (non-functional) multiplayer test 2025-04-24 15:44:50 +02:00
4 changed files with 49 additions and 13 deletions

View File

@ -93,6 +93,11 @@ text = "Freq:"
unique_name_in_owner = true
layout_mode = 2
[node name="LeaveButton" type="Button" parent="VBoxContainer/MorseView/VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 10
text = "Leave Frequency"
[node name="PlayerContainer" type="VBoxContainer" parent="VBoxContainer/MorseView/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
@ -104,10 +109,6 @@ size_flags_vertical = 3
size_flags_stretch_ratio = 2.0
text = "MORSE"
[node name="LeaveButton" type="Button" parent="VBoxContainer/MorseView/VBoxContainer"]
layout_mode = 2
text = "Leave Frequency"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
@ -145,8 +146,8 @@ autowrap_mode = 2
[connection signal="pressed" from="VBoxContainer/ConnectView/VBoxContainer/HBoxContainer/BackButton" to="." method="_on_back_button_pressed"]
[connection signal="pressed" from="VBoxContainer/ConnectView/VBoxContainer/RefreshButton" to="." method="_on_refresh_button_pressed"]
[connection signal="item_clicked" from="VBoxContainer/ConnectView/VBoxContainer/FreqList" to="." method="_on_freq_list_join"]
[connection signal="pressed" from="VBoxContainer/MorseView/VBoxContainer/HBoxContainer/LeaveButton" to="." method="_on_leave_button_pressed"]
[connection signal="button_down" from="VBoxContainer/MorseView/VBoxContainer/MorseButton" to="." method="_on_morse_button_button_down"]
[connection signal="button_up" from="VBoxContainer/MorseView/VBoxContainer/MorseButton" to="." method="_on_morse_button_button_up"]
[connection signal="pressed" from="VBoxContainer/MorseView/VBoxContainer/LeaveButton" to="." method="_on_leave_button_pressed"]
[connection signal="gui_input" from="VBoxContainer/HBoxContainer/HBoxContainer2/Label" to="." method="_on_error_label_gui_input"]
[connection signal="gui_input" from="VBoxContainer/HBoxContainer/HBoxContainer2/ErrorLabel" to="." method="_on_error_label_gui_input"]

View File

@ -20,24 +20,30 @@ func fill_buffer():
phase = fmod(phase + increment, 1.0)
func _ready():
match OS.get_name():
"Android":
%WavButton.text = "Share Wav"
"Web":
%WavButton.text = "Download Wav"
$Player.stream.mix_rate = sample_hz
$Player.volume_db = -100
$Player.play()
playback = $Player.get_stream_playback()
fill_buffer()
if OS.get_name() != "Web":
OS.open_midi_inputs()
print(OS.get_connected_midi_inputs())
else:
%MidiButton.visible = true
if multiplayer_enabled:
%MultiplayerButton.visible = true
print("External freq: ", Utils.get_external_freq_param())
if Utils.get_external_freq_param():
print("Direct connect to external freq: ", Utils.get_external_freq_param())
_on_multiplayer_button_pressed()
# FIXME: make this dependant on button
OS.open_midi_inputs()
print(OS.get_connected_midi_inputs())
func set_morse_state(state: bool):
MorseState.set_state(state)
@ -159,3 +165,8 @@ func _on_reset_button_pressed() -> void:
func _on_multiplayer_button_pressed() -> void:
get_tree().change_scene_to_file("res://scenes/MultiplayerConnect.tscn")
func _on_midi_button_pressed() -> void:
OS.open_midi_inputs()
print(OS.get_connected_midi_inputs())

View File

@ -55,14 +55,23 @@ size_flags_stretch_ratio = 2.0
text = "MORSE"
[node name="WavButton" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
text = "Write Wav"
text = "Save Wav"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
[node name="MidiButton" type="Button" parent="VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
size_flags_stretch_ratio = 0.25
text = "Open
Midi"
[node name="ResetButton" type="Button" parent="VBoxContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
@ -88,5 +97,6 @@ script = ExtResource("3_sugp2")
[connection signal="button_down" from="VBoxContainer/MorseButton" to="." method="_on_morse_button_down"]
[connection signal="button_up" from="VBoxContainer/MorseButton" to="." method="_on_morse_button_up"]
[connection signal="pressed" from="VBoxContainer/WavButton" to="." method="_on_wav_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/MidiButton" to="." method="_on_midi_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/ResetButton" to="." method="_on_reset_button_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/MultiplayerButton" to="." method="_on_multiplayer_button_pressed"]

View File

@ -225,6 +225,20 @@ func _on_morse_button_button_up() -> void:
return
set_morse_state(false)
func _input(input_event):
if input_event is InputEventMIDI:
_process_midi_event(input_event)
func _process_midi_event(midi_event):
if not mmb_self:
return
if midi_event.channel in [0, 9]:
if midi_event.message == MIDI_MESSAGE_NOTE_ON:
set_morse_state(true)
elif midi_event.message == MIDI_MESSAGE_NOTE_OFF:
set_morse_state(false)
func _on_leave_button_pressed() -> void:
send_data({"cmd": "leave"})