Compare commits

...

70 Commits

Author SHA1 Message Date
Bucket Of Chicken cfb4d9f9d3 improved the streamer window 2025-07-06 06:18:05 +02:00
Bucket Of Chicken ef3f0f6948 remove git plugin 2025-07-06 05:17:00 +02:00
Bucket Of Chicken 8b15c4d2c1 langueage selector 2025-07-05 12:23:51 +02:00
Bucket Of Chicken a439c71e56 last minute fixes 2025-07-05 11:30:02 +02:00
Bucket Of Chicken 2d295b3c82 readme 2025-07-05 11:24:00 +02:00
Bucket Of Chicken 4b96f9aa46 last few translations 2025-07-05 11:07:00 +02:00
Bucket Of Chicken a3306d29bd translations 2025-07-05 08:13:18 +02:00
Bucket Of Chicken 0907d6baea Update playing_now_window.tscn 2025-07-05 07:11:18 +02:00
Bucket Of Chicken 59bac356e8 wip playing windopw changes 2025-07-05 07:11:02 +02:00
Bucket Of Chicken f9edac3965 Update export_presets.cfg 2025-06-30 08:28:45 +02:00
Bucket Of Chicken 0d04eca330 fix spelling mistakes and bump version 2025-06-29 10:56:31 +02:00
Bucket Of Chicken 11b3e7512d fix old hyperlinks 2025-06-29 10:51:49 +02:00
Bucket Of Chicken 3093f6fb6b simplaudio birthday 2025-06-29 10:29:52 +02:00
Bucket Of Chicken dd3d64bdfb bump vesion 2025-05-19 16:13:43 +02:00
Bucket Of Chicken f28d92a498 fixed discord not being disabled when the button is unchecked 2025-05-18 21:09:13 +02:00
Bucket Of Chicken 750d0f844a cough cough 2025-05-17 23:32:04 +02:00
Bucket Of Chicken f7ed6749bf update v1.5.5 2025-05-17 23:14:03 +02:00
notdraimdev 5a5d6f90e6 actually added "important" updates 2024-11-25 20:56:28 +01:00
notdraimdev b4fb35ceeb added "important" updates 2024-11-25 20:56:08 +01:00
notdraimdev cbdb3a4e52 adjusted playing now window + adjustments to the save system 2024-11-25 20:27:27 +01:00
notdraimdev 0c21592f91 whoops 2024-11-19 22:56:19 +01:00
notdraimdev dde309291e bug fixes, and a easter egg 2024-11-05 14:26:55 +01:00
notdraimdev 4a83c33452 fixed hiding in failed screen 2024-11-02 20:33:49 +01:00
notdraimdev accd1fe26f Patchnotes inside simplaudio 2024-11-02 19:23:51 +01:00
notdraimdev 45b758627e Delete improvements 2024-11-02 19:13:52 +01:00
notdraimdev 833bfc3650 Loading failed screen, small fixes 2024-11-02 19:05:54 +01:00
notdraimdev 8557adbed5 Credits + new backrounds 2024-11-02 03:38:28 +01:00
notdraimdev 891bfc7382 "bug" fixes 2024-11-02 02:36:54 +01:00
notdraimdev 424e591064 added easter egg
bug fixes
2024-11-01 23:10:56 +01:00
notdraimdev 810d5c40de jif support 2024-10-27 14:46:18 +01:00
notdraimdev 81c30245c4 s 2024-10-27 14:36:02 +01:00
notdraimdev e8403a2caf ssssss 2024-10-27 14:24:21 +01:00
notdraimdev 7947422027 y 2024-10-27 14:15:02 +01:00
notdraimdev f14a8170d6 dlete songs 2024-10-27 14:14:21 +01:00
Bucket Of Chicken 35810868fb Update issue templates 2024-10-27 13:12:53 +01:00
notdraimdev c418b417ec Better song selection 2024-10-27 12:59:09 +01:00
notdraimdev 99d4b8dfcc THE sigma??? 2024-10-12 00:29:45 +02:00
notdraimdev e77c7da068 jaja 2024-10-10 14:29:37 +02:00
notdraimdev ed376a728b Human error failsave for updating 2024-10-09 21:29:25 +02:00
notdraimdev 5da51b2999 Linux support + more reliable playlist/ song downloader 2024-10-09 20:27:16 +02:00
notdraimdev 3a8ec2e6de Removed elitism 2024-10-08 23:43:00 +02:00
notdraimdev d87a69fc9f asssd 2024-10-08 23:41:54 +02:00
notdraimdev 3747eb6f8c ss 2024-10-08 23:35:56 +02:00
notdraimdev a602821d7b aa 2024-10-08 23:35:52 +02:00
notdraimdev b4b1dcdc4a Linux crash fixes 2024-10-08 23:33:47 +02:00
notdraimdev 03663d8698 guess what 2024-10-04 15:10:47 +02:00
notdraimdev 4b05dd21e3 asanother fix 2024-10-04 15:09:54 +02:00
notdraimdev 9999f23629 fixes 2024-10-04 15:08:51 +02:00
notdraimdev 1503329864 Smooth interactions 2024-10-04 15:04:13 +02:00
notdraimdev dedebf013c Smooth interactions 2024-10-04 15:03:57 +02:00
notdraimdev 9745cceb12 Consistency 2024-10-04 14:15:20 +02:00
notdraimdev 1de3ced558 tuyzcx 2024-10-02 17:44:30 +02:00
notdraimdev aea4b42da6 Quotes 2024-10-02 17:40:56 +02:00
notdraimdev b06f15a2cd aaaaaaaaa 2024-10-02 17:01:10 +02:00
notdraimdev 8e3c158911 yes 2024-10-02 17:01:10 +02:00
Bucket Of Chicken 3151974621 Developement
Development
2024-10-01 22:36:18 +02:00
Bucket Of Chicken a0d2e7827e Merge branch 'main' into development 2024-10-01 22:35:48 +02:00
notdraimdev 7d0882856b yes 2024-10-01 22:33:24 +02:00
notdraimdev 340a29f8e8 asas 2024-10-01 20:08:46 +02:00
notdraimdev 02e8c3545a asas 2024-10-01 20:06:01 +02:00
notdraimdev 3a698b1181 a 2024-10-01 20:05:10 +02:00
notdraimdev faa1d62c2a hopefully fixes 2024-10-01 20:04:37 +02:00
Bucket Of Chicken ba54b7b195 Better downloader (#10)
* Better downloader

* new version
2024-10-01 19:18:30 +02:00
Bucket Of Chicken 82c4ff4cf3 Merge branch 'main' into development 2024-10-01 19:17:55 +02:00
notdraimdev 73d0bf7c5a new version 2024-10-01 19:15:04 +02:00
notdraimdev 4fd83f4891 ss 2024-10-01 19:12:34 +02:00
notdraimdev 796920a8dc asas 2024-10-01 19:10:59 +02:00
notdraimdev f56c40ce7f errm 2024-10-01 19:09:42 +02:00
notdraimdev be75e251a2 Better downloader 2024-10-01 19:08:49 +02:00
notdraimdev a9f5aeda81 somethingasas 2024-10-01 13:51:54 +02:00
129 changed files with 1988 additions and 2011 deletions
+31
View File
@@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
+1
View File
@@ -0,0 +1 @@
uid://dgwslfj43mu1y
Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

+1
View File
@@ -0,0 +1 @@
uid://cv5aoaprqfuhx
+1
View File
@@ -0,0 +1 @@
uid://cf1rsngucr7e2
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bdpat2sfflaxq"
path="res://.godot/imported/Youtube_logo.png-22e44a6c4c4bd7a2da4492032ea62686.ctex"
uid="uid://bmbxyma4ra46p"
path="res://.godot/imported/Download.png-3a4ebaeb081d510c32ff24ab28484d7b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Youtube_logo.png"
dest_files=["res://.godot/imported/Youtube_logo.png-22e44a6c4c4bd7a2da4492032ea62686.ctex"]
source_file="res://Download.png"
dest_files=["res://.godot/imported/Download.png-3a4ebaeb081d510c32ff24ab28484d7b.ctex"]
[params]
BIN
View File
Binary file not shown.
+24
View File
@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://n8g3v41u2u48"
path="res://.godot/imported/Error.wav-f6422fca2f257bd634183d1c1c7a43ba.sample"
[deps]
source_file="res://Error.wav"
dest_files=["res://.godot/imported/Error.wav-f6422fca2f257bd634183d1c1c7a43ba.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_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cmr1ij4s7xa27"
path="res://.godot/imported/IMG_20241015_162213_033(1).jpg-9929b05aea172bc5afc1063f329c9b14.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://IMG_20241015_162213_033(1).jpg"
dest_files=["res://.godot/imported/IMG_20241015_162213_033(1).jpg-9929b05aea172bc5afc1063f329c9b14.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

After

Width:  |  Height:  |  Size: 782 KiB

+34
View File
@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2vacx4h6vn46"
path="res://.godot/imported/IMG_20241015_175925_722(1).jpg-b4169e075837dc19cf9c8f3902aa4f18.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://IMG_20241015_175925_722(1).jpg"
dest_files=["res://.godot/imported/IMG_20241015_175925_722(1).jpg-b4169e075837dc19cf9c8f3902aa4f18.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 935 B

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 2.9 KiB

+1
View File
@@ -0,0 +1 @@
uid://b8g2xx06g626m
+454 -180
View File
File diff suppressed because it is too large Load Diff
@@ -0,0 +1 @@
uid://rnxfmtoo2yn4
@@ -0,0 +1 @@
uid://cdigfnlqg2r8l
@@ -0,0 +1 @@
uid://bs5vnv3baji7f
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 728 B

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 859 B

After

Width:  |  Height:  |  Size: 7.8 KiB

+1 -1
View File
@@ -1,6 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://c33qaelwn46f4"]
[ext_resource type="Script" path="res://playlist_display.gd" id="1_h0jh1"]
[ext_resource type="Script" uid="uid://cs12qambyvou8" path="res://playlist_display.gd" id="1_h0jh1"]
[ext_resource type="Texture2D" uid="uid://dwvy6crqhardn" path="res://Dropdown.png" id="2_im6ur"]
[sub_resource type="LabelSettings" id="LabelSettings_ky8oc"]
+112 -21
View File
@@ -1,9 +1,10 @@
[gd_scene load_steps=9 format=3 uid="uid://dqg674t6kun4e"]
[gd_scene load_steps=11 format=3 uid="uid://dqg674t6kun4e"]
[ext_resource type="Script" path="res://settings.gd" id="1_uaa7d"]
[ext_resource type="Script" path="res://eq_settings.gd" id="2_1n4m6"]
[ext_resource type="Script" uid="uid://vnpslgl788du" path="res://settings.gd" id="1_uaa7d"]
[ext_resource type="Script" uid="uid://kt7n1epi3ng8" path="res://eq_settings.gd" id="2_1n4m6"]
[ext_resource type="Texture2D" uid="uid://1rstn6r2wisy" path="res://X.png" id="2_iuivb"]
[ext_resource type="Texture2D" uid="uid://pgij783wgbhn" path="res://File.png" id="2_jmen4"]
[ext_resource type="Script" uid="uid://cej7efsj2cyen" path="res://language_button.gd" id="2_sfvul"]
[sub_resource type="LabelSettings" id="LabelSettings_ouq8m"]
font_size = 30
@@ -17,6 +18,9 @@ font_size = 11
[sub_resource type="LabelSettings" id="LabelSettings_cwn10"]
font_size = 15
[sub_resource type="LabelSettings" id="LabelSettings_i51gs"]
font_size = 50
[node name="SettingsMenuChild" type="Control"]
custom_minimum_size = Vector2(576, 493)
layout_mode = 3
@@ -64,7 +68,7 @@ custom_minimum_size = Vector2(400, 26.975)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 3
text = "THIRD PARTY APPS"
text = "INTIGRATIONS"
label_settings = SubResource("LabelSettings_2bhor")
horizontal_alignment = 1
vertical_alignment = 1
@@ -74,13 +78,13 @@ autowrap_mode = 2
layout_mode = 2
size_flags_horizontal = 0
focus_mode = 0
text = "Discord Rich Presence"
text = "DRPC"
[node name="disclaimer" type="Label" parent="ScrollContainer/VBoxContainer"]
custom_minimum_size = Vector2(229.895, 0)
layout_mode = 2
size_flags_horizontal = 0
text = "NOTE: After disableing a restart is needed"
text = "DRPC_NOTE"
label_settings = SubResource("LabelSettings_p55k3")
horizontal_alignment = 1
vertical_alignment = 1
@@ -94,13 +98,32 @@ layout_mode = 2
custom_minimum_size = Vector2(400, 26.975)
layout_mode = 2
size_flags_vertical = 3
text = "LOOKs"
text = "LOOKS"
label_settings = SubResource("LabelSettings_2bhor")
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 2
uppercase = true
[node name="Seperator8" type="Control" parent="ScrollContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 16.07)
layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="ScrollContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "LANGUAGE"
[node name="LanguageButton" type="MenuButton" parent="ScrollContainer/VBoxContainer/HBoxContainer" node_paths=PackedStringArray("settings")]
custom_minimum_size = Vector2(50, 0)
layout_mode = 2
text = "SELECT"
flat = false
script = ExtResource("2_sfvul")
settings = NodePath("../../../..")
[node name="Seperator3" type="Control" parent="ScrollContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 16.07)
layout_mode = 2
@@ -133,13 +156,13 @@ size_flags_horizontal = 0
custom_minimum_size = Vector2(0, 25.35)
layout_mode = 2
size_flags_horizontal = 4
text = "Select Background"
text = "BS_SELECT"
[node name="ResetBG" type="Button" parent="ScrollContainer/VBoxContainer/VBoxContainer/HBoxContainer"]
custom_minimum_size = Vector2(0, 25.35)
layout_mode = 2
size_flags_horizontal = 4
text = "Reset BG"
text = "RESET_BG"
[node name="SelectBGDialog" type="FileDialog" parent="ScrollContainer/VBoxContainer"]
title = "Open a File"
@@ -148,7 +171,7 @@ transient = false
ok_button_text = "Open"
file_mode = 0
access = 2
filters = PackedStringArray("*.png", "*.jpg", "*.jpeg", "*")
filters = PackedStringArray("*.png", "*.jpg ", "*.jpeg", "*.gif", "*")
show_hidden_files = true
use_native_dialog = true
@@ -160,7 +183,7 @@ layout_mode = 2
custom_minimum_size = Vector2(400, 26.975)
layout_mode = 2
size_flags_vertical = 3
text = "SOUND SETTINGS"
text = "SETTINGS_SOUND"
label_settings = SubResource("LabelSettings_2bhor")
horizontal_alignment = 1
vertical_alignment = 1
@@ -204,11 +227,11 @@ vertical_alignment = 1
autowrap_mode = 2
[node name="FUN" type="Label" parent="ScrollContainer/VBoxContainer/PitchAdjustSettings/PitchAdjustSettings"]
custom_minimum_size = Vector2(94.52, 7.51)
custom_minimum_size = Vector2(100.49, 7.51)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
text = "pitch/speed"
text = "PITCH_SPEED"
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 2
@@ -217,7 +240,7 @@ autowrap_mode = 2
layout_mode = 2
size_flags_horizontal = 0
focus_mode = 0
text = "Reverb"
text = "REVERB"
[node name="ReverbSettings" type="VBoxContainer" parent="ScrollContainer/VBoxContainer"]
visible = false
@@ -260,7 +283,7 @@ custom_minimum_size = Vector2(94.52, 7.51)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
text = "Room size"
text = "ROOM_SIZE"
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 2
@@ -344,7 +367,7 @@ custom_minimum_size = Vector2(94.52, 7.51)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
text = "Spread"
text = "SPREAD"
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 2
@@ -364,7 +387,7 @@ script = ExtResource("2_1n4m6")
layout_mode = 2
size_flags_horizontal = 0
focus_mode = 0
text = "Compression"
text = "COMPRESSION"
[node name="CompressionContainer" type="VBoxContainer" parent="ScrollContainer/VBoxContainer"]
visible = false
@@ -408,7 +431,7 @@ custom_minimum_size = Vector2(94.52, 7.51)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
text = "Threshold"
text = "THRESHOLD"
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 2
@@ -503,6 +526,72 @@ autowrap_mode = 2
custom_minimum_size = Vector2(0, 16.07)
layout_mode = 2
[node name="MISC" type="Label" parent="ScrollContainer/VBoxContainer"]
custom_minimum_size = Vector2(400, 26.975)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 3
text = "MISC"
label_settings = SubResource("LabelSettings_2bhor")
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 2
[node name="NowPlayingWindowButton" type="CheckBox" parent="ScrollContainer/VBoxContainer"]
layout_mode = 2
focus_mode = 0
text = "STREAMER_WINDOW"
[node name="NowPlayingInfo" type="Label" parent="ScrollContainer/VBoxContainer"]
custom_minimum_size = Vector2(229.895, 0)
layout_mode = 2
size_flags_horizontal = 0
text = "STREAMER_NOTE"
label_settings = SubResource("LabelSettings_p55k3")
vertical_alignment = 1
autowrap_mode = 2
[node name="Credits" type="VBoxContainer" parent="ScrollContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="ScrollContainer/VBoxContainer/Credits"]
layout_mode = 2
size_flags_horizontal = 4
text = "CREDITS"
label_settings = SubResource("LabelSettings_i51gs")
[node name="Label5" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
layout_mode = 2
size_flags_horizontal = 4
text = "Godot"
underline = 1
uri = "https://godotengine.org"
[node name="Label2" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
layout_mode = 2
size_flags_horizontal = 4
text = "YT_DL"
underline = 1
uri = "https://github.com/Nolkaloid/godot-yt-dlp"
[node name="Label3" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
layout_mode = 2
size_flags_horizontal = 4
text = "DRPCL"
underline = 1
uri = "https://github.com/vaporvee/discord-rpc-godot"
[node name="Label4" type="LinkButton" parent="ScrollContainer/VBoxContainer/Credits"]
layout_mode = 2
size_flags_horizontal = 4
text = "GDGIF"
underline = 1
uri = "https://github.com/BOTLANNER/godot-gif"
[node name="Seperator7" type="Control" parent="ScrollContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 16.07)
layout_mode = 2
[node name="TimeListening" type="Label" parent="ScrollContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 4
@@ -513,21 +602,22 @@ layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
focus_mode = 0
text = "RESET SETTINGS"
text = "RESET_SETTINGS"
[node name="Exit" type="Button" parent="."]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -72.0
offset_bottom = 72.0
offset_left = -40.0
offset_bottom = 40.0
grow_horizontal = 0
size_flags_horizontal = 8
size_flags_vertical = 0
focus_mode = 0
icon = ExtResource("2_iuivb")
flat = true
expand_icon = true
[connection signal="toggled" from="ScrollContainer/VBoxContainer/DiscordRichPresenceButton" to="." method="_on_discord_rich_presence_button_toggled"]
[connection signal="pressed" from="ScrollContainer/VBoxContainer/VBoxContainer/HBoxContainer/SelectBG" to="." method="_on_select_bg_pressed"]
@@ -543,6 +633,7 @@ flat = true
[connection signal="drag_ended" from="ScrollContainer/VBoxContainer/CompressionContainer/ThresholdSettings/ThresholdSlider" to="." method="_on_threshold_slider_drag_ended"]
[connection signal="drag_ended" from="ScrollContainer/VBoxContainer/CompressionContainer/RatioSettings/RatioSlider" to="." method="_on_ratio_slider_drag_ended"]
[connection signal="drag_ended" from="ScrollContainer/VBoxContainer/CompressionContainer/GainSettings/GainSlider" to="." method="_on_gain_slider_drag_ended"]
[connection signal="toggled" from="ScrollContainer/VBoxContainer/NowPlayingWindowButton" to="." method="_on_now_playing_window_button_toggled"]
[connection signal="pressed" from="ScrollContainer/VBoxContainer/Reset" to="." method="_on_reset_pressed"]
[connection signal="pressed" from="ScrollContainer/VBoxContainer/Reset" to="ScrollContainer/VBoxContainer/EQSettings" method="_on_reset_pressed"]
[connection signal="pressed" from="Exit" to="." method="_on_exit_pressed"]
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 B

After

Width:  |  Height:  |  Size: 8.0 KiB

+1
View File
@@ -0,0 +1 @@
uid://bx75h6xic1hi7
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://drj8iwoxqu7kk"
path="res://.godot/imported/Cat_August_2010-4.jpg-ee22e0b2d7c21625ade8bb157ecd9ac0.ctex"
uid="uid://cm5ps3a716wr0"
path="res://.godot/imported/XSmall.png-2fa29ed3d6c0476862944f7e0885c6ed.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Cat_August_2010-4.jpg"
dest_files=["res://.godot/imported/Cat_August_2010-4.jpg-ee22e0b2d7c21625ade8bb157ecd9ac0.ctex"]
source_file="res://XSmall.png"
dest_files=["res://.godot/imported/XSmall.png-2fa29ed3d6c0476862944f7e0885c6ed.ctex"]
[params]
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

@@ -0,0 +1 @@
uid://0jnn2i3r56m3
+1
View File
@@ -0,0 +1 @@
uid://cu21wq8hdk6mq
+2 -2
View File
@@ -112,8 +112,8 @@ tracks/0/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_a7ofc"]
_data = {
"RESET": SubResource("Animation_mmtmn"),
"pulsate": SubResource("Animation_5u02v")
&"RESET": SubResource("Animation_mmtmn"),
&"pulsate": SubResource("Animation_5u02v")
}
[node name="DebugNodeGroup" type="Node"]
+1
View File
@@ -0,0 +1 @@
uid://bupnp7dee8k3a
@@ -0,0 +1 @@
uid://bb81mf7sks0g4
+1
View File
@@ -0,0 +1 @@
uid://ec3hjq1x03oq
+2 -2
View File
@@ -9,7 +9,7 @@ Button/styles/focus = SubResource("StyleBoxEmpty_1t7mm")
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5vqdt"]
[sub_resource type="Image" id="Image_cdrfa"]
[sub_resource type="Image" id="Image_4rf8i"]
data = {
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 168, 224, 224, 224, 233, 224, 224, 224, 236, 224, 224, 224, 170, 231, 231, 231, 31, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 234, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 239, 230, 230, 230, 30, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 168, 224, 224, 224, 255, 224, 224, 224, 186, 224, 224, 224, 32, 224, 224, 224, 33, 224, 224, 224, 187, 224, 224, 224, 255, 225, 225, 225, 167, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 237, 224, 224, 224, 255, 224, 224, 224, 33, 255, 255, 255, 0, 255, 255, 255, 0, 227, 227, 227, 36, 224, 224, 224, 255, 224, 224, 224, 234, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 237, 224, 224, 224, 255, 224, 224, 224, 33, 255, 255, 255, 0, 255, 255, 255, 0, 229, 229, 229, 38, 224, 224, 224, 255, 224, 224, 224, 229, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 164, 224, 224, 224, 255, 224, 224, 224, 187, 225, 225, 225, 34, 227, 227, 227, 36, 224, 224, 224, 192, 224, 224, 224, 255, 224, 224, 224, 162, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 24, 225, 225, 225, 215, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 229, 224, 224, 224, 32, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 24, 224, 224, 224, 216, 224, 224, 224, 255, 224, 224, 224, 210, 224, 224, 224, 161, 224, 224, 224, 232, 224, 224, 224, 231, 225, 225, 225, 159, 230, 230, 230, 30, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 107, 224, 224, 224, 255, 224, 224, 224, 210, 230, 230, 230, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 105, 230, 230, 230, 20, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 221, 224, 224, 224, 130, 255, 255, 255, 1, 255, 255, 255, 1, 225, 225, 225, 134, 224, 224, 224, 224, 225, 225, 225, 223, 224, 224, 224, 132, 255, 255, 255, 1, 255, 255, 255, 6, 224, 224, 224, 137, 224, 224, 224, 231, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 130, 225, 225, 225, 133, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 129, 224, 224, 224, 137, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 65, 224, 224, 224, 255, 224, 224, 224, 220, 225, 225, 225, 223, 224, 224, 224, 255, 226, 226, 226, 61, 224, 224, 224, 65, 224, 224, 224, 255, 224, 224, 224, 222, 224, 224, 224, 231, 224, 224, 224, 255, 227, 227, 227, 62, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 67, 224, 224, 224, 255, 224, 224, 224, 219, 224, 224, 224, 222, 224, 224, 224, 255, 227, 227, 227, 63, 225, 225, 225, 67, 224, 224, 224, 255, 224, 224, 224, 219, 224, 224, 224, 230, 224, 224, 224, 255, 227, 227, 227, 63, 255, 255, 255, 0, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 127, 224, 224, 224, 129, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 225, 225, 225, 126, 225, 225, 225, 135, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 255, 255, 255, 255, 0, 224, 224, 224, 255, 224, 224, 224, 255, 224, 224, 224, 221, 225, 225, 225, 127, 255, 255, 255, 0, 255, 255, 255, 1, 224, 224, 224, 128, 224, 224, 224, 220, 224, 224, 224, 219, 225, 225, 225, 127, 255, 255, 255, 0, 255, 255, 255, 5, 225, 225, 225, 134, 224, 224, 224, 229, 224, 224, 224, 255, 255, 255, 255, 0),
"format": "RGBA8",
@@ -19,7 +19,7 @@ data = {
}
[sub_resource type="ImageTexture" id="ImageTexture_gdtpn"]
image = SubResource("Image_cdrfa")
image = SubResource("Image_4rf8i")
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7v0rg"]
File diff suppressed because it is too large Load Diff
@@ -1,12 +0,0 @@
[configuration]
entry_symbol = "git_plugin_init"
compatibility_minimum = "4.1.0"
[libraries]
macos.editor = "macos/libgit_plugin.macos.editor.universal.dylib"
windows.editor.x86_64 = "win64/libgit_plugin.windows.editor.x86_64.dll"
linux.editor.x86_64 = "linux/libgit_plugin.linux.editor.x86_64.so"
linux.editor.arm64 = "linux/libgit_plugin.linux.editor.arm64.so"
linux.editor.rv64 = ""
-7
View File
@@ -1,7 +0,0 @@
[plugin]
name="Godot Git Plugin"
description="This plugin lets you interact with Git without leaving the Godot editor. More information can be found at https://github.com/godotengine/godot-git-plugin/wiki"
author="twaritwaikar"
version="v3.1.1"
script="godot-git-plugin.gd"
+1
View File
@@ -0,0 +1 @@
uid://rxllqh6yapvt
@@ -0,0 +1 @@
uid://osytjsx5x5lb
+51 -18
View File
@@ -36,13 +36,22 @@ func download(url: String) -> Download:
func FilesMissing() -> bool:
var executable_name: String = "yt-dlp.exe" if OS.get_name() == "Windows" else "yt-dlp"
if not FileAccess.file_exists("user://%s" % executable_name):
return true
if not FileAccess.file_exists("user://ffmpeg.exe"):
return true
if not FileAccess.file_exists("user://ffprobe.exe"):
return true
if OS.get_name() == "Windows":
if not FileAccess.file_exists("user://%s" % executable_name):
return true
if not FileAccess.file_exists("user://ffmpeg.exe"):
return true
if not FileAccess.file_exists("user://ffprobe.exe"):
return true
elif OS.get_name() == "Linux":
var stuff = OS.execute("bash",PackedStringArray(["-c","ffprobe"]))
print(stuff)
if stuff != 1:
return true
var stuff2 = OS.execute("bash",PackedStringArray(["-c","ffmpeg"]))
print(stuff2)
if stuff2 != 1:
return true
return false
func setup() -> void:
@@ -59,9 +68,8 @@ func setup() -> void:
await (Engine.get_main_loop() as SceneTree).process_frame
_thread.wait_to_finish()
if OS.get_name() == "Windows":
await _setup_ffmpeg()
else:
await _setup_ffmpeg()
if OS.get_name() == "Linux":
OS.execute("chmod", PackedStringArray(["+x", OS.get_user_data_dir() + "/yt-dlp"]))
_is_setup = true
@@ -70,12 +78,33 @@ func setup() -> void:
func _setup_ffmpeg() -> void:
if not FileAccess.file_exists("user://ffmpeg.exe"):
_downloader.download(ffmpeg_sources["ffmpeg"], "user://ffmpeg.exe")
await _downloader.download_completed
if OS.get_name() == "Windows":
_downloader.download(ffmpeg_sources["ffmpeg"], "user://ffmpeg.exe")
await _downloader.download_completed
print(OS.get_distribution_name())
elif OS.get_distribution_name() in ["Ubuntu","Linux Mint","Debian"]:
var stuff = OS.execute("bash",PackedStringArray(["-c","ffmpeg"]))
print(stuff)
if stuff !=1:
push_error("FFMPEG NOT INSTALLED")
print(OS.get_distribution_name())
else:
print(OS.get_distribution_name())
if not FileAccess.file_exists("user://ffprobe.exe"):
_downloader.download(ffmpeg_sources["ffprobe"], "user://ffprobe.exe")
await _downloader.download_completed
if OS.get_name() == "Windows":
_downloader.download(ffmpeg_sources["ffprobe"], "user://ffprobe.exe")
print(OS.get_distribution_name())
await _downloader.download_completed
elif OS.get_name() == "Linux":
var stuff = OS.execute("bash",PackedStringArray(["-c","ffprobe"]))
print(stuff)
if stuff != 1:
push_error("FFPROBE NOT INSTALLED")
print(OS.get_distribution_name())
else:
print(OS.get_distribution_name())
func _update_yt_dlp(filename: String) -> void:
@@ -109,7 +138,7 @@ class Download extends RefCounted:
var _renameAudioToDiffName:bool = false
var _video_format: Video = Video.WEBM
var _audio_format: Audio = Audio.MP3
var _download_playlist:bool
func _init(url: String):
_url = url
@@ -183,13 +212,17 @@ class Download extends RefCounted:
"destination": _destination
})
options_and_arguments.append_array(["--yes-playlist","--embed-metadata","--embed-thumbnail",str("-o" + "%(title)s.%(ext)s")])
options_and_arguments.append_array(["--embed-metadata","--embed-thumbnail",str("-o" + "%(title)s.%(ext)s")])
options_and_arguments.append_array(["--no-continue", "-P", file_path, _url])
var output: Array = []
OS.execute(executable, PackedStringArray(options_and_arguments), output)
if _download_playlist:
options_and_arguments.append("--yes-playlist")
else:
options_and_arguments.append("--no-playlist")
print(options_and_arguments)
var output: Array = []
OS.execute(executable, PackedStringArray(options_and_arguments), output)
self._thread_finished.call_deferred()
+1
View File
@@ -0,0 +1 @@
uid://c0dklnw4cfoe3
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2016-2023 The Godot Engine community
Copyright (c) 2023 B0TLANNER Games
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+139
View File
@@ -0,0 +1,139 @@
# Godot GIF
<br>
<p align="center">
<img src="./docs-images/logo.gif" alt="Logo" width="128" height="128" />
</p>
<p align="center">
<a href="https://github.com/BOTLANNER/godot-gif/actions/workflows/build_releases.yml"><img alt="GitHub Build" src="https://github.com/BOTLANNER/godot-gif/actions/workflows/build_releases.yml/badge.svg" height="20"/></a>
<a href="https://github.com/BOTLANNER/godot-gif/blob/develop/LICENSE.txt"><img alt="MIT License" src="https://img.shields.io/github/license/BOTLANNER/godot-gif" height="20"/></a>
</p>
## Description
GDExtension for Godot 4+ to load GIF files as [AnimatedTexture](https://docs.godotengine.org/en/stable/classes/class_animatedtexture.html) and/or [SpriteFrames](https://docs.godotengine.org/en/stable/classes/class_spriteframes.html).
NOTE: ~~**AnimatedTexture**~~ has been marked as deprecated according to development docs and could be removed in a future version of Godot.
## Usage
### Editor
Gif files can be imported at edit time as one of the supported types via Import options.
<details open>
<summary>Editor Imports Options</summary>
![Editor Imports Options](./docs-images/EditorImportSettings.gif)
</details>
See the [Editor Imports](./demo/editor_imports_example.tscn) example scene.
<details open>
<summary>Editor Imports Example</summary>
![Editor Imports](./docs-images/EditorImports.gif)
</details>
<hr/>
### Runtime
Gif files can be loaded at runtime as one of the supported types via the `GifManager` singleton.
`GifManager` exposes the following methods for loading gifs either from file or from bytes directly:
![GifManager Methods](./docs-images/methods.png)
e.g. to load from file
```py
get_node("AnimFromRuntimeFile").texture = GifManager.animated_texture_from_file("res://examples/file/optic.gif")
get_node("AnimatedSprite2RuntimeFile").sprite_frames = GifManager.sprite_frames_from_file("res://examples/file/optic.gif")
```
See the [Runtime Imports](./demo/main.tscn) example scene.
<details open>
<summary>Runtime Imports Example</summary>
![Runtime Imports](./docs-images/RuntimeImports.gif)
</details>
## Installation
Download the `gdextension` artifact from the [latest successful build](https://github.com/BOTLANNER/godot-gif/actions/workflows/build_releases.yml). (It should be right at the bottom of the **Summary**)
![image](https://github.com/BOTLANNER/godot-gif/assets/16349308/f28867c6-f669-45f2-9309-dbb17cec2031)
Extract the contents to your Godot project directory.
You should have an `addons` directory at the root with the following structure:
```bash
└───addons
└───godotgif
│ godotgif.gdextension
│ LICENSE.txt
│ README.md
└───bin
│ godotgif.windows.template_debug.x86_32.dll
│ godotgif.windows.template_debug.x86_64.dll
│ godotgif.windows.template_release.x86_32.dll
│ godotgif.windows.template_release.x86_64.dll
│ libgodotgif.android.template_debug.arm64.so
│ libgodotgif.android.template_release.arm64.so
│ libgodotgif.linux.template_debug.x86_32.so
│ libgodotgif.linux.template_debug.x86_64.so
│ libgodotgif.linux.template_release.x86_32.so
│ libgodotgif.linux.template_release.x86_64.so
├───godotgif.macos.template_debug.framework
│ libgodotgif.macos.template_debug
└───godotgif.macos.template_release.framework
libgodotgif.macos.template_release
```
Open your project. Any exisitng gifs should auto-import. New gifs in the project directory will automatically import as `SpriteFrames`. To convert them into `AnimatedTexture`, update the [import settings](#editor).
The `GifManager` class should also now be available for access within GDScript.
## Contributing
### Setup
Ensure **SCons** is setup. Refer to [Introduction to the buildsystem](https://docs.godotengine.org/en/stable/contributing/development/compiling/introduction_to_the_buildsystem.html)
* If using a different version of Godot, be sure to dump the bindings e.g.
```sh
godot --dump-extension-api extension_api.json
```
* Compile with
```sh
scons platform=<platform> custom_api_file=extension_api.json
```
### Debugging
This repository is configured for use with [VSCode](https://code.visualstudio.com/)
[Launch configurations](./.vscode/launch.json) have been setup for both debugging in editor and in runtime provided certain **VSCode** extensions are present and environment variables are defined.
The following environment variables are required:
1. `GODOT_PATH` - The directory in which Godot is installed
1. `GODOT_EXECUTABLE` - The executable name of the Godot installation
### More Details
Refer to [GDExtension C++ example](https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/gdextension_cpp_example.html)
## License
Unless otherwise specified, the extension is released under the
[MIT license](LICENSE.txt).
See the full list of third-party libraries with their licenses used by this
extension at [src/thirdparty/README.md](src/thirdparty/README.md).
This implementation heavily borrowed inspiration from the [gif module](https://github.com/goostengine/goost/tree/gd3/modules/gif) for [Goost](https://github.com/goostengine/goost) that is currently only based on Godot 3
+23
View File
@@ -0,0 +1,23 @@
[configuration]
entry_symbol = "godot_gif_library_init"
compatibility_minimum = "4.1"
[libraries]
macos.debug = "bin/godotgif.macos.template_debug.framework/libgodotgif.macos.template_debug"
macos.release = "bin/godotgif.macos.template_release.framework/libgodotgif.macos.template_release"
windows.debug.x86_32 = "bin/godotgif.windows.template_debug.x86_32.dll"
windows.release.x86_32 = "bin/godotgif.windows.template_release.x86_32.dll"
windows.debug.x86_64 = "bin/godotgif.windows.template_debug.x86_64.dll"
windows.release.x86_64 = "bin/godotgif.windows.template_release.x86_64.dll"
linux.debug.x86_64 = "bin/libgodotgif.linux.template_debug.x86_64.so"
linux.release.x86_64 = "bin/libgodotgif.linux.template_release.x86_64.so"
linux.debug.arm64 = "bin/libgodotgif.linux.template_debug.arm64.so"
linux.release.arm64 = "bin/libgodotgif.linux.template_release.arm64.so"
linux.debug.rv64 = "bin/libgodotgif.linux.template_debug.rv64.so"
linux.release.rv64 = "bin/libgodotgif.linux.template_release.rv64.so"
android.debug.x86_64 = "bin/libgodotgif.android.template_debug.x86_64.so"
android.release.x86_64 = "bin/libgodotgif.android.template_release.x86_64.so"
android.debug.arm64 = "bin/libgodotgif.android.template_debug.arm64.so"
android.release.arm64 = "bin/libgodotgif.android.template_release.arm64.so"
+1
View File
@@ -0,0 +1 @@
uid://b5mou30wr43g
+38
View File
@@ -0,0 +1,38 @@
extends Control
@onready var birthday_particles: GPUParticles2D = $BirthdayParticles
@onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer
@onready var birthday_happy: Label = $"../BirthdayHappy"
@export var opacitycurve:Curve
var opacity:float = 1
var awaitingJumpscare:bool
var IsFocused:bool
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
birthday_happy.hide()
var bday:bool
if Time.get_datetime_dict_from_system().day == 9:
if Time.get_datetime_dict_from_system().month == 9:
await get_tree().create_timer(0.2).timeout
awaitingJumpscare = true
bday = true
func _notification(what):
if what == get_tree().NOTIFICATION_APPLICATION_FOCUS_IN:
IsFocused = true
if what == get_tree().NOTIFICATION_APPLICATION_FOCUS_OUT:
IsFocused = false
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
if awaitingJumpscare && IsFocused:
birthday_happy.show()
awaitingJumpscare = false
birthday_particles.emitting = true
audio_stream_player.play()
if !awaitingJumpscare:
opacity -= delta/5
birthday_happy.modulate.a = opacitycurve.sample_baked(opacity)
if opacity <= 0.0:
process_mode = ProcessMode.PROCESS_MODE_DISABLED
+1
View File
@@ -0,0 +1 @@
uid://n3koklp0funr
+1
View File
@@ -0,0 +1 @@
uid://dg68hvw773xu6
+4 -4
View File
@@ -4,7 +4,7 @@ extends Control
@onready var file_dialog: FileDialog = $FileDialog
@onready var current_directory: Label = $ScrollContainer/VBoxContainer/CurrentDirectory
@onready var playlist_name: LineEdit = $ScrollContainer/VBoxContainer/PlaylistName
@onready var playlists_holder: VBoxContainer = $"../PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder"
@onready var playlists_holder: VBoxContainer = $"../PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder"
const PLAYLIST_DISPLAY = preload("res://PlaylistDisplay.tscn")
@@ -33,15 +33,15 @@ func _on_playlist_name_text_changed(new_text: String) -> void:
#elif new_text.unicode_at()
if !Parent.Playlists.has(new_text):
if new_text != "":
good_indicator.text = "Name Valid"
good_indicator.text = tr("NAME_VALID")
good_indicator.label_settings.font_color = Color(0,1,0,1)
NameValid =true
else:
good_indicator.text = "Name needs to be something"
good_indicator.text = tr("NAME_EMPTY")
good_indicator.label_settings.font_color = Color(1,0,0,1)
NameValid = false
else:
good_indicator.text = "Name Already used"
good_indicator.text = tr("NAME_USED")
good_indicator.label_settings.font_color = Color(1,0,0,1)
NameValid = false
IsValid()
+1
View File
@@ -0,0 +1 @@
uid://bsnt1irskti8d
+1
View File
@@ -0,0 +1 @@
uid://dl37gwyodonea
+1 -2
View File
@@ -5,8 +5,7 @@ var HzDec = {0:"32 Hz",
2:"320 Hz",
3:"1000 Hz",
4:"3200 Hz",
5:"3200 Hz",
6:"10000 Hz"}
5:"10000 Hz"}
var gainValueLabels:Array = []
var gainValueSlider:Array = []
+1
View File
@@ -0,0 +1 @@
uid://kt7n1epi3ng8
+17 -223
View File
@@ -9,9 +9,11 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../MusicPlayerExports/MusicPlayer.exe"
export_path="../SimplaudioExports/Windows/Simplaudio.exe"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
@@ -68,8 +70,8 @@ dotnet/embed_build_outputs=false
[preset.1]
name="macOS"
platform="macOS"
name="Linux"
platform="Linux"
runnable=true
advanced_options=false
dedicated_server=false
@@ -77,244 +79,36 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../MusicPlayerMACExports/MusicPlayer.zip"
export_path="../SimplaudioExports/Linux/Simplaudio.x86_64"
patches=PackedStringArray()
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
export/distribution_type=1
binary_format/architecture="universal"
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=2
application/icon=""
application/icon_interpolation=4
application/bundle_identifier="com.bucket.simplaudio"
application/signature=""
application/app_category="Music"
application/short_version=""
application/version=""
application/copyright=""
application/copyright_localized={}
application/min_macos_version="10.12"
application/export_angle=0
display/high_res=true
application/additional_plist_content=""
xcode/platform_build="14C18"
xcode/sdk_version="13.1"
xcode/sdk_build="22C55"
xcode/sdk_name="macosx13.1"
xcode/xcode_version="1420"
xcode/xcode_build="14C18"
codesign/codesign=1
codesign/installer_identity=""
codesign/apple_team_id=""
codesign/identity=""
codesign/entitlements/custom_file=""
codesign/entitlements/allow_jit_code_execution=false
codesign/entitlements/allow_unsigned_executable_memory=false
codesign/entitlements/allow_dyld_environment_variables=false
codesign/entitlements/disable_library_validation=false
codesign/entitlements/audio_input=false
codesign/entitlements/camera=false
codesign/entitlements/location=false
codesign/entitlements/address_book=false
codesign/entitlements/calendars=false
codesign/entitlements/photos_library=false
codesign/entitlements/apple_events=false
codesign/entitlements/debugging=false
codesign/entitlements/app_sandbox/enabled=false
codesign/entitlements/app_sandbox/network_server=false
codesign/entitlements/app_sandbox/network_client=false
codesign/entitlements/app_sandbox/device_usb=false
codesign/entitlements/app_sandbox/device_bluetooth=false
codesign/entitlements/app_sandbox/files_downloads=0
codesign/entitlements/app_sandbox/files_pictures=0
codesign/entitlements/app_sandbox/files_music=0
codesign/entitlements/app_sandbox/files_movies=0
codesign/entitlements/app_sandbox/files_user_selected=0
codesign/entitlements/app_sandbox/helper_executables=[]
codesign/custom_options=PackedStringArray()
notarization/notarization=0
privacy/microphone_usage_description=""
privacy/microphone_usage_description_localized={}
privacy/camera_usage_description=""
privacy/camera_usage_description_localized={}
privacy/location_usage_description=""
privacy/location_usage_description_localized={}
privacy/address_book_usage_description=""
privacy/address_book_usage_description_localized={}
privacy/calendar_usage_description=""
privacy/calendar_usage_description_localized={}
privacy/photos_library_usage_description=""
privacy/photos_library_usage_description_localized={}
privacy/desktop_folder_usage_description=""
privacy/desktop_folder_usage_description_localized={}
privacy/documents_folder_usage_description=""
privacy/documents_folder_usage_description_localized={}
privacy/downloads_folder_usage_description=""
privacy/downloads_folder_usage_description_localized={}
privacy/network_volumes_usage_description=""
privacy/network_volumes_usage_description_localized={}
privacy/removable_volumes_usage_description=""
privacy/removable_volumes_usage_description_localized={}
privacy/tracking_enabled=false
privacy/tracking_domains=PackedStringArray()
privacy/collected_data/name/collected=false
privacy/collected_data/name/linked_to_user=false
privacy/collected_data/name/used_for_tracking=false
privacy/collected_data/name/collection_purposes=0
privacy/collected_data/email_address/collected=false
privacy/collected_data/email_address/linked_to_user=false
privacy/collected_data/email_address/used_for_tracking=false
privacy/collected_data/email_address/collection_purposes=0
privacy/collected_data/phone_number/collected=false
privacy/collected_data/phone_number/linked_to_user=false
privacy/collected_data/phone_number/used_for_tracking=false
privacy/collected_data/phone_number/collection_purposes=0
privacy/collected_data/physical_address/collected=false
privacy/collected_data/physical_address/linked_to_user=false
privacy/collected_data/physical_address/used_for_tracking=false
privacy/collected_data/physical_address/collection_purposes=0
privacy/collected_data/other_contact_info/collected=false
privacy/collected_data/other_contact_info/linked_to_user=false
privacy/collected_data/other_contact_info/used_for_tracking=false
privacy/collected_data/other_contact_info/collection_purposes=0
privacy/collected_data/health/collected=false
privacy/collected_data/health/linked_to_user=false
privacy/collected_data/health/used_for_tracking=false
privacy/collected_data/health/collection_purposes=0
privacy/collected_data/fitness/collected=false
privacy/collected_data/fitness/linked_to_user=false
privacy/collected_data/fitness/used_for_tracking=false
privacy/collected_data/fitness/collection_purposes=0
privacy/collected_data/payment_info/collected=false
privacy/collected_data/payment_info/linked_to_user=false
privacy/collected_data/payment_info/used_for_tracking=false
privacy/collected_data/payment_info/collection_purposes=0
privacy/collected_data/credit_info/collected=false
privacy/collected_data/credit_info/linked_to_user=false
privacy/collected_data/credit_info/used_for_tracking=false
privacy/collected_data/credit_info/collection_purposes=0
privacy/collected_data/other_financial_info/collected=false
privacy/collected_data/other_financial_info/linked_to_user=false
privacy/collected_data/other_financial_info/used_for_tracking=false
privacy/collected_data/other_financial_info/collection_purposes=0
privacy/collected_data/precise_location/collected=false
privacy/collected_data/precise_location/linked_to_user=false
privacy/collected_data/precise_location/used_for_tracking=false
privacy/collected_data/precise_location/collection_purposes=0
privacy/collected_data/coarse_location/collected=false
privacy/collected_data/coarse_location/linked_to_user=false
privacy/collected_data/coarse_location/used_for_tracking=false
privacy/collected_data/coarse_location/collection_purposes=0
privacy/collected_data/sensitive_info/collected=false
privacy/collected_data/sensitive_info/linked_to_user=false
privacy/collected_data/sensitive_info/used_for_tracking=false
privacy/collected_data/sensitive_info/collection_purposes=0
privacy/collected_data/contacts/collected=false
privacy/collected_data/contacts/linked_to_user=false
privacy/collected_data/contacts/used_for_tracking=false
privacy/collected_data/contacts/collection_purposes=0
privacy/collected_data/emails_or_text_messages/collected=false
privacy/collected_data/emails_or_text_messages/linked_to_user=false
privacy/collected_data/emails_or_text_messages/used_for_tracking=false
privacy/collected_data/emails_or_text_messages/collection_purposes=0
privacy/collected_data/photos_or_videos/collected=false
privacy/collected_data/photos_or_videos/linked_to_user=false
privacy/collected_data/photos_or_videos/used_for_tracking=false
privacy/collected_data/photos_or_videos/collection_purposes=0
privacy/collected_data/audio_data/collected=false
privacy/collected_data/audio_data/linked_to_user=false
privacy/collected_data/audio_data/used_for_tracking=false
privacy/collected_data/audio_data/collection_purposes=0
privacy/collected_data/gameplay_content/collected=false
privacy/collected_data/gameplay_content/linked_to_user=false
privacy/collected_data/gameplay_content/used_for_tracking=false
privacy/collected_data/gameplay_content/collection_purposes=0
privacy/collected_data/customer_support/collected=false
privacy/collected_data/customer_support/linked_to_user=false
privacy/collected_data/customer_support/used_for_tracking=false
privacy/collected_data/customer_support/collection_purposes=0
privacy/collected_data/other_user_content/collected=false
privacy/collected_data/other_user_content/linked_to_user=false
privacy/collected_data/other_user_content/used_for_tracking=false
privacy/collected_data/other_user_content/collection_purposes=0
privacy/collected_data/browsing_history/collected=false
privacy/collected_data/browsing_history/linked_to_user=false
privacy/collected_data/browsing_history/used_for_tracking=false
privacy/collected_data/browsing_history/collection_purposes=0
privacy/collected_data/search_hhistory/collected=false
privacy/collected_data/search_hhistory/linked_to_user=false
privacy/collected_data/search_hhistory/used_for_tracking=false
privacy/collected_data/search_hhistory/collection_purposes=0
privacy/collected_data/user_id/collected=false
privacy/collected_data/user_id/linked_to_user=false
privacy/collected_data/user_id/used_for_tracking=false
privacy/collected_data/user_id/collection_purposes=0
privacy/collected_data/device_id/collected=false
privacy/collected_data/device_id/linked_to_user=false
privacy/collected_data/device_id/used_for_tracking=false
privacy/collected_data/device_id/collection_purposes=0
privacy/collected_data/purchase_history/collected=false
privacy/collected_data/purchase_history/linked_to_user=false
privacy/collected_data/purchase_history/used_for_tracking=false
privacy/collected_data/purchase_history/collection_purposes=0
privacy/collected_data/product_interaction/collected=false
privacy/collected_data/product_interaction/linked_to_user=false
privacy/collected_data/product_interaction/used_for_tracking=false
privacy/collected_data/product_interaction/collection_purposes=0
privacy/collected_data/advertising_data/collected=false
privacy/collected_data/advertising_data/linked_to_user=false
privacy/collected_data/advertising_data/used_for_tracking=false
privacy/collected_data/advertising_data/collection_purposes=0
privacy/collected_data/other_usage_data/collected=false
privacy/collected_data/other_usage_data/linked_to_user=false
privacy/collected_data/other_usage_data/used_for_tracking=false
privacy/collected_data/other_usage_data/collection_purposes=0
privacy/collected_data/crash_data/collected=false
privacy/collected_data/crash_data/linked_to_user=false
privacy/collected_data/crash_data/used_for_tracking=false
privacy/collected_data/crash_data/collection_purposes=0
privacy/collected_data/performance_data/collected=false
privacy/collected_data/performance_data/linked_to_user=false
privacy/collected_data/performance_data/used_for_tracking=false
privacy/collected_data/performance_data/collection_purposes=0
privacy/collected_data/other_diagnostic_data/collected=false
privacy/collected_data/other_diagnostic_data/linked_to_user=false
privacy/collected_data/other_diagnostic_data/used_for_tracking=false
privacy/collected_data/other_diagnostic_data/collection_purposes=0
privacy/collected_data/environment_scanning/collected=false
privacy/collected_data/environment_scanning/linked_to_user=false
privacy/collected_data/environment_scanning/used_for_tracking=false
privacy/collected_data/environment_scanning/collection_purposes=0
privacy/collected_data/hands/collected=false
privacy/collected_data/hands/linked_to_user=false
privacy/collected_data/hands/used_for_tracking=false
privacy/collected_data/hands/collection_purposes=0
privacy/collected_data/head/collected=false
privacy/collected_data/head/linked_to_user=false
privacy/collected_data/head/used_for_tracking=false
privacy/collected_data/head/collection_purposes=0
privacy/collected_data/other_data_types/collected=false
privacy/collected_data/other_data_types/linked_to_user=false
privacy/collected_data/other_data_types/used_for_tracking=false
privacy/collected_data/other_data_types/collection_purposes=0
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=false
dotnet/include_debug_symbols=true
dotnet/embed_build_outputs=false
+15
View File
@@ -0,0 +1,15 @@
extends Button
@export var Open:String
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
func _pressed() -> void:
OS.shell_open(Open)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
+1
View File
@@ -0,0 +1 @@
uid://bn0iqqmor3b2b
+14
View File
@@ -0,0 +1,14 @@
extends MenuButton
@export var settings:Settings
func _ready() -> void:
for trans_language in TranslationServer.get_loaded_locales():
get_popup().add_item(trans_language)
get_popup().id_pressed.connect(got_pressed)
func got_pressed(id:int) -> void:
settings.Parent.overridden_locale = get_popup().get_item_text(id)
TranslationServer.set_locale(get_popup().get_item_text(id))
settings.Parent.SaveEverything()
+1
View File
@@ -0,0 +1 @@
uid://cej7efsj2cyen
+29
View File
@@ -0,0 +1,29 @@
extends Control
@onready var continue_anyways: Button = $VBoxContainer/HBoxContainer/ContinueAnyways
@onready var contact: Button = $VBoxContainer/HBoxContainer/Contact
@onready var failed_audio_cue: AudioStreamPlayer = $FailedAudioCue
@onready var confirmation_dialog: ConfirmationDialog = $ConfirmationDialog
func Show():
failed_audio_cue.play()
show()
continue_anyways.pressed.connect(confirmation_dialog.show)
confirmation_dialog.confirmed.connect(Confiremed)
contact.pressed.connect(Contact)
func Confiremed():
owner.LoadingSaveFailed = false
hide()
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
hide()
func Contact():
print("Contact pressed")
OS.shell_open("https://notdraimdev.github.io/SimplSite/Contact.html")
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
+1
View File
@@ -0,0 +1 @@
uid://cbdcs7oie12g5
+217 -92
View File
@@ -18,20 +18,23 @@ extends Control
@onready var yt_link: LineEdit = $"YoutubeMenuHolder/Youtube menu/YTLink"
@onready var yt_download: Button = $"YoutubeMenuHolder/Youtube menu/YTDownload"
@onready var loading_img: Sprite2D = $"YoutubeMenuHolder/Youtube menu/LoadingIMG"
@onready var songs_menu: MenuButton = $SongsMenu
@onready var songs_menu: Button = $SongsMenu
@onready var version: Label = $Version
@onready var paused_indicator: TextureRect = $PausedIndicator
@onready var settings_popup: Popup = $SettingsPopup
@onready var settings_menu_child: Settings = $SettingsPopup/SettingsMenuChild
@onready var settings_menu_child: Settings = $SettingsHolder/SettingsPopup/SettingsMenuChild
@onready var artist_name: Label = $ArtistName
@onready var user_bg: TextureRect = $UserBG
@onready var playlists_panel: Control = $PlaylistsPanel
@onready var playlists_holder: VBoxContainer = $PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder
@onready var play_all: Button = $PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll
@onready var playlists_holder: VBoxContainer = $PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/PlaylistsHolder
@onready var play_all: Button = $PlaylistPanelHolder/PlaylistsPanel/PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll
@onready var album_name: Label = $Album
@onready var playlist_or_song: ConfirmationDialog = $PlaylistOrSong
@onready var search_results: SearchResults = $SearchResults
@onready var delete_confirm: ConfirmationDialog = $deleteConfirm
@onready var search_bar: LineEdit = $SearchBar
@onready var playing_now: Window = $PlayingNow
@export var overridden_locale:String
var DiscordUsername:String
const PLAYLIST_DISPLAY = preload("res://PlaylistDisplay.tscn")
const PAUSE = preload("res://Pause.png")
@@ -61,12 +64,26 @@ var PlaylistsLocation:Dictionary
var BackroundSetup:bool
var CurrentPlaylist:String
var PlayAllLists:bool
var UsingPlayingNow:bool
@export var LoopPressed:Texture2D
@export var LoopNotPressed:Texture2D
signal ContinueDelete
var deleteSong:bool
signal SongChanged
var currentSongName:String
var currentArtistName:String
var currentAlbumName:String
var LoadingSaveFailed:bool = true
@onready var loading_failed_screen: Control = $LoadingFailedScreen
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
playing_now.visible = false
get_tree().root.min_size = Vector2(850,492)
current_progress.drag_ended.connect(SongDragStopped)
current_progress.drag_started.connect(SongDragStarted)
loop.pressed.connect(LoopSong)
@@ -76,15 +93,14 @@ func _ready() -> void:
volume_slider.value_changed.connect(SetVolume)
skip.pressed.connect(Skip)
go_back.pressed.connect(GoBack)
songs_menu.get_popup().index_pressed.connect(SetSong)
search_results.index_pressed.connect(SetSong)
search_results.song_deleted.connect(deletesong)
var Strin:String
for Arg in OS.get_cmdline_args():
if Arg.to_lower().ends_with(".mp3") or Arg.to_lower().ends_with(".wav"):
OS.alert("opening files like this\nis no longer supported")
var data:Dictionary
var save = loadUserdata()
if save != {}:
data = save
loadPlaylists()
if loadUserdata() != null:
data = loadUserdata()
if Strin.is_empty():
if !Playlists.is_empty():
PlaylistSelected(Playlists.keys()[0],PlaylistsLocation[Playlists.keys()[0]])
@@ -120,6 +136,13 @@ func _ready() -> void:
if data.has("DiscordRichPresenceEnabled"):
settings_menu_child.discord_rich_presence_button.set_pressed_no_signal(data["DiscordRichPresenceEnabled"])
DiscordRichPresenceEnabled = data["DiscordRichPresenceEnabled"]
if data["DiscordRichPresenceEnabled"]:
setUpDiscord()
if data.has("DiscordUsername"):
if data["DiscordUsername"]:
if DiscordRichPresenceEnabled:
DiscordUsername = data["DiscordUsername"]
print("stiff ",data)
if data.has("ReverbEnabled") :
settings_menu_child.reverb_check.button_pressed = data["ReverbEnabled"]
if data.has("ReverbRoomSize") :
@@ -143,6 +166,11 @@ func _ready() -> void:
PlayAllLists = data["PlayAllLists"]
if PlayAllLists:
play_all.button_pressed = true
if data.has("UsingPlayingNow"):
UsingPlayingNow = data["UsingPlayingNow"]
if data.has("OverriddenLocale"):
TranslationServer.set_locale(data["OverriddenLocale"])
overridden_locale = data["OverriddenLocale"]
else:
if data != null:
print(data["Volume"])
@@ -165,9 +193,27 @@ func _ready() -> void:
DirectorySelected(Strin)
PlaySongs()
#PlaySongs()
DiscordRPC.app_id = 1276916292170809426
DiscordRPC.refresh()
for child in get_children(true):
if child is Control:
child.focus_mode = child is LineEdit
if LoadingSaveFailed:
var file2 = FileAccess.open("user://playlists.dat", FileAccess.READ)
if (file2.get_error() != ERR_FILE_NOT_FOUND) or (file2.get_error() != ERR_FILE_BAD_PATH):
loading_failed_screen.Show()
ERR_PRINTER_ON_FIRE
func setUpDiscord():
DiscordRPC.app_id = 1276916292170809426
DiscordRPC.refresh()
print("stiff chicks ",DiscordRPC.get_current_user())
SplashStrings = ["the party just started!"]
var LText = SplashStrings.pick_random()
print(LText)
DiscordRPC.large_image_text = LText
DiscordRPC.large_image = "logo"
DiscordUsername = DiscordRPC.get_current_user().get("username")
DiscordRPC.refresh()
# this is boolean if everything worked
print("Discord working: " + str(DiscordRPC.get_is_discord_working()))
# Set the first custom text row of the activity here
@@ -177,12 +223,7 @@ func _ready() -> void:
# Set the second custom text row of the activity here
DiscordRPC.state = ""
# Image key for small image from "Art Assets" from the Discord Developer website
DiscordRPC.large_image = "logo"
# Tooltip text for the large image
SplashStrings = ["the party just started!"]
var LText = SplashStrings.pick_random()
print(LText)
DiscordRPC.large_image_text = LText
# Image key for large image from "Art Assets" from the Discord Developer website
DiscordRPC.small_image = ""
# Tooltip text for the small image
@@ -191,15 +232,47 @@ func _ready() -> void:
# Always refresh after changing the values!
DiscordRPC.refresh()
func deletesong(idx:int):
var currentDir:String= CurrentDir
currentDir += "/" + textSongs[idx]
delete_confirm.show()
delete_confirm.dialog_text = tr("DELETE_DIALOG") + textSongs[idx] +"?"
delete_confirm.confirmed.connect(deleteConfirmed)
delete_confirm.canceled.connect(deleteCancelled)
await ContinueDelete
delete_confirm.canceled.disconnect(deleteCancelled)
delete_confirm.confirmed.disconnect(deleteConfirmed)
if deleteSong:
print("deleted + " + currentDir)
deleteSong = false
var dir = DirAccess.remove_absolute(currentDir)
print("error code " +str(dir) + " (zero is good)")
if dir == 0:
textSongs.remove_at(idx)
if search_bar.visible:
search_bar.updateResults()
else:
songs_menu._pressed()
Playlists[CurrentPlaylist].erase(textSongs[idx])
func deleteCancelled():
deleteSong = false
ContinueDelete.emit()
func deleteConfirmed():
deleteSong = true
ContinueDelete.emit()
func SongDragStopped(Changed:bool):
if Changed:
music_player.play(current_progress.value * CurrentSongLenth / current_progress.max_value)
if Paused:
pausePlay()
UpdateProgressSlider = true
DiscordRPC.start_timestamp = int(Time.get_unix_time_from_system() - (current_progress.value * CurrentSongLenth / current_progress.max_value))
DiscordRPC.refresh()
if DiscordRichPresenceEnabled:
DiscordRPC.start_timestamp = int(Time.get_unix_time_from_system() - (current_progress.value * CurrentSongLenth / current_progress.max_value))
DiscordRPC.refresh()
func SongDragStarted():
UpdateProgressSlider = false
@@ -221,7 +294,8 @@ func SetSong(IDX:int):
CurrentIDX = IDX -1
PlaySongs()
music_player.stop()
SaveEverything()
if !LoadingSaveFailed:
SaveEverything()
print("SetSong")
func pausePlay():
@@ -249,16 +323,15 @@ func SetVolume(Volume:float):
var volume = (-50 + (Volume/2))
if Volume >= 2:
AudioServer.set_bus_volume_db(0,volume)
AudioServer.set_bus_volume_db(1,volume)
else:
AudioServer.set_bus_volume_db(0,-1000)
print("Chnaged Volume")
SaveEverything()
AudioServer.set_bus_volume_db(1,-1000)
volume_slider.value = Volume
func SelectPlaylistDir():
file_dialog.show()
SaveEverything()
if !LoadingSaveFailed:
SaveEverything()
print("Select Playtlist dir")
func DirectorySelected(dir:String):
@@ -271,17 +344,15 @@ func PlaySongs():
if music_player.playing:
Paused = true
DiscordRPC.state = "Paused"
music_player.stream_paused = true
play_list.icon = PLAY
DiscordRPC.state = tr("DELETE_DIALOG")
print(DiscordRPC.get_current_user())
else:
DiscordRPC.start_timestamp = int(Time.get_unix_time_from_system() - (current_progress.value * CurrentSongLenth / current_progress.max_value))
print(DiscordRPC.get_current_user())
if DiscordRPC.get_current_user().get("username") == "_bucketofchicken":
DiscordRPC.state = "i made the music player btw"
else:
DiscordRPC.state = "Listening To Music"
DiscordRPC.state = tr("STATE_LISTENING")
Paused = false
music_player.stream_paused = false
play_list.icon = PAUSE
@@ -290,25 +361,25 @@ func PlaySongs():
if LoopingSong:
music_player.play()
elif textSongs.size() != 0:
var index
var index:int
if OpenedSong.is_empty():
if PlayAllLists:
if CurrentIDX >= (textSongs.size()):
CurrentPlaylist = Playlists.keys()[(Playlists.keys().find(CurrentPlaylist)+1) % Playlists.keys().size()]
print("ASSS")
print(CurrentPlaylist)
index = CurrentIDX % textSongs.size()
else:
if PlayAllLists:
if CurrentIDX+1 >= (textSongs.size()-1):
CurrentPlaylist = Playlists.keys()[(Playlists.keys().find(CurrentPlaylist)+1) % Playlists.keys().size()]
print("AS")
index = textSongs.find(OpenedSong) % textSongs.size()
if PlayAllLists:
if !CurrentDir.ends_with(CurrentPlaylist):
GetSongs(PlaylistsLocation[CurrentPlaylist])
var CurrentSongDir:String = PlaylistsLocation[CurrentPlaylist] + "/" + textSongs[index]
DiscordRPC.details = textSongs[index].replace(".mp3","")
if DiscordRichPresenceEnabled:
DiscordRPC.details = textSongs[index].replace(".mp3","")
currentSongName = textSongs[index].replace(".mp3","")
print(CurrentSongDir)
var sonnname:String = textSongs[index]
sonnname = sonnname.replace(".mp3", "")
@@ -325,17 +396,21 @@ func PlaySongs():
if MusicMetadataAutoload.get_mp3_metadata(song).title != "":
song_name.text = MusicMetadataAutoload.get_mp3_metadata(song).title
if MusicMetadataAutoload.get_mp3_metadata(song).artist != "":
artist_name.text = MusicMetadataAutoload.get_mp3_metadata(song).artist
else: artist_name.text = ""
currentArtistName = MusicMetadataAutoload.get_mp3_metadata(song).artist
else: currentArtistName = ""
artist_name.text = currentArtistName
if MusicMetadataAutoload.get_mp3_metadata(song).album != "":
album_name.text = MusicMetadataAutoload.get_mp3_metadata(song).album
else: album_name.text = ""
currentAlbumName = MusicMetadataAutoload.get_mp3_metadata(song).album
else: currentAlbumName = ""
album_name.text = currentAlbumName
if song != null:
CurrentSongLenth = song.get_length()
music_player.stream = song
music_player.play()
SaveEverything()
if !LoadingSaveFailed:
SaveEverything()
print("set stream")
SongChanged.emit()
func GetSongs(dir:String):
@@ -358,11 +433,11 @@ func GetSongs(dir:String):
wav_disclaimer.show()
SeenWAVDisclaimer = true
#print(songs)
songs_menu.get_popup().clear(true)
search_results.clear()
textSongs = songs
for song in textSongs:
var nam = song.replace(".mp3", "")
songs_menu.get_popup().add_item(nam)
var nam = song
search_results.add_item(nam)
func Randomize():
if textSongs.size() != 0:
@@ -381,10 +456,10 @@ func Randomize():
Randomized = true
songs_menu.get_popup().clear(true)
search_results.clear()
for song in textSongs:
var nam = song.replace(".mp3", "")
songs_menu.get_popup().add_item(nam)
var nam = song
search_results.add_item(nam)
#print(textSongs)
func PlaylistSelected(Playlist:String,PlaylistLocation:String):
@@ -404,6 +479,7 @@ func PlaylistSelected(Playlist:String,PlaylistLocation:String):
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
playing_now.visible = UsingPlayingNow
currentSaveTime -= _delta
if !BackroundSetup:
if CurrentCustomBackroundImageDirectory != null and CurrentCustomBackroundImageDirectory != "":
@@ -411,43 +487,32 @@ func _process(_delta: float) -> void:
BackroundSetup = true
if currentSaveTime < 0:
currentSaveTime = SaveInterval
SaveEverything()
print("yoo")
if DiscordRichPresenceEnabled:
DiscordUsername = DiscordRPC.get_current_user().get("username")
if !LoadingSaveFailed:
SaveEverything()
@warning_ignore("integer_division")
SplashStrings = ["Total listening time: %s!" % str(str(int(TimeSpentListening/60)/60 )
+ "h : " + str((int(TimeSpentListening) / 60) % 60) + "m : " +
str(int(TimeSpentListening) % 60) + "s"),
"Version: %s" % version.text,"🤷‍♂️","This Changes every ~11 seconds",
"hello everybody my name is %s" % DiscordRPC.get_current_user()["username"],
"wash your dishes, i know you got some","Running on %s" % OS.get_distribution_name(),
"%s is cooking" % DiscordRPC.get_current_user()["username"], "debugging" if OS.has_feature("editor") else "Release build",
"this user chose to show you all this info","Playing a Banger",
":steamhappy:","This is a sign that crocodiles live in water",
"Space? SPACE?! SPAAAAAAAAAAAAACE!!!",
"i love gd colonge",
"listening with reverb" if settings_menu_child.reverb_check.button_pressed else
"not listening with reverb","the cake is edible",
"what a great song!","this message is useless",
"stop reading these","why are you reading these",
"hello from mars", "hello to mars","there is a fly in my room",
"yippee!","What, are they allergic to bathtubs or something"]
print(DiscordRPC.get_current_user()["username"])
print(TimeSpentListening)
var LText = SplashStrings.pick_random()
DiscordRPC.large_image_text = LText
DiscordRPC.refresh()
if DiscordRichPresenceEnabled:
UpdateSplashes()
if DiscordRPC.get_is_discord_working():
print(DiscordRPC.get_current_user()["username"])
print(TimeSpentListening)
var LText = SplashStrings.pick_random()
DiscordRPC.large_image_text = LText
if DiscordRPC.get_is_discord_working():
DiscordRPC.refresh()
# "59:59 remaining" timestamp for the activity
if music_player.playing:
TimeSpentListening += _delta
if DiscordRPC.get_current_user().get("username") == "_bucketofchicken":
DiscordRPC.state = "i made the music player btw"
else:
DiscordRPC.state = "Listening To Music"
CurrentPausedIndicatorShaderIntensity = lerp(CurrentPausedIndicatorShaderIntensity,0.0,0.1)
if DiscordRichPresenceEnabled:
DiscordRPC.state = tr("STATE_LISTENING")
else:
DiscordRPC.start_timestamp = int(0)
DiscordRPC.state = "Paused"
DiscordRPC.refresh()
if DiscordRichPresenceEnabled:
DiscordRPC.start_timestamp = int(0)
DiscordRPC.state = tr("STATE_PAUSED")
if DiscordRPC.get_is_discord_working():
DiscordRPC.refresh()
CurrentPausedIndicatorShaderIntensity = lerp(CurrentPausedIndicatorShaderIntensity,1.0,0.1)
if DiscordRichPresenceEnabled:
DiscordRPC.run_callbacks()
@@ -483,10 +548,35 @@ func _process(_delta: float) -> void:
LoopingSong = true
ReactivateLoop = false
loop.icon = LoopPressed
DiscordRPC.refresh()
if DiscordRichPresenceEnabled:
DiscordRPC.refresh()
func UpdateSplashes():
if DiscordRPC.get_is_discord_working() && DiscordRichPresenceEnabled:
SplashStrings = ["Total listening time: %s!" % str(str(int(TimeSpentListening/60)/60 )
+ "h : " + str((int(TimeSpentListening) / 60) % 60) + "m : " +
str(int(TimeSpentListening) % 60) + "s"),
"Version: %s" % version.text,"🤷‍♂️","This Changes every ~11 seconds",
"hello everybody my name is %s" % DiscordRPC.get_current_user()["username"],
"wash your dishes, i know you got some","Running on %s" % OS.get_distribution_name(),
"%s is cooking" % DiscordRPC.get_current_user()["username"], "debugging" if OS.has_feature("editor") else "Release build",
"this user chose to show you all this info","Playing a Banger",
":steamhappy:","This is a sign that crocodiles live in water",
"Space? SPACE?! SPAAAAAAAAAAAAACE!!!",
"i love gd colonge",
"listening with reverb" if settings_menu_child.reverb_check.button_pressed else
"not listening with reverb","the cake is edible",
"what a great song!","this message is useless",
"stop reading these","why are you reading these",
"hello from mars", "hello to mars","there is a fly in my room",
"yippee!","What, are they allergic to bathtubs or something",
"Did you know, a 737 can land with up to 33knots of wind!",
"Welcome to todays JahresSchau",
"ram is very useful","your cpu is tasty","main course: Nvidia GPU",
"SCHOTTLAND FUER IMMER","i eat airborne vehicles","linus trovalds",
"","\(〇_o)/","Nuh Uh!","Yuh Huh","Breaching.",
"I get a narcissistic injury when the wall ignores me","totally not using %s" % version.text]
func SaveEverything():
@@ -509,46 +599,72 @@ func SaveEverything():
"CompressionRatio" : settings_menu_child.ratio_slider.value ,
"CompressionGain" : settings_menu_child.gain_slider.value,
"CurrentCustomBackroundImageDirectory" : CurrentCustomBackroundImageDirectory,
"PlayAllLists" : PlayAllLists
"PlayAllLists" : PlayAllLists,
"DiscordUsername" : DiscordRPC.get_current_user().get("username"),
"UsingPlayingNow" : UsingPlayingNow,
"OverriddenLocale" : overridden_locale
}
print("saving")
saveUserdata(Data)
savePlaylists()
var saveRetrys:int =0
func savePlaylists():
var json = JSON.new()
var file = FileAccess.open("user://playlists.dat", FileAccess.WRITE)
var file2 = FileAccess.open("user://playlistsLocation.dat", FileAccess.WRITE)
@warning_ignore("static_called_on_instance")
if !Playlists == null or !Playlists == {}:
if !(Playlists == null) or !(Playlists == {}):
file.store_string(str(json.stringify(Playlists)))
if !PlaylistsLocation == null or !PlaylistsLocation == {}:
if !(PlaylistsLocation == null) or !(PlaylistsLocation == {}):
file2.store_string(str(json.stringify(PlaylistsLocation)))
if loadUserdata() == {}:
if saveRetrys < 3:
savePlaylists()
else:
printerr("saving failed")
func saveUserdata(content):
var json = JSON.new()
var file = FileAccess.open("user://data.dat", FileAccess.WRITE)
@warning_ignore("static_called_on_instance")
file.store_string(Marshalls.utf8_to_base64(json.stringify(content)))
file.store_string(json.stringify(content))
file.close()
func loadUserdata():
var saveLoadTries:int
func loadUserdata() -> Dictionary:
var json = JSON.new()
var file = FileAccess.open("user://data.dat", FileAccess.READ)
var filetext = file.get_as_text() if file != null else null
if file != null:
var content
var content:Dictionary = {}
if json.parse_string(file.get_as_text()) != null:
content = json.parse_string(filetext)
else:
@warning_ignore("static_called_on_instance")
content = json.parse_string(Marshalls.base64_to_utf8(file.get_as_text()))
file.close()
return content
if content != null:
LoadingSaveFailed = false
return content
else:
LoadingSaveFailed = true
return {}
else:
file.close()
return null
printerr("loading save failed")
if saveLoadTries < 3:
print("retrying")
saveLoadTries +=1
return loadUserdata()
LoadingSaveFailed = true
return {}
var playlistLoadTries:int
func loadPlaylists():
var json = JSON.new()
var file = FileAccess.open("user://playlistsLocation.dat", FileAccess.READ)
@@ -558,10 +674,19 @@ func loadPlaylists():
print(filetext)
#print("shit " + json.parse_string(filetext))
if file.get_as_text() != "" and file2.get_as_text() != "":
PlaylistsLocation = json.parse_string(file.get_as_text())
Playlists = {} if json.parse_string(file2.get_as_text()) == null else json.parse_string(file2.get_as_text())
var PlaylistsLocationTemp
var PlaylistsTemp
PlaylistsLocationTemp = json.parse_string(file.get_as_text())
PlaylistsTemp = json.parse_string(file2.get_as_text())
if (PlaylistsTemp == null) or (PlaylistsLocationTemp == null):
printerr("Loading playlists failed")
LoadingSaveFailed = true
else:
LoadingSaveFailed = false
Playlists = PlaylistsTemp
PlaylistsLocation = PlaylistsLocationTemp
print(PlaylistsLocation)
print(Playlists.keys())
print("Playlists")
file.close()
file2.close()
file2.close()
+1
View File
@@ -0,0 +1 @@
uid://cvqefw0g6ala7
+1
View File
@@ -0,0 +1 @@
uid://bh3btjt2hkbs
+43
View File
@@ -0,0 +1,43 @@
extends Control
@export var ParentScene:MainScene
@export var SongImage:TextureRect
@export var SongNameLabel: RichTextLabel
@export var SongNameScroller:ScrollContainer
@export var SongAuthorScroller:ScrollContainer
@export var SongAuthorLabel: RichTextLabel
@onready var ParentWindow:Window = $".."
@export var update_tick:float = 0.1
@export var slider:HSlider
var ticktime:float
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
ParentScene.SongChanged.connect(SongChanged)
func scroll(scroller:ScrollContainer,incriment:float):
var scroll_h = scroller.get_h_scroll_bar().max_value - scroller.custom_minimum_size.x
if scroll_h !=0:
scroller.scroll_horizontal = wrapi(scroller.scroll_horizontal+incriment,0,\
scroll_h)
return scroller.scroll_horizontal == scroll_h-1 or scroller.scroll_horizontal == 0
return false
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
ticktime -= delta
ParentWindow.size = size
slider.value = ParentScene.current_progress.value
if ticktime <= 0:
ticktime = update_tick
if scroll(SongNameScroller,1):
ticktime = 2
scroll(SongAuthorScroller,1)
func SongChanged():
SongImage.texture = ParentScene.cover.texture
print("SongChanged: ", ParentScene.currentSongName)
SongNameLabel.text = ParentScene.currentSongName
if ParentScene.currentArtistName:
SongAuthorLabel.text = ParentScene.currentArtistName
else:
SongAuthorLabel.text = ""
#ParentWindow.size = size * 2
+1
View File
@@ -0,0 +1 @@
uid://q2gdlr10ncnb
+18
View File
@@ -0,0 +1,18 @@
shader_type canvas_item;
uniform sampler2D alpha;
void vertex() {
// Called for every vertex the material is visible on.
}
void fragment() {
COLOR.a = texture(alpha,UV).a;
//COLOR.a = 1.0-((cos((UV.x)*PI*2.0)+1.0)/2.0);
//COLOR.a -= ((cos(UV.y*PI*2.0)+1.0)/2.0);
}
//void light() {
// // Called for every pixel for every light affecting the CanvasItem.
// // Uncomment to replace the default light processing function with this one.
//}
+1
View File
@@ -0,0 +1 @@
uid://byan4wmg2pjl6
+155
View File
@@ -0,0 +1,155 @@
[gd_scene load_steps=11 format=3 uid="uid://n7cnapaftfse"]
[ext_resource type="Script" uid="uid://q2gdlr10ncnb" path="res://playing_now_window.gd" id="1_f0rac"]
[ext_resource type="Texture2D" uid="uid://cq8jj63iyu2cs" path="res://d7hftxdivxxvm.cloudfront.webp" id="3_haeb5"]
[sub_resource type="Gradient" id="Gradient_yr2ao"]
offsets = PackedFloat32Array(0.992806, 1)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_haeb5"]
gradient = SubResource("Gradient_yr2ao")
width = 512
height = 512
fill = 2
fill_from = Vector2(0.5, 0.5)
fill_to = Vector2(0.5, 0)
metadata/_snap_enabled = true
[sub_resource type="Gradient" id="Gradient_nf0dg"]
offsets = PackedFloat32Array(0.410072, 1)
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_kcqx3"]
gradient = SubResource("Gradient_nf0dg")
[sub_resource type="Theme" id="Theme_yr2ao"]
RichTextLabel/colors/font_shadow_color = Color(0.0768358, 0.0768358, 0.0768358, 0.52549)
RichTextLabel/constants/shadow_outline_size = 10
[sub_resource type="ImageTexture" id="ImageTexture_yr2ao"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_haeb5"]
bg_color = Color(0.28485, 0.28485, 0.28485, 1)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
expand_margin_top = 5.0
expand_margin_bottom = 5.0
shadow_color = Color(0, 0, 0, 0.443137)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yr2ao"]
bg_color = Color(1, 1, 1, 1)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
expand_margin_top = 5.0
expand_margin_bottom = 5.0
[node name="PlayingNowWindow" type="Control" node_paths=PackedStringArray("SongImage", "SongNameLabel", "SongNameScroller", "SongAuthorScroller", "SongAuthorLabel", "slider")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource("1_f0rac")
SongImage = NodePath("ColorRect/TextureRect")
SongNameLabel = NodePath("VBoxContainer/ScrollContainer/SongName")
SongNameScroller = NodePath("VBoxContainer/ScrollContainer")
SongAuthorScroller = NodePath("VBoxContainer/ScrollContainer2")
SongAuthorLabel = NodePath("VBoxContainer/ScrollContainer2/SongAuthor")
slider = NodePath("VBoxContainer/Slider")
[node name="ColorRect" type="TextureRect" parent="."]
clip_children = 1
z_index = -1
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = SubResource("GradientTexture2D_haeb5")
expand_mode = 3
stretch_mode = 5
[node name="TextureRect" type="TextureRect" parent="ColorRect"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
texture = ExtResource("3_haeb5")
expand_mode = 3
stretch_mode = 6
[node name="Sprite2D" type="Sprite2D" parent="."]
clip_children = 1
position = Vector2(-95.3115, -216)
texture = SubResource("GradientTexture2D_kcqx3")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
theme = SubResource("Theme_yr2ao")
alignment = 1
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
custom_minimum_size = Vector2(200, 25)
layout_mode = 2
size_flags_horizontal = 4
horizontal_scroll_mode = 3
vertical_scroll_mode = 0
[node name="SongName" type="RichTextLabel" parent="VBoxContainer/ScrollContainer"]
custom_minimum_size = Vector2(200, 30)
layout_mode = 2
size_flags_horizontal = 6
size_flags_vertical = 4
text = "Playing now TOOOOOOOOOOTT"
fit_content = true
scroll_active = false
autowrap_mode = 0
horizontal_alignment = 1
[node name="ScrollContainer2" type="ScrollContainer" parent="VBoxContainer"]
custom_minimum_size = Vector2(200, 25)
layout_mode = 2
size_flags_horizontal = 4
horizontal_scroll_mode = 3
vertical_scroll_mode = 0
[node name="SongAuthor" type="RichTextLabel" parent="VBoxContainer/ScrollContainer2"]
custom_minimum_size = Vector2(200, 30)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
text = "from protein ribosome"
autowrap_mode = 0
horizontal_alignment = 1
visible_characters_behavior = 3
[node name="Slider" type="HSlider" parent="VBoxContainer"]
custom_minimum_size = Vector2(120, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
theme_override_icons/grabber_disabled = SubResource("ImageTexture_yr2ao")
theme_override_styles/slider = SubResource("StyleBoxFlat_haeb5")
theme_override_styles/grabber_area = SubResource("StyleBoxFlat_yr2ao")
max_value = 1000.0
value = 500.0
editable = false
scrollable = false
+1 -1
View File
@@ -6,7 +6,7 @@ extends Control
@onready var options_dropdown: MenuButton = $HSplitContainer/HBoxContainer/OptionsDropdown
@onready var confirmation: ConfirmationDialog = $ConfirmationDialog
@onready var Parent:MainScene = get_tree().root.get_child(2)
@onready var Parent:MainScene = get_tree().root.get_child(3)
@export var Current:bool
var PlaylistLocation:String = ""
+1
View File
@@ -0,0 +1 @@
uid://cs12qambyvou8
+1 -1
View File
@@ -1,6 +1,6 @@
extends Control
@onready var create_playlist: Button = $PlaylistsContainer/VBoxContainer/HBoxContainer/CreatePlaylist
@onready var create_playlists_menu: Control = $"../CreatePlaylistsMenu"
@onready var create_playlists_menu: Control = $"../../CreatePlaylistsMenu"
@onready var play_all: Button = $PlaylistsContainer/VBoxContainer/HBoxContainer/PlayAll
+1
View File
@@ -0,0 +1 @@
uid://bxc2fqwlm5ea5
+10 -5
View File
@@ -12,9 +12,10 @@ config_version=5
config/name="Simplaudio"
run/main_scene="res://Main.tscn"
config/features=PackedStringArray("4.3", "Forward Plus")
config/features=PackedStringArray("4.4", "Forward Plus")
run/low_processor_mode=true
boot_splash/bg_color=Color(0, 0, 0, 1)
boot_splash/use_filter=false
boot_splash/image="res://BigLogo.png"
config/icon="res://Logo2.png"
config/windows_native_icon="res://addons/godot-yt-dlp/src/favicon2.ico"
@@ -23,14 +24,15 @@ config/windows_native_icon="res://addons/godot-yt-dlp/src/favicon2.ico"
YtDlp="*res://addons/godot-yt-dlp/src/yt_dlp.gd"
MusicMetadataAutoload="*res://MusicMeta-f98d7384de3e2e658dcba3f5b06fb5b57ac2c73c/MusicMeta.gd"
DiscordRPCLoader="*res://addons/discord-rpc-gd/nodes/discord_autoload.gd"
[display]
window/size/initial_position_type=3
window/size/extend_to_title=true
window/energy_saving/keep_screen_on=false
window/stretch/mode="viewport"
window/stretch/aspect="expand"
window/per_pixel_transparency/allowed=true
[dotnet]
@@ -45,12 +47,15 @@ version_control/autoload_on_startup=true
enabled=PackedStringArray("res://addons/discord-rpc-gd/plugin.cfg", "res://addons/godot-yt-dlp/plugin.cfg")
[internationalization]
locale/translations=PackedStringArray("res://translation/translations.de.translation", "res://translation/translations.en.translation")
[rendering]
textures/canvas_textures/default_texture_filter=2
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
textures/vram_compression/import_etc2_astc=true
textures/default_filters/texture_mipmap_bias=2.0
environment/defaults/default_clear_color=Color(0.147672, 0.147672, 0.147672, 1)
anti_aliasing/quality/msaa_2d=2
2d/snap/snap_2d_vertices_to_pixel=true
2d/sdf/scale=0
+12
View File
@@ -0,0 +1,12 @@
# Simplaudio
a simple music player that just works
the v1.x versions are built on a bad codebase, i am working on 2.0 every now and then but it will take a bit for it to be finished
the music player is very functual though
## Translations
I would apprechiate if you could help out with translations,
if you want to help you can find a .csv under the folder called "translation"
create a fork of the repo and modify the translations.csv file with a program like excel or libreoffice calc to include your language
then create a pull request including your translations
I will then merge the translations(annoy me if i forget)
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://bwfw3l3iyv67o"
path="res://.godot/imported/roblox win sound effect.mp3-39d0ba8b033f858214671048098e2f18.mp3str"
[deps]
source_file="res://roblox win sound effect.mp3"
dest_files=["res://.godot/imported/roblox win sound effect.mp3-39d0ba8b033f858214671048098e2f18.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 450 B

After

Width:  |  Height:  |  Size: 8.0 KiB

+33 -37
View File
@@ -1,5 +1,5 @@
extends LineEdit
@onready var search_results: PopupMenu = $"../SearchResults"
@onready var search_results: SearchResults = $"../SearchResults"
var values:Dictionary = {}
var ErrorMargin:float = 0.9
@@ -8,8 +8,7 @@ var currentTime:float
var TextChanged:bool
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
search_results.popup_window = false
search_results.unfocusable = true
pass
# Called every frame. 'delta' is the elapsed time since the previous frame.
@@ -17,46 +16,43 @@ func _process(delta: float) -> void:
currentTime -= delta
if TextChanged:
if currentTime < 0:
release_focus()
TextChanged = false
search_results.clear(true)
values.clear()
currentTime = updatetime
var _i:int = 0
var _s:int = 0
for song:String in owner.textSongs:
var margin:float
var fragments:Array
#print(int((text.length() / 2.0) + 0.5))
for num in range(int((text.length() / 2.0) + 0.5)):
if text.to_lower().substr(int(num*2),2):
fragments.append(text.to_lower().substr(int(num*2),2))
elif text.to_lower().substr(int(num*2),1):
fragments.append(text.to_lower().substr(int(num*2),1))
var amountOfFrags:int
for fragment:String in fragments:
if song.to_lower().containsn(fragment):
amountOfFrags +=1
margin = float(amountOfFrags) / fragments.size()
if margin > ErrorMargin:
search_results.add_item(song.replace(".mp3","") )
values[_i] = _s
_i += 1
_s += 1
updateResults()
func updateResults():
release_focus()
TextChanged = false
search_results.clear()
values.clear()
currentTime = updatetime
var _i:int = 0
var _s:int = 0
for song:String in owner.textSongs:
var margin:float
var fragments:Array
#print(int((text.length() / 2.0) + 0.5))
for num in range(int((text.length() / 2.0) + 0.5)):
if text.to_lower().substr(int(num*2),2):
fragments.append(text.to_lower().substr(int(num*2),2))
elif text.to_lower().substr(int(num*2),1):
fragments.append(text.to_lower().substr(int(num*2),1))
var amountOfFrags:int
for fragment:String in fragments:
if song.to_lower().containsn(fragment):
amountOfFrags +=1
margin = float(amountOfFrags) / fragments.size()
if margin > ErrorMargin:
search_results.add_item(song)
values[_i] = _s
_i += 1
_s += 1
func _on_search_results_index_pressed(index: int) -> void:
print("index " + str(index))
owner.SetSong(values[index])
func _input(event):
if (event is InputEventMouseButton) and event.pressed:
var evLocal = make_input_local(event)
if !Rect2(Vector2(0,0),Vector2(search_results.size.y+ size.y,size.x)).has_point(evLocal.position):
search_results.hide()
func _on_text_submitted(new_text: String) -> void:
TextChanged = true
if !search_results.visible:

Some files were not shown because too many files have changed in this diff Show More