diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index ac41f2e..403ed78 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -27,22 +27,22 @@ jobs: - name: Setup Godot (Cached) run: | apt-get update -qq && apt-get install -y -qq unzip curl - if [ ! -f /cache/godot_4.7 ]; then - echo "Downloading Godot 4.7..." - curl -sL -o /tmp/godot.zip "https://github.com/godotengine/godot-builds/releases/download/4.7-stable/Godot_v4.7-stable_linux.x86_64.zip" + if [ ! -f /cache/godot_4.6.3 ]; then + echo "Downloading Godot 4.6.3..." + curl -sL -o /tmp/godot.zip "https://github.com/godotengine/godot-builds/releases/download/4.6.3-stable/Godot_v4.6.3-stable_linux.x86_64.zip" unzip -q -o /tmp/godot.zip -d /cache/ - mv /cache/Godot_v4.7-stable_linux.x86_64 /cache/godot_4.7 + mv /cache/Godot_v4.6.3-stable_linux.x86_64 /cache/godot_4.6.3 fi - cp /cache/godot_4.7 /usr/local/bin/godot + cp /cache/godot_4.6.3 /usr/local/bin/godot chmod +x /usr/local/bin/godot - mkdir -p ~/.local/share/godot/export_templates/4.7.stable - if [ ! -f /cache/Godot_v4.7-stable_export_templates.tpz ]; then + mkdir -p ~/.local/share/godot/export_templates/4.6.3.stable + if [ ! -f /cache/Godot_v4.6.3-stable_export_templates.tpz ]; then echo "Downloading templates..." - curl -sL -o /cache/Godot_v4.7-stable_export_templates.tpz \ - "https://github.com/godotengine/godot-builds/releases/download/4.7-stable/Godot_v4.7-stable_export_templates.tpz" + curl -sL -o /cache/Godot_v4.6.3-stable_export_templates.tpz \ + "https://github.com/godotengine/godot-builds/releases/download/4.6.3-stable/Godot_v4.6.3-stable_export_templates.tpz" fi - cd ~/.local/share/godot/export_templates/4.7.stable - unzip -q -o /cache/Godot_v4.7-stable_export_templates.tpz + cd ~/.local/share/godot/export_templates/4.6.3.stable + unzip -q -o /cache/Godot_v4.6.3-stable_export_templates.tpz mv templates/* . rm -rf templates cd $GITHUB_WORKSPACE diff --git a/.gitea/workflows/deploy_patch.yml b/.gitea/workflows/deploy_patch.yml index 0d43bda..6aadd0f 100644 --- a/.gitea/workflows/deploy_patch.yml +++ b/.gitea/workflows/deploy_patch.yml @@ -28,14 +28,14 @@ jobs: - name: Setup Godot (Cached) run: | - if [ ! -f /cache/godot_4.7 ]; then - echo "Downloading Godot 4.7..." + if [ ! -f /cache/godot_4.6.3 ]; then + echo "Downloading Godot 4.6.3..." apt-get update -qq && apt-get install -y -qq unzip curl - curl -sL -o /tmp/godot.zip "https://github.com/godotengine/godot-builds/releases/download/4.7-stable/Godot_v4.7-stable_linux.x86_64.zip" + curl -sL -o /tmp/godot.zip "https://github.com/godotengine/godot-builds/releases/download/4.6.3-stable/Godot_v4.6.3-stable_linux.x86_64.zip" unzip -q -o /tmp/godot.zip -d /cache/ - mv /cache/Godot_v4.7-stable_linux.x86_64 /cache/godot_4.7 + mv /cache/Godot_v4.6.3-stable_linux.x86_64 /cache/godot_4.6.3 fi - cp /cache/godot_4.7 /usr/local/bin/godot + cp /cache/godot_4.6.3 /usr/local/bin/godot chmod +x /usr/local/bin/godot mkdir -p build diff --git a/CHANGELOG_DRAFT.md b/CHANGELOG_DRAFT.md index ac6ec8e..26134d2 100644 --- a/CHANGELOG_DRAFT.md +++ b/CHANGELOG_DRAFT.md @@ -3,7 +3,6 @@ - Fixed punch/smack SFX playing repeatedly when quickly attacking another player. - Fixed currency split between Gacha and Shop — wallet balance now updates immediately after purchase without needing to reopen the panel. - Fixed fatal crash in Multiplayer Gauntlet caused by missing `has_method` check on smack cooldown timers on remote peers. -- Upgraded engine from Godot 4.6 to 4.7 stable for better performance and stability. - Migrated patch delivery from GitHub Pages to Gitea native raw endpoint — no more external dependencies for game updates. - CI: optimized build cache for Godot binary, eliminating repeated 140MB downloads on every workflow run. - CI: shallow repository checkout (--depth 1) for faster clone times. diff --git a/assets/graphics/gui/lobby/_scan_trigger.txt b/assets/graphics/gui/lobby/_scan_trigger.txt new file mode 100644 index 0000000..b28fbc7 --- /dev/null +++ b/assets/graphics/gui/lobby/_scan_trigger.txt @@ -0,0 +1 @@ +trigger \ No newline at end of file diff --git a/assets/graphics/gui/lobby/badge_bar.svg b/assets/graphics/gui/lobby/badge_bar.svg new file mode 100644 index 0000000..407437a --- /dev/null +++ b/assets/graphics/gui/lobby/badge_bar.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/badge_bar.svg.import b/assets/graphics/gui/lobby/badge_bar.svg.import new file mode 100644 index 0000000..d3c9f2c --- /dev/null +++ b/assets/graphics/gui/lobby/badge_bar.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dqwm7rou1fttt" +path="res://.godot/imported/badge_bar.svg-e4a524a9fe98564c44524e72480e967b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/badge_bar.svg" +dest_files=["res://.godot/imported/badge_bar.svg-e4a524a9fe98564c44524e72480e967b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/bag.svg b/assets/graphics/gui/lobby/bag.svg new file mode 100644 index 0000000..c948ccc --- /dev/null +++ b/assets/graphics/gui/lobby/bag.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/graphics/gui/lobby/bag.svg.import b/assets/graphics/gui/lobby/bag.svg.import new file mode 100644 index 0000000..d8a1407 --- /dev/null +++ b/assets/graphics/gui/lobby/bag.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b45naqdq1rfbf" +path="res://.godot/imported/bag.svg-6aad2540ac3b2ae41bbaa0eab08dc35d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/bag.svg" +dest_files=["res://.godot/imported/bag.svg-6aad2540ac3b2ae41bbaa0eab08dc35d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/bar_active.svg b/assets/graphics/gui/lobby/bar_active.svg new file mode 100644 index 0000000..174a579 --- /dev/null +++ b/assets/graphics/gui/lobby/bar_active.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/bar_active.svg.import b/assets/graphics/gui/lobby/bar_active.svg.import new file mode 100644 index 0000000..978f75d --- /dev/null +++ b/assets/graphics/gui/lobby/bar_active.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b5qt2u2k23b5w" +path="res://.godot/imported/bar_active.svg-fa2bdc20c08dc5e5caf41404ea9fca52.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/bar_active.svg" +dest_files=["res://.godot/imported/bar_active.svg-fa2bdc20c08dc5e5caf41404ea9fca52.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/bar_default.svg b/assets/graphics/gui/lobby/bar_default.svg new file mode 100644 index 0000000..a60c3aa --- /dev/null +++ b/assets/graphics/gui/lobby/bar_default.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/bar_default.svg.import b/assets/graphics/gui/lobby/bar_default.svg.import new file mode 100644 index 0000000..875b2c8 --- /dev/null +++ b/assets/graphics/gui/lobby/bar_default.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://y0y2fqa6xml7" +path="res://.godot/imported/bar_default.svg-b536747d2c9a6af5ffa8cdb61e16d577.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/bar_default.svg" +dest_files=["res://.godot/imported/bar_default.svg-b536747d2c9a6af5ffa8cdb61e16d577.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/battlepass_left.png b/assets/graphics/gui/lobby/battlepass_left.png new file mode 100644 index 0000000..8aa403e Binary files /dev/null and b/assets/graphics/gui/lobby/battlepass_left.png differ diff --git a/assets/graphics/gui/lobby/battlepass_left.png.import b/assets/graphics/gui/lobby/battlepass_left.png.import new file mode 100644 index 0000000..f43f5b7 --- /dev/null +++ b/assets/graphics/gui/lobby/battlepass_left.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bwk0ftvkieg6a" +path="res://.godot/imported/battlepass_left.png-faa67cece510943dcfea37649905d983.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/battlepass_left.png" +dest_files=["res://.godot/imported/battlepass_left.png-faa67cece510943dcfea37649905d983.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 diff --git a/assets/graphics/gui/lobby/battlepass_right.png b/assets/graphics/gui/lobby/battlepass_right.png new file mode 100644 index 0000000..794012e Binary files /dev/null and b/assets/graphics/gui/lobby/battlepass_right.png differ diff --git a/assets/graphics/gui/lobby/battlepass_right.png.import b/assets/graphics/gui/lobby/battlepass_right.png.import new file mode 100644 index 0000000..8abf7dd --- /dev/null +++ b/assets/graphics/gui/lobby/battlepass_right.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ccnwto2rc8h6u" +path="res://.godot/imported/battlepass_right.png-bfe70d145001815fbebe7138176c3a0d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/battlepass_right.png" +dest_files=["res://.godot/imported/battlepass_right.png-bfe70d145001815fbebe7138176c3a0d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 diff --git a/assets/graphics/gui/lobby/blue_tile.png b/assets/graphics/gui/lobby/blue_tile.png new file mode 100644 index 0000000..ca8a56e Binary files /dev/null and b/assets/graphics/gui/lobby/blue_tile.png differ diff --git a/assets/graphics/gui/lobby/blue_tile.png.import b/assets/graphics/gui/lobby/blue_tile.png.import new file mode 100644 index 0000000..06cdfff --- /dev/null +++ b/assets/graphics/gui/lobby/blue_tile.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjqxr7nt5n1i0" +path="res://.godot/imported/blue_tile.png-b6228b7f24ff3e6dc562f9408bf54937.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/blue_tile.png" +dest_files=["res://.godot/imported/blue_tile.png-b6228b7f24ff3e6dc562f9408bf54937.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 diff --git a/assets/graphics/gui/lobby/card_xmple.png b/assets/graphics/gui/lobby/card_xmple.png new file mode 100644 index 0000000..0622710 Binary files /dev/null and b/assets/graphics/gui/lobby/card_xmple.png differ diff --git a/assets/graphics/gui/lobby/card_xmple.png.import b/assets/graphics/gui/lobby/card_xmple.png.import new file mode 100644 index 0000000..595e5c9 --- /dev/null +++ b/assets/graphics/gui/lobby/card_xmple.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhv35y3q1jxr0" +path="res://.godot/imported/card_xmple.png-8c32694d37dfa9b52f185eb68032d21f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/card_xmple.png" +dest_files=["res://.godot/imported/card_xmple.png-8c32694d37dfa9b52f185eb68032d21f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 diff --git a/assets/graphics/gui/lobby/chat.svg b/assets/graphics/gui/lobby/chat.svg new file mode 100644 index 0000000..c8e0af5 --- /dev/null +++ b/assets/graphics/gui/lobby/chat.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/chat.svg.import b/assets/graphics/gui/lobby/chat.svg.import new file mode 100644 index 0000000..a96d188 --- /dev/null +++ b/assets/graphics/gui/lobby/chat.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dj1dt2noi1bl3" +path="res://.godot/imported/chat.svg-ace9e070f497fc9416dfc6184da3dbb8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/chat.svg" +dest_files=["res://.godot/imported/chat.svg-ace9e070f497fc9416dfc6184da3dbb8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/chev.svg b/assets/graphics/gui/lobby/chev.svg new file mode 100644 index 0000000..4320dd0 --- /dev/null +++ b/assets/graphics/gui/lobby/chev.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/chev.svg.import b/assets/graphics/gui/lobby/chev.svg.import new file mode 100644 index 0000000..9d4d26c --- /dev/null +++ b/assets/graphics/gui/lobby/chev.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bblx8fmv77m7h" +path="res://.godot/imported/chev.svg-fce4a145742f1ff9544de09b3a2b99e2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/chev.svg" +dest_files=["res://.godot/imported/chev.svg-fce4a145742f1ff9544de09b3a2b99e2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/community_bar.svg b/assets/graphics/gui/lobby/community_bar.svg new file mode 100644 index 0000000..44fc448 --- /dev/null +++ b/assets/graphics/gui/lobby/community_bar.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/graphics/gui/lobby/community_bar.svg.import b/assets/graphics/gui/lobby/community_bar.svg.import new file mode 100644 index 0000000..cdb8452 --- /dev/null +++ b/assets/graphics/gui/lobby/community_bar.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bg7mca4i1fgup" +path="res://.godot/imported/community_bar.svg-504b1077795422180a9f71afb6c956cc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/community_bar.svg" +dest_files=["res://.godot/imported/community_bar.svg-504b1077795422180a9f71afb6c956cc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/crown_profile.svg b/assets/graphics/gui/lobby/crown_profile.svg new file mode 100644 index 0000000..53d67ff --- /dev/null +++ b/assets/graphics/gui/lobby/crown_profile.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/graphics/gui/lobby/crown_profile.svg.import b/assets/graphics/gui/lobby/crown_profile.svg.import new file mode 100644 index 0000000..60ae522 --- /dev/null +++ b/assets/graphics/gui/lobby/crown_profile.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://k1sghma1361w" +path="res://.godot/imported/crown_profile.svg-1d229ff3606b6073a9f2b00a00db02fc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/crown_profile.svg" +dest_files=["res://.godot/imported/crown_profile.svg-1d229ff3606b6073a9f2b00a00db02fc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/crown_profile.tres b/assets/graphics/gui/lobby/crown_profile.tres new file mode 100644 index 0000000..3f261b7 --- /dev/null +++ b/assets/graphics/gui/lobby/crown_profile.tres @@ -0,0 +1,4 @@ +[gd_resource type="CompressedTexture2D" format=3 uid="uid://dwb753gnca5wv"] + +[resource] +load_path = "res://.godot/imported/crown_profile.svg-1d229ff3606b6073a9f2b00a00db02fc.ctex" diff --git a/assets/graphics/gui/lobby/curr_gold.svg b/assets/graphics/gui/lobby/curr_gold.svg new file mode 100644 index 0000000..56f0f11 --- /dev/null +++ b/assets/graphics/gui/lobby/curr_gold.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/graphics/gui/lobby/curr_gold.svg.import b/assets/graphics/gui/lobby/curr_gold.svg.import new file mode 100644 index 0000000..4ecb5d4 --- /dev/null +++ b/assets/graphics/gui/lobby/curr_gold.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://rncdblgyqxms" +path="res://.godot/imported/curr_gold.svg-e2aade40f51cb8afdee7896e5f918c90.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/curr_gold.svg" +dest_files=["res://.godot/imported/curr_gold.svg-e2aade40f51cb8afdee7896e5f918c90.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/curr_gold.tres b/assets/graphics/gui/lobby/curr_gold.tres new file mode 100644 index 0000000..65c76b7 --- /dev/null +++ b/assets/graphics/gui/lobby/curr_gold.tres @@ -0,0 +1,4 @@ +[gd_resource type="CompressedTexture2D" format=3 uid="uid://dq3crtqml0k35"] + +[resource] +load_path = "res://.godot/imported/curr_gold.svg-e2aade40f51cb8afdee7896e5f918c90.ctex" diff --git a/assets/graphics/gui/lobby/curr_star.svg b/assets/graphics/gui/lobby/curr_star.svg new file mode 100644 index 0000000..a4fd1fa --- /dev/null +++ b/assets/graphics/gui/lobby/curr_star.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/graphics/gui/lobby/curr_star.svg.import b/assets/graphics/gui/lobby/curr_star.svg.import new file mode 100644 index 0000000..1af5f3a --- /dev/null +++ b/assets/graphics/gui/lobby/curr_star.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bt70g810ef6jj" +path="res://.godot/imported/curr_star.svg-6c7fe7037dccf76a4615f5430186d65a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/curr_star.svg" +dest_files=["res://.godot/imported/curr_star.svg-6c7fe7037dccf76a4615f5430186d65a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/curr_star.tres b/assets/graphics/gui/lobby/curr_star.tres new file mode 100644 index 0000000..30adb0f --- /dev/null +++ b/assets/graphics/gui/lobby/curr_star.tres @@ -0,0 +1,4 @@ +[gd_resource type="CompressedTexture2D" format=3 uid="uid://duxo4w34d3ree"] + +[resource] +load_path = "res://.godot/imported/curr_star.svg-6c7fe7037dccf76a4615f5430186d65a.ctex" diff --git a/assets/graphics/gui/lobby/edit_profile.svg b/assets/graphics/gui/lobby/edit_profile.svg new file mode 100644 index 0000000..8a1548a --- /dev/null +++ b/assets/graphics/gui/lobby/edit_profile.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/graphics/gui/lobby/edit_profile.svg.import b/assets/graphics/gui/lobby/edit_profile.svg.import new file mode 100644 index 0000000..fce96b2 --- /dev/null +++ b/assets/graphics/gui/lobby/edit_profile.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dp3s31pu8qlhh" +path="res://.godot/imported/edit_profile.svg-2a0c92ccba4d176da6dc121f1c47b697.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/edit_profile.svg" +dest_files=["res://.godot/imported/edit_profile.svg-2a0c92ccba4d176da6dc121f1c47b697.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/edit_profile.tres b/assets/graphics/gui/lobby/edit_profile.tres new file mode 100644 index 0000000..86be181 --- /dev/null +++ b/assets/graphics/gui/lobby/edit_profile.tres @@ -0,0 +1,4 @@ +[gd_resource type="CompressedTexture2D" format=3 uid="uid://b2lyv0usa762v"] + +[resource] +load_path = "res://.godot/imported/edit_profile.svg-2a0c92ccba4d176da6dc121f1c47b697.ctex" diff --git a/assets/graphics/gui/lobby/emoji.svg b/assets/graphics/gui/lobby/emoji.svg new file mode 100644 index 0000000..892f5bd --- /dev/null +++ b/assets/graphics/gui/lobby/emoji.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/graphics/gui/lobby/emoji.svg.import b/assets/graphics/gui/lobby/emoji.svg.import new file mode 100644 index 0000000..a198981 --- /dev/null +++ b/assets/graphics/gui/lobby/emoji.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8bxf0eim4g4p" +path="res://.godot/imported/emoji.svg-6f5d5aa30898e8bccd149f34e174da0c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/emoji.svg" +dest_files=["res://.godot/imported/emoji.svg-6f5d5aa30898e8bccd149f34e174da0c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/event_calendar.svg b/assets/graphics/gui/lobby/event_calendar.svg new file mode 100644 index 0000000..82e44a6 --- /dev/null +++ b/assets/graphics/gui/lobby/event_calendar.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/graphics/gui/lobby/event_calendar.svg.import b/assets/graphics/gui/lobby/event_calendar.svg.import new file mode 100644 index 0000000..ce9a83b --- /dev/null +++ b/assets/graphics/gui/lobby/event_calendar.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d04v2xn8xmom" +path="res://.godot/imported/event_calendar.svg-bc64330a484d7c6bd4740c6db41ef248.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/event_calendar.svg" +dest_files=["res://.godot/imported/event_calendar.svg-bc64330a484d7c6bd4740c6db41ef248.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/green_tile.png b/assets/graphics/gui/lobby/green_tile.png new file mode 100644 index 0000000..47bb80a Binary files /dev/null and b/assets/graphics/gui/lobby/green_tile.png differ diff --git a/assets/graphics/gui/lobby/green_tile.png.import b/assets/graphics/gui/lobby/green_tile.png.import new file mode 100644 index 0000000..37b6068 --- /dev/null +++ b/assets/graphics/gui/lobby/green_tile.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cep023y0s7f0f" +path="res://.godot/imported/green_tile.png-ee3310f4f145f80c08614e3446669370.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/green_tile.png" +dest_files=["res://.godot/imported/green_tile.png-ee3310f4f145f80c08614e3446669370.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 diff --git a/assets/graphics/gui/lobby/info.svg b/assets/graphics/gui/lobby/info.svg new file mode 100644 index 0000000..a59e086 --- /dev/null +++ b/assets/graphics/gui/lobby/info.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/graphics/gui/lobby/info.svg.import b/assets/graphics/gui/lobby/info.svg.import new file mode 100644 index 0000000..b61f5a9 --- /dev/null +++ b/assets/graphics/gui/lobby/info.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c2empktddd47l" +path="res://.godot/imported/info.svg-ee9a6cfd88f87333aa473a30db1f68d5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/info.svg" +dest_files=["res://.godot/imported/info.svg-ee9a6cfd88f87333aa473a30db1f68d5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/message_bar.svg b/assets/graphics/gui/lobby/message_bar.svg new file mode 100644 index 0000000..93ac77e --- /dev/null +++ b/assets/graphics/gui/lobby/message_bar.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/graphics/gui/lobby/message_bar.svg.import b/assets/graphics/gui/lobby/message_bar.svg.import new file mode 100644 index 0000000..da96a25 --- /dev/null +++ b/assets/graphics/gui/lobby/message_bar.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kmleuwyxmn0c" +path="res://.godot/imported/message_bar.svg-66acc7d397a41ea08336d5cecf805c29.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/message_bar.svg" +dest_files=["res://.godot/imported/message_bar.svg-66acc7d397a41ea08336d5cecf805c29.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/question_circle.svg b/assets/graphics/gui/lobby/question_circle.svg new file mode 100644 index 0000000..ffe3ebb --- /dev/null +++ b/assets/graphics/gui/lobby/question_circle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/graphics/gui/lobby/question_circle.svg.import b/assets/graphics/gui/lobby/question_circle.svg.import new file mode 100644 index 0000000..17e88f8 --- /dev/null +++ b/assets/graphics/gui/lobby/question_circle.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7dp73xokujdb" +path="res://.godot/imported/question_circle.svg-2401c75e57a76566e387083459fe91d8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/question_circle.svg" +dest_files=["res://.godot/imported/question_circle.svg-2401c75e57a76566e387083459fe91d8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=2.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/rank_bar.svg b/assets/graphics/gui/lobby/rank_bar.svg new file mode 100644 index 0000000..db6cec0 --- /dev/null +++ b/assets/graphics/gui/lobby/rank_bar.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/rank_bar.svg.import b/assets/graphics/gui/lobby/rank_bar.svg.import new file mode 100644 index 0000000..6ce2d50 --- /dev/null +++ b/assets/graphics/gui/lobby/rank_bar.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btjm25hjxssbd" +path="res://.godot/imported/rank_bar.svg-c6d5a0b7f812f9e43fcf123b38dac146.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/rank_bar.svg" +dest_files=["res://.godot/imported/rank_bar.svg-c6d5a0b7f812f9e43fcf123b38dac146.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/red_tile.png b/assets/graphics/gui/lobby/red_tile.png new file mode 100644 index 0000000..6b93b75 Binary files /dev/null and b/assets/graphics/gui/lobby/red_tile.png differ diff --git a/assets/graphics/gui/lobby/red_tile.png.import b/assets/graphics/gui/lobby/red_tile.png.import new file mode 100644 index 0000000..f870695 --- /dev/null +++ b/assets/graphics/gui/lobby/red_tile.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cic88doubsblr" +path="res://.godot/imported/red_tile.png-9f219ec997f64576619073039811b504.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/red_tile.png" +dest_files=["res://.godot/imported/red_tile.png-9f219ec997f64576619073039811b504.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 diff --git a/assets/graphics/gui/lobby/setting_bar.svg b/assets/graphics/gui/lobby/setting_bar.svg new file mode 100644 index 0000000..c4fd2ef --- /dev/null +++ b/assets/graphics/gui/lobby/setting_bar.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/setting_bar.svg.import b/assets/graphics/gui/lobby/setting_bar.svg.import new file mode 100644 index 0000000..e7c64be --- /dev/null +++ b/assets/graphics/gui/lobby/setting_bar.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://lks5ndwn3ppp" +path="res://.godot/imported/setting_bar.svg-45496c706178804cc5c7146fcde7bf19.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/setting_bar.svg" +dest_files=["res://.godot/imported/setting_bar.svg-45496c706178804cc5c7146fcde7bf19.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/shop_bar.svg b/assets/graphics/gui/lobby/shop_bar.svg new file mode 100644 index 0000000..bd57934 --- /dev/null +++ b/assets/graphics/gui/lobby/shop_bar.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/graphics/gui/lobby/shop_bar.svg.import b/assets/graphics/gui/lobby/shop_bar.svg.import new file mode 100644 index 0000000..2976850 --- /dev/null +++ b/assets/graphics/gui/lobby/shop_bar.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ci3nm26qx5vdo" +path="res://.godot/imported/shop_bar.svg-8a6d623c86eeefaae8816eebe1a143fd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/shop_bar.svg" +dest_files=["res://.godot/imported/shop_bar.svg-8a6d623c86eeefaae8816eebe1a143fd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/assets/graphics/gui/lobby/yellow_tile.png b/assets/graphics/gui/lobby/yellow_tile.png new file mode 100644 index 0000000..9836541 Binary files /dev/null and b/assets/graphics/gui/lobby/yellow_tile.png differ diff --git a/assets/graphics/gui/lobby/yellow_tile.png.import b/assets/graphics/gui/lobby/yellow_tile.png.import new file mode 100644 index 0000000..9c55238 --- /dev/null +++ b/assets/graphics/gui/lobby/yellow_tile.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dc0o5lcx1cq64" +path="res://.godot/imported/yellow_tile.png-764b81de5a4ed1002d1b5b0ffe150bbb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/gui/lobby/yellow_tile.png" +dest_files=["res://.godot/imported/yellow_tile.png-764b81de5a4ed1002d1b5b0ffe150bbb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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 diff --git a/assets/shaders/rounded_border.gdshader b/assets/shaders/rounded_border.gdshader new file mode 100644 index 0000000..efa0d3b --- /dev/null +++ b/assets/shaders/rounded_border.gdshader @@ -0,0 +1,13 @@ +shader_type canvas_item; + +#include "res://assets/shaders/rounded_border.gdshaderinc" + +uniform vec2 rect_size = vec2(270.0, 108.0); +uniform vec4 corner_radius = vec4(20.0, 20.0, 20.0, 20.0); // top-right, bottom-right, top-left, bottom-left +uniform float border_width : hint_range(0.0, 50.0) = 3.0; +uniform vec4 border_color : source_color = vec4(0.06666667, 0.13333334, 0.1882353, 1.0); + +void fragment() { + vec4 tex_color = texture(TEXTURE, UV) * COLOR; + COLOR = apply_rounded_border(tex_color, UV, rect_size, corner_radius, border_width, border_color); +} diff --git a/assets/shaders/rounded_border.gdshader.uid b/assets/shaders/rounded_border.gdshader.uid new file mode 100644 index 0000000..4d72cb1 --- /dev/null +++ b/assets/shaders/rounded_border.gdshader.uid @@ -0,0 +1 @@ +uid://cjpl2gt2fc1h2 diff --git a/assets/shaders/rounded_border.gdshaderinc b/assets/shaders/rounded_border.gdshaderinc new file mode 100644 index 0000000..2cb666b --- /dev/null +++ b/assets/shaders/rounded_border.gdshaderinc @@ -0,0 +1,21 @@ +float rounded_box_sdf(vec2 p, vec2 half_size, vec4 r) { + r.xy = (p.x > 0.0) ? r.xy : r.zw; + r.x = (p.y > 0.0) ? r.x : r.y; + vec2 q = abs(p) - half_size + r.x; + return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x; +} + +vec4 apply_rounded_border(vec4 base_color, vec2 uv, vec2 rect_size, vec4 corner_radius, float border_width, vec4 border_color) { + vec2 px = uv * rect_size; + vec2 centered = px - rect_size * 0.5; + vec2 half_size = rect_size * 0.5; + float d = rounded_box_sdf(centered, half_size, corner_radius); + + float aa = 1.0; + float shape_alpha = 1.0 - smoothstep(-aa, aa, d); + float border_mask = 1.0 - smoothstep(border_width - aa, border_width + aa, -d); + + vec4 col = mix(base_color, border_color, border_mask); + col.a *= shape_alpha; + return col; +} diff --git a/assets/shaders/rounded_border.gdshaderinc.uid b/assets/shaders/rounded_border.gdshaderinc.uid new file mode 100644 index 0000000..bf2f10d --- /dev/null +++ b/assets/shaders/rounded_border.gdshaderinc.uid @@ -0,0 +1 @@ +uid://blepo5lsqvih7 diff --git a/assets/shaders/ticket_blur_dissolve.gdshader b/assets/shaders/ticket_blur_dissolve.gdshader new file mode 100644 index 0000000..c7d6433 --- /dev/null +++ b/assets/shaders/ticket_blur_dissolve.gdshader @@ -0,0 +1,24 @@ +shader_type canvas_item; + +#include "res://assets/shaders/rounded_border.gdshaderinc" + +uniform float blur_amount : hint_range(0.0, 1.0) = 0.0; +uniform float blur_radius_px : hint_range(0.0, 32.0) = 14.0; +uniform vec2 rect_size = vec2(100.0, 108.0); +uniform vec4 corner_radius = vec4(35.0, 35.0, 12.0, 12.0); // top-right, bottom-right, top-left, bottom-left +uniform float border_width : hint_range(0.0, 50.0) = 3.0; +uniform vec4 border_color : source_color = vec4(0.06666667, 0.13333334, 0.1882353, 1.0); + +void fragment() { + vec2 px = TEXTURE_PIXEL_SIZE * blur_radius_px * blur_amount; + vec4 sum = texture(TEXTURE, UV) * 2.0; + float total_weight = 2.0; + for (int i = 0; i < 8; i++) { + float angle = float(i) * 0.7853981634; // TAU / 8 + vec2 offset = vec2(cos(angle), sin(angle)) * px; + sum += texture(TEXTURE, UV + offset); + total_weight += 1.0; + } + vec4 tex_color = (sum / total_weight) * COLOR; + COLOR = apply_rounded_border(tex_color, UV, rect_size, corner_radius, border_width, border_color); +} diff --git a/assets/shaders/ticket_blur_dissolve.gdshader.uid b/assets/shaders/ticket_blur_dissolve.gdshader.uid new file mode 100644 index 0000000..60e4cd8 --- /dev/null +++ b/assets/shaders/ticket_blur_dissolve.gdshader.uid @@ -0,0 +1 @@ +uid://dmsw38nbm2val diff --git a/docs/STEAMWORKS_SETUP.md b/docs/STEAMWORKS_SETUP.md index 6d1cc85..c2c26fe 100644 --- a/docs/STEAMWORKS_SETUP.md +++ b/docs/STEAMWORKS_SETUP.md @@ -58,7 +58,7 @@ No separate Steam vs. Non-Steam presets. All presets produce the same Nakama-onl On tag push (`v*`), the CI pipeline: 1. **Checkout** code at tag -2. **Setup Godot 4.7** (cached) +2. **Setup Godot 4.6.3** (cached) 3. **Export Windows** → `build/windows/tekton_armageddon_windows.exe` (copies `libgodotsteam*` DLLs if present, failure ignored with `|| true`) 4. **Export Linux** → `build/linux/tekton_armageddon_linux.x86_64` 5. **Export macOS** → `build/macos/tekton_armageddon_macos.zip` diff --git a/project.godot b/project.godot index d5e2610..19b44df 100644 --- a/project.godot +++ b/project.godot @@ -17,7 +17,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true config/name="Tekton Dash Armageddon" config/version="2.4.3" run/main_scene="res://scenes/ui/boot_screen.tscn" -config/features=PackedStringArray("4.7", "Forward Plus") +config/features=PackedStringArray("4.6", "Forward Plus") boot_splash/bg_color=Color(0.16470589, 0.6745098, 0.9372549, 1) boot_splash/stretch_mode=0 boot_splash/image="uid://b10e6kr508642" diff --git a/scenes/battlepass_slider.gd b/scenes/battlepass_slider.gd new file mode 100644 index 0000000..de07a6e --- /dev/null +++ b/scenes/battlepass_slider.gd @@ -0,0 +1,148 @@ +extends ScrollContainer + +signal page_changed(index: int) + +const SNAP_DURATION := 0.25 +const TEX_DEFAULT := preload("res://assets/graphics/gui/lobby/bar_default.svg") +const TEX_ACTIVE := preload("res://assets/graphics/gui/lobby/bar_active.svg") + +@export var auto_advance_enabled: bool = true +@export var auto_advance_delay: float = 4.0 + +@onready var _track: HBoxContainer = $CardMargin/HBoxContainer +@onready var _page_dots: Array = get_node_or_null("../PageIndicator").get_children() if get_node_or_null("../PageIndicator") else [] + +var _dragging := false +var _drag_start_pos := 0.0 +var _drag_start_scroll := 0 +var _snap_tween: Tween +var _auto_timer: Timer +var _last_reported_page := -1 + + +func _ready() -> void: + _update_indicator() + _setup_auto_timer() + + +func _setup_auto_timer() -> void: + _auto_timer = Timer.new() + _auto_timer.name = "AutoAdvanceTimer" + _auto_timer.one_shot = true + _auto_timer.timeout.connect(_on_auto_timer_timeout) + add_child(_auto_timer) + _restart_auto_timer() + + +func _restart_auto_timer() -> void: + if not auto_advance_enabled or _dragging or _card_count() <= 1: + return + _auto_timer.stop() + _auto_timer.wait_time = auto_advance_delay + _auto_timer.start() + + +func _on_auto_timer_timeout() -> void: + if _dragging: + return + var next_index := (_current_page() + 1) % _card_count() + _animate_to_page(next_index) + + +func _exit_tree() -> void: + if _auto_timer: + _auto_timer.stop() + if _snap_tween: + _snap_tween.kill() + + +func _gui_input(event: InputEvent) -> void: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: + if event.pressed: + _start_drag(event.position.x) + elif _dragging: + _end_drag() + elif event is InputEventMouseMotion and _dragging: + _update_drag(event.position.x) + elif event is InputEventScreenTouch and event.index == 0: + if event.pressed: + _start_drag(event.position.x) + elif _dragging: + _end_drag() + elif event is InputEventScreenDrag and event.index == 0 and _dragging: + _update_drag(event.position.x) + + +func _start_drag(x: float) -> void: + if _snap_tween: + _snap_tween.kill() + _auto_timer.stop() + _dragging = true + _drag_start_pos = x + _drag_start_scroll = scroll_horizontal + + +func _update_drag(x: float) -> void: + var delta := _drag_start_pos - x + scroll_horizontal = clampi(_drag_start_scroll + int(delta), 0, _max_scroll()) + _update_indicator() + + +func _end_drag() -> void: + _dragging = false + _snap_to_nearest_card() + + +func _max_scroll() -> int: + var bar := get_h_scroll_bar() + return maxi(0, int(bar.max_value - bar.page)) + + +func _card_count() -> int: + return maxi(1, _track.get_child_count()) + + +func _card_step() -> float: + var count := _card_count() + if count <= 1: + return 0.0 + return float(_max_scroll()) / float(count - 1) + + +func _current_page() -> int: + var step := _card_step() + if step <= 0.0: + return 0 + return clampi(roundi(scroll_horizontal / step), 0, _card_count() - 1) + + +func _snap_to_nearest_card() -> void: + _animate_to_page(_current_page()) + + +func _animate_to_page(target_index: int) -> void: + target_index = clampi(target_index, 0, _card_count() - 1) + var step := _card_step() + var target_scroll := int(round(target_index * step)) + if _snap_tween: + _snap_tween.kill() + _snap_tween = create_tween().set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + _snap_tween.tween_method(_set_scroll_and_indicator, float(scroll_horizontal), float(target_scroll), SNAP_DURATION) + _snap_tween.finished.connect(_restart_auto_timer) + + +func _set_scroll_and_indicator(value: float) -> void: + scroll_horizontal = int(round(value)) + _update_indicator() + + +func _update_indicator() -> void: + if _page_dots.is_empty(): + return + var active_index := _current_page() + for i in _page_dots.size(): + var dot: TextureRect = _page_dots[i] + dot.texture = TEX_ACTIVE if i == active_index else TEX_DEFAULT + if active_index != _last_reported_page: + _last_reported_page = active_index + page_changed.emit(active_index) diff --git a/scenes/battlepass_slider.gd.uid b/scenes/battlepass_slider.gd.uid new file mode 100644 index 0000000..c05d898 --- /dev/null +++ b/scenes/battlepass_slider.gd.uid @@ -0,0 +1 @@ +uid://c54ct7t1td21g diff --git a/scenes/battlepass_slider.tscn b/scenes/battlepass_slider.tscn new file mode 100644 index 0000000..d106d46 --- /dev/null +++ b/scenes/battlepass_slider.tscn @@ -0,0 +1,187 @@ +[gd_scene format=3 uid="uid://bnnq5eunh8o6j"] + +[ext_resource type="Script" uid="uid://dc5dh15rrdc4" path="res://scenes/ui/battlepass_panel.gd" id="1_4dl3x"] +[ext_resource type="Script" uid="uid://c54ct7t1td21g" path="res://scenes/battlepass_slider.gd" id="2_t440c"] +[ext_resource type="Script" uid="uid://bwu41vcu5t8nd" path="res://scenes/ui/battlepass_ticket.gd" id="3_1jvp2"] +[ext_resource type="Shader" uid="uid://cjpl2gt2fc1h2" path="res://assets/shaders/rounded_border.gdshader" id="3_tf0vp"] +[ext_resource type="Texture2D" uid="uid://bwk0ftvkieg6a" path="res://assets/graphics/gui/lobby/battlepass_left.png" id="4_1jvp2"] +[ext_resource type="Texture2D" uid="uid://y0y2fqa6xml7" path="res://assets/graphics/gui/lobby/bar_default.svg" id="4_ypw31"] +[ext_resource type="Texture2D" uid="uid://b5qt2u2k23b5w" path="res://assets/graphics/gui/lobby/bar_active.svg" id="5_tf0vp"] +[ext_resource type="Shader" uid="uid://dmsw38nbm2val" path="res://assets/shaders/ticket_blur_dissolve.gdshader" id="6_jwc2v"] +[ext_resource type="Texture2D" uid="uid://ccnwto2rc8h6u" path="res://assets/graphics/gui/lobby/battlepass_right.png" id="9_qnxxy"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8vv3u"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_qnxxy"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_d13xu"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_tf0vp"] +shader = ExtResource("3_tf0vp") +shader_parameter/rect_size = Vector2(270, 108) +shader_parameter/corner_radius = Vector4(20, 20, 20, 20) +shader_parameter/border_width = 3.0 +shader_parameter/border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_1jvp2"] +shader = ExtResource("3_tf0vp") +shader_parameter/rect_size = Vector2(270, 108) +shader_parameter/corner_radius = Vector4(20, 20, 20, 20) +shader_parameter/border_width = 3.0 +shader_parameter/border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ypw31"] +shader = ExtResource("3_tf0vp") +shader_parameter/rect_size = Vector2(270, 108) +shader_parameter/corner_radius = Vector4(20, 20, 20, 20) +shader_parameter/border_width = 3.0 +shader_parameter/border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_n0nj0"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_8vv3u"] +shader = ExtResource("6_jwc2v") +shader_parameter/blur_amount = 0.0 +shader_parameter/blur_radius_px = 14.0 +shader_parameter/rect_size = Vector2(100, 108) +shader_parameter/corner_radius = Vector4(35, 35, 12, 12) +shader_parameter/border_width = 3.0 +shader_parameter/border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_d13xu"] +shader = ExtResource("6_jwc2v") +shader_parameter/blur_amount = 0.0 +shader_parameter/blur_radius_px = 14.0 +shader_parameter/rect_size = Vector2(100, 108) +shader_parameter/corner_radius = Vector4(35, 35, 12, 12) +shader_parameter/border_width = 3.0 +shader_parameter/border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_n0nj0"] +shader = ExtResource("6_jwc2v") +shader_parameter/blur_amount = 0.0 +shader_parameter/blur_radius_px = 14.0 +shader_parameter/rect_size = Vector2(100, 108) +shader_parameter/corner_radius = Vector4(35, 35, 12, 12) +shader_parameter/border_width = 3.0 +shader_parameter/border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) + +[node name="BattlePassSlider" type="Panel" unique_id=1064439374] +custom_minimum_size = Vector2(367, 112) +theme_override_styles/panel = SubResource("StyleBoxEmpty_8vv3u") +script = ExtResource("1_4dl3x") + +[node name="Content" type="Panel" parent="." unique_id=639821944] +custom_minimum_size = Vector2(0, 112) +layout_mode = 0 +offset_right = 270.0 +offset_bottom = 108.0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_qnxxy") + +[node name="ScrollContainer" type="ScrollContainer" parent="Content" unique_id=1495632648] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_d13xu") +horizontal_scroll_mode = 3 +vertical_scroll_mode = 3 +script = ExtResource("2_t440c") + +[node name="CardMargin" type="MarginContainer" parent="Content/ScrollContainer" unique_id=1204390870] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="Content/ScrollContainer/CardMargin" unique_id=1504751594] +custom_minimum_size = Vector2(0, 112) +layout_mode = 2 + +[node name="CardBase1" type="TextureRect" parent="Content/ScrollContainer/CardMargin/HBoxContainer" unique_id=876602906] +material = SubResource("ShaderMaterial_tf0vp") +custom_minimum_size = Vector2(270, 108) +layout_mode = 2 +texture = ExtResource("4_1jvp2") +expand_mode = 1 +stretch_mode = 6 + +[node name="CardBase2" type="TextureRect" parent="Content/ScrollContainer/CardMargin/HBoxContainer" unique_id=1729572925] +material = SubResource("ShaderMaterial_1jvp2") +custom_minimum_size = Vector2(270, 108) +layout_mode = 2 +texture = ExtResource("4_1jvp2") +expand_mode = 1 +stretch_mode = 6 + +[node name="CardBase3" type="TextureRect" parent="Content/ScrollContainer/CardMargin/HBoxContainer" unique_id=1734371616] +material = SubResource("ShaderMaterial_ypw31") +custom_minimum_size = Vector2(270, 108) +layout_mode = 2 +texture = ExtResource("4_1jvp2") +expand_mode = 1 +stretch_mode = 6 + +[node name="PageIndicator" type="HBoxContainer" parent="Content" unique_id=874321806] +layout_mode = 0 +offset_left = 13.0 +offset_top = 90.0 +offset_right = 259.0 +offset_bottom = 99.0 +theme_override_constants/separation = 3 + +[node name="Dot1" type="TextureRect" parent="Content/PageIndicator" unique_id=392540618] +custom_minimum_size = Vector2(80, 6) +layout_mode = 2 +texture = ExtResource("5_tf0vp") +expand_mode = 1 + +[node name="Dot2" type="TextureRect" parent="Content/PageIndicator" unique_id=437177486] +custom_minimum_size = Vector2(80, 6) +layout_mode = 2 +texture = ExtResource("4_ypw31") +expand_mode = 1 + +[node name="Dot3" type="TextureRect" parent="Content/PageIndicator" unique_id=314560320] +custom_minimum_size = Vector2(80, 6) +layout_mode = 2 +texture = ExtResource("4_ypw31") +expand_mode = 1 + +[node name="Ticket" type="Panel" parent="." unique_id=1195576560] +clip_contents = true +custom_minimum_size = Vector2(0, 112) +layout_mode = 0 +offset_left = 267.0 +offset_right = 367.0 +offset_bottom = 108.0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_n0nj0") +script = ExtResource("3_1jvp2") + +[node name="Ticket1" type="TextureRect" parent="Ticket" unique_id=1639108074] +material = SubResource("ShaderMaterial_8vv3u") +layout_mode = 0 +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource("9_qnxxy") +expand_mode = 1 +stretch_mode = 5 + +[node name="Ticket2" type="TextureRect" parent="Ticket" unique_id=111676944] +visible = false +material = SubResource("ShaderMaterial_d13xu") +layout_mode = 0 +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource("9_qnxxy") +expand_mode = 1 +stretch_mode = 5 + +[node name="Ticket3" type="TextureRect" parent="Ticket" unique_id=1822173598] +visible = false +material = SubResource("ShaderMaterial_n0nj0") +layout_mode = 0 +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource("9_qnxxy") +expand_mode = 1 +stretch_mode = 5 diff --git a/scenes/lobby.gd b/scenes/lobby.gd index 5ec7f1d..300e9fc 100644 --- a/scenes/lobby.gd +++ b/scenes/lobby.gd @@ -12,6 +12,8 @@ extends Control @onready var avatar_display = %AvatarDisplay @onready var lobby_settings_btn = %SettingsBtn @onready var quit_btn = %QuitBtn +@onready var chat_toggle_btn = get_node_or_null("%BubbleBtn") +@onready var chat_panel_container = $MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel # Main Menu 3D Preview @onready var character_root = %CharacterRoot @@ -158,6 +160,29 @@ var _friend_suggest_list: ItemList # var server_option: OptionButton # var server_ip_input: LineEdit +# ============================================================================= +# Menu Button Animation (ROOM / PLAY hover + press juice) +# ============================================================================= +@export_group("Menu Button Animation") +@export var menu_btn_hover_scale: float = 1.06 +@export var menu_btn_press_scale: float = 0.94 +@export var menu_btn_hover_duration: float = 0.15 +@export var menu_btn_press_duration: float = 0.08 +@export var menu_btn_release_duration: float = 0.2 +@export var menu_btn_hover_trans: Tween.TransitionType = Tween.TRANS_BACK +@export var menu_btn_hover_ease: Tween.EaseType = Tween.EASE_OUT +@export var menu_btn_hover_brighten: float = 1.08 + +@export_group("Card Fan Idle Animation") +@export var card_fan_idle_enabled: bool = true +@export var card_fan_jump_height: float = 14.0 +@export var card_fan_jump_duration: float = 0.35 +@export var card_fan_jump_stagger: float = 0.15 +@export var card_fan_cycle_pause: float = 14.0 + +var _button_tweens: Dictionary = {} +var _card_fan_tweens: Dictionary = {} + func _ready(): chat = LobbyChat.new(self) @@ -182,7 +207,10 @@ func _ready(): # Initial UI update _sync_room_profile_card() - + + # ROOM / PLAY button hover, press, and card-fan idle animation + _setup_menu_button_animations() + # Connect Social / Friend UI var global_chat_tab_btn = get_node_or_null("%GlobalChatTabBtn") if global_chat_tab_btn: @@ -401,6 +429,119 @@ func _connect_slot_signals(slot: Control, i: int): if right_btn: right_btn.pressed.connect(func(): LobbyManager.cycle_character(1)) +# ============================================================================= +# Menu Button Animation (ROOM / PLAY) +# ============================================================================= + +func _setup_menu_button_animations() -> void: + for btn in [browse_rooms_btn, create_room_btn]: + if not btn: + continue + btn.pivot_offset = btn.size / 2.0 + btn.mouse_entered.connect(_on_menu_btn_mouse_entered.bind(btn)) + btn.mouse_exited.connect(_on_menu_btn_mouse_exited.bind(btn)) + btn.button_down.connect(_on_menu_btn_down.bind(btn)) + btn.button_up.connect(_on_menu_btn_up.bind(btn)) + + _start_card_fan_idle(get_node_or_null("MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/RoomBtnRoot")) + _start_card_fan_idle(get_node_or_null("MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/PlayBtnRoot")) + + if chat_toggle_btn: + chat_toggle_btn.pressed.connect(_on_chat_toggle_pressed) + + +func _on_chat_toggle_pressed() -> void: + if chat_panel_container: + chat_panel_container.visible = not chat_panel_container.visible + + +func _kill_button_tween(btn: Control) -> void: + if _button_tweens.has(btn) and is_instance_valid(_button_tweens[btn]): + _button_tweens[btn].kill() + + +func _tween_button_scale(btn: Control, target_scale: float, duration: float, use_overshoot: bool = false) -> void: + _kill_button_tween(btn) + var tween := create_tween() + if use_overshoot: + tween.set_trans(menu_btn_hover_trans).set_ease(menu_btn_hover_ease) + else: + tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + tween.tween_property(btn, "scale", Vector2(target_scale, target_scale), duration) + _button_tweens[btn] = tween + + +func _on_menu_btn_mouse_entered(btn: Control) -> void: + if btn.disabled: + return + _tween_button_scale(btn, menu_btn_hover_scale, menu_btn_hover_duration, true) + btn.self_modulate = Color(menu_btn_hover_brighten, menu_btn_hover_brighten, menu_btn_hover_brighten, 1.0) + + +func _on_menu_btn_mouse_exited(btn: Control) -> void: + _tween_button_scale(btn, 1.0, menu_btn_release_duration) + btn.self_modulate = Color.WHITE + + +func _on_menu_btn_down(btn: Control) -> void: + _tween_button_scale(btn, menu_btn_press_scale, menu_btn_press_duration) + + +func _on_menu_btn_up(btn: Control) -> void: + var target := menu_btn_hover_scale if btn.get_global_rect().has_point(get_global_mouse_position()) else 1.0 + _tween_button_scale(btn, target, menu_btn_release_duration, true) + + +func _start_card_fan_idle(root: Control) -> void: + if not root or not card_fan_idle_enabled: + return + + # find_child (recursive) instead of a direct get_node_or_null so this still + # finds the cards even if they end up nested under a layout wrapper (e.g. a + # PanelContainer) instead of being direct children of root. + var cards: Array[Control] = [] + for card_name in ["CardLeft", "CardRight"]: + var card := root.find_child(card_name, true, false) as Control + if card: + cards.append(card) + if cards.is_empty(): + return + + if _card_fan_tweens.has(root): + for old_tween in _card_fan_tweens[root]: + if is_instance_valid(old_tween): + old_tween.kill() + + # Sequential "leapfrog" jump: each card jumps in turn, staggered by + # card_fan_jump_stagger, then the whole row pauses before looping. + var cycle_total: float = cards.size() * card_fan_jump_stagger + card_fan_cycle_pause + var tweens: Array[Tween] = [] + for i in cards.size(): + var card := cards[i] + var start_y := card.position.y + var lead_in: float = i * card_fan_jump_stagger + var trailing: float = cycle_total - lead_in - card_fan_jump_duration + var tween := create_tween().set_loops() + if lead_in > 0.0: + tween.tween_interval(lead_in) + tween.tween_property(card, "position:y", start_y - card_fan_jump_height, card_fan_jump_duration * 0.5).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT) + tween.tween_property(card, "position:y", start_y, card_fan_jump_duration * 0.5).set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT) + if trailing > 0.0: + tween.tween_interval(trailing) + tweens.append(tween) + _card_fan_tweens[root] = tweens + + +func _exit_tree() -> void: + for tween in _button_tweens.values(): + if is_instance_valid(tween): + tween.kill() + for tweens in _card_fan_tweens.values(): + for tween in tweens: + if is_instance_valid(tween): + tween.kill() + + # ============================================================================= # Panel Management # ============================================================================= diff --git a/scenes/lobby.tscn b/scenes/lobby.tscn index 8a637b6..ad49ff3 100644 --- a/scenes/lobby.tscn +++ b/scenes/lobby.tscn @@ -12,45 +12,64 @@ [ext_resource type="AnimationLibrary" path="res://assets/characters/animations/animation-pack.res" id="5_animlib"] [ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="5_pc087"] [ext_resource type="Texture2D" uid="uid://brhn1dhp1gm13" path="res://assets/graphics/character_selection/sc_characters/sc_copper.png" id="10_dyhay"] -[ext_resource type="Texture2D" uid="uid://c8xwpkvvwa7a4" path="res://assets/graphics/gui/mainmenu/chat.png" id="12_dfnwm"] +[ext_resource type="Texture2D" uid="uid://dwb753gnca5wv" path="res://assets/graphics/gui/lobby/crown_profile.tres" id="10_jkgfa"] [ext_resource type="Texture2D" uid="uid://b5pp08fke7ptd" path="res://assets/graphics/gui/lobby/gold.png" id="12_gufxi"] [ext_resource type="Texture2D" uid="uid://c05mo12h5umgi" path="res://assets/graphics/gui/mainmenu/chat_emoji.png" id="13_0jb4q"] -[ext_resource type="Texture2D" uid="uid://d0ouvm3x8h42c" path="res://assets/graphics/gui/lobby/star.png" id="13_arjad"] +[ext_resource type="Texture2D" uid="uid://b2lyv0usa762v" path="res://assets/graphics/gui/lobby/edit_profile.tres" id="13_ph747"] +[ext_resource type="Texture2D" uid="uid://bt70g810ef6jj" path="res://assets/graphics/gui/lobby/curr_star.svg" id="13_twy5w"] [ext_resource type="Theme" uid="uid://cxab3xxy00" path="res://assets/themes/GUI_Tekton.tres" id="14_2630d"] [ext_resource type="FontFile" uid="uid://c2tryhyhlyb1u" path="res://assets/fonts/Supercell-Magic Regular.ttf" id="14_vwf6o"] [ext_resource type="Texture2D" uid="uid://kflvrkha1jwy" path="res://assets/graphics/gui/mainmenu/chat_enter.png" id="15_iwi7x"] +[ext_resource type="Texture2D" uid="uid://duxo4w34d3ree" path="res://assets/graphics/gui/lobby/curr_star.tres" id="16_ixomp"] +[ext_resource type="Texture2D" uid="uid://dq3crtqml0k35" path="res://assets/graphics/gui/lobby/curr_gold.tres" id="17_8kv63"] [ext_resource type="Texture2D" uid="uid://dq8ll26kexu3b" path="res://assets/graphics/gui/mainmenu/button_room.png" id="17_wjff0"] [ext_resource type="Texture2D" uid="uid://bcgu0jku4ntcw" path="res://assets/graphics/gui/mainmenu/button_room_interact.png" id="18_0jb4q"] +[ext_resource type="PackedScene" uid="uid://bnnq5eunh8o6j" path="res://scenes/battlepass_slider.tscn" id="18_5jb2g"] [ext_resource type="Texture2D" uid="uid://dllwxub5n4361" path="res://assets/graphics/gui/mainmenu/button_play.png" id="18_h1rib"] +[ext_resource type="Texture2D" uid="uid://d04v2xn8xmom" path="res://assets/graphics/gui/lobby/event_calendar.svg" id="18_olier"] [ext_resource type="Texture2D" uid="uid://l03huy5c0vvy" path="res://assets/graphics/gui/lobby/profile.png" id="18_u7tfn"] -[ext_resource type="Texture2D" uid="uid://jted80o4uarv" path="res://assets/graphics/gui/lobby/leaderboards.png" id="19_2630d"] -[ext_resource type="Texture2D" uid="uid://bvugtpcgc2qkx" path="res://assets/graphics/gui/lobby/shop.png" id="20_835bk"] +[ext_resource type="Texture2D" uid="uid://b45naqdq1rfbf" path="res://assets/graphics/gui/lobby/bag.svg" id="19_5jb2g"] +[ext_resource type="Texture2D" uid="uid://dj1dt2noi1bl3" path="res://assets/graphics/gui/lobby/chat.svg" id="19_oysm8"] +[ext_resource type="Texture2D" uid="uid://b8bxf0eim4g4p" path="res://assets/graphics/gui/lobby/emoji.svg" id="20_4pkyx"] +[ext_resource type="Texture2D" uid="uid://bblx8fmv77m7h" path="res://assets/graphics/gui/lobby/chev.svg" id="20_rievh"] [ext_resource type="Texture2D" uid="uid://cdupokfxuufpl" path="res://assets/graphics/gui/mainmenu/button_play_interact.png" id="20_vwf6o"] [ext_resource type="Texture2D" uid="uid://6agwwbc1l4g3" path="res://assets/graphics/gui/play/selection_play0.png" id="21_h1rib"] -[ext_resource type="Texture2D" uid="uid://bmmajc7h7o4dg" path="res://assets/graphics/gui/lobby/dailylogin.png" id="21_ucbax"] -[ext_resource type="Texture2D" uid="uid://dv782w5t0xlcc" path="res://assets/graphics/gui/lobby/friends.png" id="22_1x1aw"] [ext_resource type="Texture2D" uid="uid://cpy5lppf3ro02" path="res://assets/graphics/gui/play/selection_play1.png" id="22_kn4i6"] [ext_resource type="Texture2D" uid="uid://b0ovmvcm8rt2n" path="res://assets/graphics/gui/play/selection_room0.png" id="23_3jc85"] -[ext_resource type="Texture2D" uid="uid://cs5lke40qve7y" path="res://assets/graphics/gui/mailbox/mailbox_icon.png" id="23_835bk"] -[ext_resource type="Texture2D" uid="uid://bqcxrfu2jlplr" path="res://assets/graphics/gui/lobby/settings.png" id="23_twy5w"] +[ext_resource type="Shader" uid="uid://bx46eyi72i6ak" path="res://setting_bar_shader.gdshader" id="23_8kv63"] [ext_resource type="Texture2D" uid="uid://3p0sabd1og31" path="res://assets/graphics/gui/play/selection_room1.png" id="24_jhtcy"] +[ext_resource type="Texture2D" uid="uid://b7dp73xokujdb" path="res://assets/graphics/gui/lobby/question_circle.svg" id="24_ph747"] [ext_resource type="Texture2D" uid="uid://bpco6lch7homj" path="res://assets/graphics/gui/play/bg.png" id="25_iwv4c"] +[ext_resource type="Texture2D" uid="uid://ci3nm26qx5vdo" path="res://assets/graphics/gui/lobby/shop_bar.svg" id="25_ixomp"] +[ext_resource type="Texture2D" uid="uid://dqwm7rou1fttt" path="res://assets/graphics/gui/lobby/badge_bar.svg" id="26_8kv63"] [ext_resource type="Texture2D" uid="uid://chkt6c6tt7gdb" path="res://assets/graphics/gui/play/story.png" id="26_wpcbs"] [ext_resource type="Texture2D" uid="uid://6oeuovfdxahu" path="res://assets/graphics/gui/play/story_dimmed.png" id="27_8tmsf"] [ext_resource type="Texture2D" uid="uid://3kcp8qjd1vfm" path="res://assets/graphics/gui/play/stopngo.png" id="27_ierb3"] +[ext_resource type="Texture2D" uid="uid://btjm25hjxssbd" path="res://assets/graphics/gui/lobby/rank_bar.svg" id="27_y8bta"] [ext_resource type="Texture2D" uid="uid://4nejhkohp70d" path="res://assets/graphics/gui/play/freemode.png" id="28_78rk6"] +[ext_resource type="Texture2D" uid="uid://bg7mca4i1fgup" path="res://assets/graphics/gui/lobby/community_bar.svg" id="28_st18m"] [ext_resource type="Texture2D" uid="uid://b8dgaw0bk3x6f" path="res://assets/graphics/gui/play/Rank.png" id="29_6mek4"] +[ext_resource type="Texture2D" uid="uid://kmleuwyxmn0c" path="res://assets/graphics/gui/lobby/message_bar.svg" id="29_6yc8v"] [ext_resource type="Texture2D" uid="uid://23tvis1trvfr" path="res://assets/graphics/gui/play/x.png" id="29_417c5"] [ext_resource type="Texture2D" uid="uid://3tsnxh8xbxr5" path="res://assets/graphics/gui/play/stopngo_dimmed.png" id="29_gxh4y"] [ext_resource type="Texture2D" uid="uid://blh0vhxpbiqip" path="res://assets/graphics/gui/play/stopngo_vertical.png" id="30_8ht5e"] +[ext_resource type="Texture2D" uid="uid://lks5ndwn3ppp" path="res://assets/graphics/gui/lobby/setting_bar.svg" id="30_yb58j"] [ext_resource type="Texture2D" uid="uid://1lilep4qo3tc" path="res://assets/graphics/gui/play/freemode-dimmed.png" id="31_30fw8"] [ext_resource type="Texture2D" uid="uid://6lopq2j3kmai" path="res://assets/graphics/gui/play/freemode_vertical.png" id="31_tuh25"] +[ext_resource type="PackedScene" uid="uid://c3v78hufajngu" path="res://scenes/lobby_sliders.tscn" id="32_8kv63"] [ext_resource type="Texture2D" uid="uid://dxngyrdx5riab" path="res://assets/graphics/gui/play/room_list.png" id="32_8tmsf"] [ext_resource type="Texture2D" uid="uid://dimb6edbhvbrm" path="res://assets/graphics/gui/play/refresh.png" id="33_gxh4y"] +[ext_resource type="Texture2D" uid="uid://cep023y0s7f0f" path="res://assets/graphics/gui/lobby/green_tile.png" id="33_yb58j"] [ext_resource type="Texture2D" uid="uid://cniyw4aa1kc4n" path="res://assets/graphics/gui/play/stopngo_vertical_dimmed.png" id="34_7rn74"] [ext_resource type="Texture2D" uid="uid://bupl61vxuub71" path="res://assets/graphics/gui/play/join.png" id="34_30fw8"] +[ext_resource type="Texture2D" uid="uid://dc0o5lcx1cq64" path="res://assets/graphics/gui/lobby/yellow_tile.png" id="34_oysm8"] [ext_resource type="Texture2D" uid="uid://bbuxwuypygk38" path="res://assets/graphics/gui/play/freemode_vertical_dimmed.png" id="36_30el1"] +[ext_resource type="Texture2D" uid="uid://bjqxr7nt5n1i0" path="res://assets/graphics/gui/lobby/blue_tile.png" id="37_4pkyx"] +[ext_resource type="FontFile" uid="uid://dsqg0x5lnosou" path="res://assets/fonts/TektonDash2.ttf" id="38_87ggl"] +[ext_resource type="Texture2D" uid="uid://cic88doubsblr" path="res://assets/graphics/gui/lobby/red_tile.png" id="38_rievh"] +[ext_resource type="Texture2D" uid="uid://c2empktddd47l" path="res://assets/graphics/gui/lobby/info.svg" id="39_agxrn"] [ext_resource type="Texture2D" uid="uid://bwu5ms5nsyy43" path="res://assets/graphics/gui/play/referesh_dimmed.png" id="39_s3vw1"] +[ext_resource type="Script" uid="uid://cas5sc40ampq1" path="res://scenes/ui/quest_list_tab.gd" id="40_agxrn"] [ext_resource type="Texture2D" uid="uid://cb454spy2usoa" path="res://assets/graphics/gui/play/x_dimmed.png" id="41_7rn74"] [ext_resource type="Texture2D" uid="uid://d4mt1q2fxkjy" path="res://assets/graphics/gui/play/join_dimmed.png" id="41_iwv5h"] @@ -63,8 +82,13 @@ ambient_light_energy = 0.5 [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_busoe"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_jkgfa"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ph747"] +bg_color = Color(0.6, 0.6, 0.6, 0) + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8mpuv"] -bg_color = Color(0.2784314, 0.8745098, 1, 1) +bg_color = Color(0.2784314, 0.8745098, 1, 0) border_width_left = 3 border_width_top = 3 border_width_right = 3 @@ -75,37 +99,216 @@ corner_radius_top_right = 15 corner_radius_bottom_right = 15 corner_radius_bottom_left = 15 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_835bk"] +bg_color = Color(0.078431375, 0.6666667, 0.7921569, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ucbax"] +content_margin_top = 20.0 +content_margin_right = 20.0 +content_margin_bottom = 20.0 +bg_color = Color(0.54509807, 0.54509807, 0.54509807, 0) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 15 +corner_radius_top_right = 15 +corner_radius_bottom_right = 15 +corner_radius_bottom_left = 15 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1x1aw"] +bg_color = Color(0.11764706, 0.11764706, 0.11764706, 0.42745098) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ph747"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ixomp"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8kv63"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_twy5w"] +bg_color = Color(1, 1, 1, 1) +border_width_top = 2 +border_width_bottom = 2 +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_y8bta"] + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gd4oi"] bg_color = Color(0, 0, 0, 0.48235294) border_color = Color(0.92941177, 0.91764706, 0.8862745, 1) -corner_radius_top_left = 3 -corner_radius_top_right = 3 -corner_radius_bottom_right = 3 -corner_radius_bottom_left = 3 +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kn4i6"] -bg_color = Color(0, 0, 0, 0.48235294) -border_width_left = 5 -border_width_top = 5 -border_width_right = 5 -border_width_bottom = 5 -border_color = Color(1, 1, 1, 1) -corner_radius_top_left = 10 -corner_radius_top_right = 10 -corner_radius_bottom_right = 10 -corner_radius_bottom_left = 10 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_st18m"] +bg_color = Color(0.11764706, 0.11764706, 0.11764706, 0.5568628) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3jc85"] -bg_color = Color(0, 0, 0, 0.48235294) -border_width_left = 5 -border_width_top = 5 -border_width_right = 5 -border_width_bottom = 5 -border_color = Color(1, 1, 1, 1) -corner_radius_top_left = 10 -corner_radius_top_right = 10 -corner_radius_bottom_right = 10 -corner_radius_bottom_left = 10 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6yc8v"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_yb58j"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_yf42k"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_v63ud"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fwqx0"] +bg_color = Color(0, 0, 0, 0.54901963) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mb33m"] +bg_color = Color(0, 0, 0, 0.54901963) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_agxrn"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4pkyx"] +bg_color = Color(0, 0, 0, 0.4) +corner_radius_top_left = 27 +corner_radius_top_right = 27 +corner_radius_bottom_right = 27 +corner_radius_bottom_left = 27 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_4pkyx"] +shader = ExtResource("23_8kv63") +shader_parameter/panel_size = Vector2(520, 34) +shader_parameter/corner_radius = 27.0 + +[sub_resource type="Gradient" id="Gradient_rievh"] +colors = PackedColorArray(0, 0, 0, 0.2, 0, 0, 0, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_olier"] +gradient = SubResource("Gradient_rievh") +width = 8 +fill_to = Vector2(0, 1) + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_vfec7"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yf42k"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 17 +corner_radius_top_right = 17 +corner_radius_bottom_right = 17 +corner_radius_bottom_left = 17 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_v63ud"] +bg_color = Color(1, 1, 1, 0.12) +corner_radius_top_left = 17 +corner_radius_top_right = 17 +corner_radius_bottom_right = 17 +corner_radius_bottom_left = 17 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_sy4be"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_0nf8f"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 17 +corner_radius_top_right = 17 +corner_radius_bottom_right = 17 +corner_radius_bottom_left = 17 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rox41"] +bg_color = Color(1, 1, 1, 0.12) +corner_radius_top_left = 17 +corner_radius_top_right = 17 +corner_radius_bottom_right = 17 +corner_radius_bottom_left = 17 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_f1hfh"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6ax38"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 17 +corner_radius_top_right = 17 +corner_radius_bottom_right = 17 +corner_radius_bottom_left = 17 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pril5"] +bg_color = Color(1, 1, 1, 0.12) +corner_radius_top_left = 17 +corner_radius_top_right = 17 +corner_radius_bottom_right = 17 +corner_radius_bottom_left = 17 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5jb2g"] +bg_color = Color(0, 0, 0, 0.4) +corner_radius_top_left = 26 +corner_radius_top_right = 26 +corner_radius_bottom_right = 26 +corner_radius_bottom_left = 26 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_rievh"] +shader = ExtResource("23_8kv63") +shader_parameter/panel_size = Vector2(520, 149) +shader_parameter/corner_radius = 26.0 + +[sub_resource type="Gradient" id="Gradient_s0n6j"] +colors = PackedColorArray(0, 0, 0, 0.2, 0, 0, 0, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_87ggl"] +gradient = SubResource("Gradient_s0n6j") +width = 8 +fill_to = Vector2(0, 1) + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_l7nca"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_s0n6j"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_87ggl"] +bg_color = Color(0.85, 0.9, 0.95, 1) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_agxrn"] +bg_color = Color(0.95, 0.97, 1, 1) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rievh"] +bg_color = Color(0, 0, 0, 0.3764706) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_olier"] +bg_color = Color(0, 0, 0, 0.3764706) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jhtcy"] bg_color = Color(0.6, 0.6, 0.6, 0) @@ -114,12 +317,151 @@ bg_color = Color(0.6, 0.6, 0.6, 0) [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_dfnwm"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_87ggl"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l7nca"] +bg_color = Color(0, 0, 0, 0.4) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vfec7"] +bg_color = Color(0, 0, 0, 0.4) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sy4be"] +bg_color = Color(0, 0, 0, 0.6) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_f1hfh"] +bg_color = Color(0, 0, 0, 0.5) +corner_radius_top_left = 20 +corner_radius_top_right = 20 +corner_radius_bottom_right = 20 +corner_radius_bottom_left = 20 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0nf8f"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rox41"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6ax38"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jkoci"] +bg_color = Color(0, 0, 0, 0.15) +corner_radius_top_left = 18 +corner_radius_top_right = 18 +corner_radius_bottom_right = 18 +corner_radius_bottom_left = 18 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3y5sy"] +bg_color = Color(1, 1, 1, 0.15) +corner_radius_top_left = 18 +corner_radius_top_right = 18 +corner_radius_bottom_right = 18 +corner_radius_bottom_left = 18 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_oysm8"] +bg_color = Color(0.6, 0.6, 0.6, 0) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 16 +corner_radius_bottom_left = 8 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_ixomp"] +shader = ExtResource("23_8kv63") +shader_parameter/panel_size = Vector2(550, 64) +shader_parameter/corner_radius = 16.0 + +[sub_resource type="Gradient" id="Gradient_4pkyx"] +colors = PackedColorArray(0.16862746, 0, 0.6, 0, 0.16862746, 0, 0.6, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_rievh"] +gradient = SubResource("Gradient_4pkyx") + [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_835bk"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ucbax"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1x1aw"] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_pril5"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wqxeh"] +bg_color = Color(1, 1, 1, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 2 +corner_radius_top_right = 2 +corner_radius_bottom_right = 2 +corner_radius_bottom_left = 2 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_do6di"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_do6di"] +bg_color = Color(0, 0, 0, 0.4509804) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_jkoci"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_os6ns"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 6 +corner_radius_top_right = 6 +corner_radius_bottom_right = 6 +corner_radius_bottom_left = 6 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_b6wif"] +bg_color = Color(1, 1, 1, 0.12156863) +corner_radius_top_left = 13 +corner_radius_top_right = 13 +corner_radius_bottom_right = 13 +corner_radius_bottom_left = 13 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_uovpt"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3y5sy"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_fwqx0"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8onxx"] +bg_color = Color(1, 1, 1, 1) +corner_radius_top_left = 13 +corner_radius_top_right = 13 +corner_radius_bottom_right = 13 +corner_radius_bottom_left = 13 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_15eno"] +bg_color = Color(1, 1, 1, 0.12156863) +corner_radius_top_left = 13 +corner_radius_top_right = 13 +corner_radius_bottom_right = 13 +corner_radius_bottom_left = 13 + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4pkyx"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rievh"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_olier"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_oysm8"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5jb2g"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_s0n6j"] + [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_50md7"] texture = ExtResource("25_iwv4c") @@ -194,6 +536,8 @@ grow_horizontal = 2 grow_vertical = 2 theme = ExtResource("2_theme") script = ExtResource("1_lp6xi") +metadata/_edit_horizontal_guides_ = [35.0, 733.0] +metadata/_edit_vertical_guides_ = [35.0, 1331.0] [node name="Background3" type="ColorRect" parent="." unique_id=245238082] visible = false @@ -303,48 +647,78 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -theme_override_constants/margin_left = 30 -theme_override_constants/margin_top = 30 -theme_override_constants/margin_right = 30 -theme_override_constants/margin_bottom = 30 +theme_override_constants/margin_left = 35 +theme_override_constants/margin_top = 35 +theme_override_constants/margin_right = 35 +theme_override_constants/margin_bottom = 35 [node name="MainHBox" type="HBoxContainer" parent="MainMenuPanel/MainMargin" unique_id=892534882] layout_mode = 2 theme_override_constants/separation = 16 [node name="LeftCol" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox" unique_id=53823485] -custom_minimum_size = Vector2(350, 0) +custom_minimum_size = Vector2(207, 0) layout_mode = 2 -theme_override_constants/separation = 8 [node name="HBoxContainer2" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=473798164] layout_mode = 2 [node name="ProfileCard" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2" unique_id=5938459] -clip_contents = true -custom_minimum_size = Vector2(0, 130) layout_mode = 2 size_flags_horizontal = 3 theme_override_styles/panel = SubResource("StyleBoxEmpty_busoe") [node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard" unique_id=1195708144] layout_mode = 2 -theme_override_constants/margin_left = 20 -theme_override_constants/margin_right = 20 +size_flags_vertical = 4 [node name="HBox" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer" unique_id=58934509] +custom_minimum_size = Vector2(448, 100) layout_mode = 2 -theme_override_constants/separation = 12 +size_flags_vertical = 4 +theme_override_constants/separation = 8 -[node name="MainProfileBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox" unique_id=89234859] -unique_name_in_owner = true +[node name="Panel2" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox" unique_id=384190896] custom_minimum_size = Vector2(100, 100) layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_jkgfa") + +[node name="Crown" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel2" unique_id=1182974540] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_top = -28.0 +offset_bottom = 6.0 +grow_horizontal = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_ph747") + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel2/Crown" unique_id=244556470] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -20.5 +offset_right = 20.5 +offset_bottom = 31.0 +grow_horizontal = 2 +texture = ExtResource("10_jkgfa") +expand_mode = 1 + +[node name="MainProfileBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel2" unique_id=89234859] +unique_name_in_owner = true +custom_minimum_size = Vector2(100, 100) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 size_flags_vertical = 4 flat = true expand_icon = true -[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/MainProfileBtn" unique_id=2112174468] +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel2/MainProfileBtn" unique_id=2112174468] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -353,7 +727,19 @@ grow_horizontal = 2 grow_vertical = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_8mpuv") -[node name="AvatarDisplay" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/MainProfileBtn" unique_id=593485890] +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel2/MainProfileBtn/Panel" unique_id=981680637] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(0.87, 0.87) +pivot_offset = Vector2(50, 50) +theme_override_styles/panel = SubResource("StyleBoxFlat_835bk") +metadata/_edit_use_anchors_ = true + +[node name="AvatarDisplay" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel2/MainProfileBtn/Panel" unique_id=593485890] unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 @@ -361,16 +747,55 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +scale = Vector2(0.88, 0.88) +pivot_offset = Vector2(50, 50) texture = ExtResource("10_dyhay") expand_mode = 1 stretch_mode = 5 -[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox" unique_id=598345789] +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox" unique_id=95033853] layout_mode = 2 size_flags_horizontal = 3 -alignment = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_ucbax") -[node name="Username" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer" unique_id=50934858] +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel" unique_id=887191722] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 6.0 +offset_top = 6.0 +offset_right = -6.0 +offset_bottom = -6.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(50, 50) +pivot_offset_ratio = Vector2(50, 50) +theme_override_styles/panel = SubResource("StyleBoxFlat_1x1aw") +metadata/_edit_use_anchors_ = true + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel" unique_id=814833769] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +rotation = -0.00042401726 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 + +[node name="ProfileCard" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer" unique_id=1124531167] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer2" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard" unique_id=2125411101] +layout_mode = 2 + +[node name="Username" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer2" unique_id=50934858] unique_name_in_owner = true layout_mode = 2 theme = ExtResource("2_theme") @@ -378,230 +803,662 @@ theme_override_fonts/font = ExtResource("5_pc087") theme_override_font_sizes/font_size = 24 text = "USERNAME" -[node name="Subtitle" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer" unique_id=5948395] +[node name="VSeparator" type="VSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer2" unique_id=1291684476] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 0 +theme_override_styles/separator = SubResource("StyleBoxEmpty_ph747") + +[node name="Panel" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer2" unique_id=1669254581] +custom_minimum_size = Vector2(18, 18) +layout_mode = 2 +size_flags_vertical = 4 +theme_override_styles/normal = SubResource("StyleBoxEmpty_ixomp") + +[node name="TextureButton" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer2/Panel" unique_id=1316337810] +custom_minimum_size = Vector2(18, 18) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +texture = ExtResource("13_ph747") +expand_mode = 1 + +[node name="HSeparator3" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard" unique_id=631156959] +layout_mode = 2 +size_flags_vertical = 0 +theme_override_constants/separation = 0 +theme_override_styles/separator = SubResource("StyleBoxEmpty_8kv63") + +[node name="HSeparator" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard" unique_id=1789932398] +clip_contents = true +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/separation = 4 +theme_override_styles/separator = SubResource("StyleBoxFlat_twy5w") + +[node name="HSeparator2" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard" unique_id=817356678] +layout_mode = 2 +size_flags_vertical = 0 +theme_override_constants/separation = 0 +theme_override_styles/separator = SubResource("StyleBoxEmpty_y8bta") + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard" unique_id=331071595] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="Panel2" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer" unique_id=1514999060] +visible = false +custom_minimum_size = Vector2(40, 20) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_gd4oi") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel2" unique_id=2040127486] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel2/MarginContainer" unique_id=108285540] +layout_mode = 2 +size_flags_vertical = 4 + +[node name="Panel" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=1271756238] +custom_minimum_size = Vector2(28, 28) +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel2/MarginContainer/HBoxContainer/Panel" unique_id=1770079891] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +texture = ExtResource("13_twy5w") +expand_mode = 1 + +[node name="Label" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=1184388330] +visible = false +layout_mode = 2 +size_flags_horizontal = 3 +text = "0000000" +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="StarLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=948509] unique_name_in_owner = true layout_mode = 2 +size_flags_horizontal = 3 +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_font_sizes/font_size = 18 +text = "0" +horizontal_alignment = 2 + +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer" unique_id=113826609] +visible = false +custom_minimum_size = Vector2(80, 20) +layout_mode = 2 +size_flags_horizontal = 8 +theme_override_styles/panel = SubResource("StyleBoxFlat_gd4oi") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel" unique_id=2062391446] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 3 +theme_override_constants/margin_top = 3 +theme_override_constants/margin_right = 6 +theme_override_constants/margin_bottom = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel/MarginContainer" unique_id=1826509078] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=1462222702] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 4 +texture = ExtResource("12_gufxi") + +[node name="Label" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=312597909] +visible = false +layout_mode = 2 +size_flags_horizontal = 3 +text = "0000000" +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="GoldLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=94850] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_font_sizes/font_size = 18 +text = "0" +horizontal_alignment = 2 + +[node name="MarginContainer2" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer" unique_id=289273153] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 13 + +[node name="curr_star" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2" unique_id=442904116] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_st18m") + +[node name="MarginContainer2" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2/curr_star" unique_id=812952188] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_right = 5 + +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2/curr_star/MarginContainer2" unique_id=863776061] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_6yc8v") + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2/curr_star/MarginContainer2/Panel" unique_id=476579988] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="icon" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2/curr_star/MarginContainer2/Panel/HBoxContainer" unique_id=1857907027] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2/curr_star/MarginContainer2/Panel/HBoxContainer/icon" unique_id=1890970008] +custom_minimum_size = Vector2(28, 28) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 0.5 +offset_top = -1.1 +offset_right = 0.5 +offset_bottom = -1.1000004 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(1.1, 1.1) +size_flags_horizontal = 4 +size_flags_vertical = 4 +texture = ExtResource("16_ixomp") +expand_mode = 1 + +[node name="StarLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2/curr_star/MarginContainer2/Panel/HBoxContainer" unique_id=1885199303] +layout_mode = 2 +size_flags_horizontal = 10 +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_font_sizes/font_size = 18 +text = "0" +horizontal_alignment = 2 + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer2/curr_star/MarginContainer2/Panel" unique_id=1722932535] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = -0.5 +offset_right = 25.0 +offset_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 3 +theme_override_constants/margin_top = 3 +theme_override_constants/margin_right = 3 +theme_override_constants/margin_bottom = 3 + +[node name="VSeparator" type="VSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer" unique_id=2040409119] +layout_mode = 2 +theme_override_constants/separation = 20 +theme_override_styles/separator = SubResource("StyleBoxEmpty_yb58j") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer" unique_id=1921432898] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 13 + +[node name="curr_star" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer" unique_id=872102647] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_st18m") + +[node name="MarginContainer2" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer/curr_star" unique_id=720374599] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_right = 5 + +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer/curr_star/MarginContainer2" unique_id=1403218261] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_6yc8v") + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer/curr_star/MarginContainer2/Panel" unique_id=2059872823] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="icon" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer/curr_star/MarginContainer2/Panel/HBoxContainer" unique_id=933100210] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer/curr_star/MarginContainer2/Panel/HBoxContainer/icon" unique_id=30722077] +custom_minimum_size = Vector2(28, 28) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 0.5 +offset_top = -1.1 +offset_right = 0.5 +offset_bottom = -1.1000004 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(1.1, 1.1) +size_flags_horizontal = 4 +size_flags_vertical = 4 +texture = ExtResource("17_8kv63") +expand_mode = 1 + +[node name="StarLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer/curr_star/MarginContainer2/Panel/HBoxContainer" unique_id=227792042] +layout_mode = 2 +size_flags_horizontal = 10 +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_font_sizes/font_size = 18 +text = "0" +horizontal_alignment = 2 + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard/HBoxContainer/MarginContainer/curr_star/MarginContainer2/Panel" unique_id=1503179775] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 4.0 +offset_top = -0.5 +offset_right = 25.0 +offset_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 3 +theme_override_constants/margin_top = 3 +theme_override_constants/margin_right = 3 +theme_override_constants/margin_bottom = 3 + +[node name="Subtitle" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/Panel/Panel/MarginContainer/ProfileCard" unique_id=5948395] +unique_name_in_owner = true +visible = false +layout_mode = 2 theme_override_colors/font_color = Color(0.53, 0.53, 0.53, 1) theme_override_fonts/font = ExtResource("5_pc087") theme_override_font_sizes/font_size = 14 text = "EU SERVER" -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer" unique_id=331071595] -layout_mode = 2 -theme_override_constants/separation = 6 - -[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer" unique_id=113826609] -custom_minimum_size = Vector2(80, 30) -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_styles/panel = SubResource("StyleBoxFlat_gd4oi") - -[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel" unique_id=2062391446] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_constants/margin_left = 3 -theme_override_constants/margin_top = 3 -theme_override_constants/margin_right = 6 -theme_override_constants/margin_bottom = 3 - -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer" unique_id=1826509078] -layout_mode = 2 - -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=1462222702] -layout_mode = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 -texture = ExtResource("12_gufxi") - -[node name="Label" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=312597909] -visible = false -layout_mode = 2 -size_flags_horizontal = 3 -text = "0000000" -horizontal_alignment = 2 -vertical_alignment = 1 - -[node name="GoldLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel/MarginContainer/HBoxContainer" unique_id=94850] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_fonts/font = ExtResource("5_pc087") -theme_override_font_sizes/font_size = 18 -text = "0" -horizontal_alignment = 2 - -[node name="Panel2" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer" unique_id=1514999060] -custom_minimum_size = Vector2(80, 30) -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_styles/panel = SubResource("StyleBoxFlat_gd4oi") - -[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2" unique_id=2040127486] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_constants/margin_left = 3 -theme_override_constants/margin_top = 3 -theme_override_constants/margin_right = 6 -theme_override_constants/margin_bottom = 3 - -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer" unique_id=108285540] -layout_mode = 2 - -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=1770079891] -layout_mode = 2 -size_flags_horizontal = 0 -size_flags_vertical = 4 -texture = ExtResource("13_arjad") - -[node name="Label" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=1184388330] -visible = false -layout_mode = 2 -size_flags_horizontal = 3 -text = "0000000" -horizontal_alignment = 2 -vertical_alignment = 1 - -[node name="StarLabel" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2/ProfileCard/MarginContainer/HBox/VBoxContainer/HBoxContainer/Panel2/MarginContainer/HBoxContainer" unique_id=948509] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_fonts/font = ExtResource("5_pc087") -theme_override_font_sizes/font_size = 18 -text = "0" -horizontal_alignment = 2 - [node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer2" unique_id=177944371] +visible = false custom_minimum_size = Vector2(50, 0) layout_direction = 3 layout_mode = 2 -[node name="SpacerProfile" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=58943589] -custom_minimum_size = Vector2(0, 8) +[node name="HSeparator2" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=2047650361] layout_mode = 2 +theme_override_constants/separation = 10 +theme_override_styles/separator = SubResource("StyleBoxEmpty_yf42k") -[node name="SpacerMiddle" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=984509] +[node name="BattlePass" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=1064439374 instance=ExtResource("18_5jb2g")] layout_mode = 2 -size_flags_vertical = 3 +size_flags_horizontal = 0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_v63ud") -[node name="ChatPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=948590] -custom_minimum_size = Vector2(520, 260) +[node name="HSeparator3" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=1331729522] +layout_mode = 2 +theme_override_constants/separation = 14 +theme_override_styles/separator = SubResource("StyleBoxEmpty_yf42k") + +[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=2050468161] +custom_minimum_size = Vector2(80, 0) +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 4 + +[node name="Events" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/VBoxContainer" unique_id=1942930509] +custom_minimum_size = Vector2(67, 67) +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_fwqx0") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/VBoxContainer/Events" unique_id=73447453] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 13 +theme_override_constants/margin_top = 13 +theme_override_constants/margin_right = 13 +theme_override_constants/margin_bottom = 13 + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/VBoxContainer/Events/MarginContainer" unique_id=1725027124] +layout_mode = 2 +texture = ExtResource("18_olier") +expand_mode = 1 +stretch_mode = 5 + +[node name="HSeparator3" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/VBoxContainer" unique_id=188784548] +layout_mode = 2 +theme_override_constants/separation = 6 +theme_override_styles/separator = SubResource("StyleBoxEmpty_yf42k") + +[node name="Inventory" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/VBoxContainer" unique_id=776230915] +custom_minimum_size = Vector2(67, 67) +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 4 +theme_override_styles/panel = SubResource("StyleBoxFlat_mb33m") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/VBoxContainer/Inventory" unique_id=103420172] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 13 +theme_override_constants/margin_top = 13 +theme_override_constants/margin_right = 13 +theme_override_constants/margin_bottom = 13 + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/VBoxContainer/Inventory/MarginContainer" unique_id=1908625726] +layout_mode = 2 +texture = ExtResource("19_5jb2g") +expand_mode = 1 +stretch_mode = 5 + +[node name="HSeparator4" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=524180060] +layout_mode = 2 +theme_override_constants/separation = 14 +theme_override_styles/separator = SubResource("StyleBoxEmpty_yf42k") + +[node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=1092740754] layout_mode = 2 size_flags_vertical = 8 + +[node name="ChatPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control" unique_id=948590] +custom_minimum_size = Vector2(400, 197) +layout_mode = 0 +offset_top = 4.0 +offset_right = 400.0 +offset_bottom = 201.0 +size_flags_horizontal = 0 +size_flags_vertical = 8 theme = ExtResource("14_2630d") -theme_override_styles/panel = SubResource("StyleBoxFlat_kn4i6") +theme_override_styles/panel = SubResource("StyleBoxEmpty_agxrn") -[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel" unique_id=459039] +[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel" unique_id=459039] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="TabsBackground" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer" unique_id=1292343209] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_4pkyx") + +[node name="GradientOverlay" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground" unique_id=484114092] +material = SubResource("ShaderMaterial_4pkyx") +layout_mode = 2 +mouse_filter = 2 +texture = SubResource("GradientTexture2D_olier") +expand_mode = 1 + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground" unique_id=1189440913] layout_mode = 2 -[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer" unique_id=1189440913] -layout_mode = 2 -theme_override_constants/margin_left = 7 -theme_override_constants/margin_top = 7 -theme_override_constants/margin_right = 7 - -[node name="ChatTabsContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer" unique_id=459040] +[node name="ChatTabsContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground/MarginContainer" unique_id=459040] unique_name_in_owner = true layout_mode = 2 +theme_override_constants/separation = 4 -[node name="GlobalChatTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer" unique_id=439566196] +[node name="GlobalChatTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground/MarginContainer/ChatTabsContainer" unique_id=439566196] unique_name_in_owner = true +custom_minimum_size = Vector2(0, 34) layout_mode = 2 size_flags_horizontal = 3 -text = "Global" +theme_override_colors/font_color = Color(1, 1, 1, 0.85) +theme_override_colors/font_pressed_color = Color(0.08, 0.14, 0.24, 1) +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_font_sizes/font_size = 16 +theme_override_styles/normal = SubResource("StyleBoxEmpty_vfec7") +theme_override_styles/pressed = SubResource("StyleBoxFlat_yf42k") +theme_override_styles/hover = SubResource("StyleBoxFlat_v63ud") +toggle_mode = true +button_pressed = true +text = "WORLD" -[node name="DMTabTemplate" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer" unique_id=123456789] +[node name="ServerChatTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground/MarginContainer/ChatTabsContainer" unique_id=1431581913] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 34) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_colors/font_color = Color(1, 1, 1, 0.85) +theme_override_colors/font_pressed_color = Color(0.08, 0.14, 0.24, 1) +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_font_sizes/font_size = 16 +theme_override_styles/normal = SubResource("StyleBoxEmpty_sy4be") +theme_override_styles/pressed = SubResource("StyleBoxFlat_0nf8f") +theme_override_styles/hover = SubResource("StyleBoxFlat_rox41") +toggle_mode = true +text = "SERVER" + +[node name="DMTabTemplate" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground/MarginContainer/ChatTabsContainer" unique_id=123456789] unique_name_in_owner = true visible = false layout_mode = 2 size_flags_horizontal = 3 -[node name="DMTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer/DMTabTemplate" unique_id=123456780] +[node name="DMTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground/MarginContainer/ChatTabsContainer/DMTabTemplate" unique_id=123456780] +custom_minimum_size = Vector2(0, 34) layout_mode = 2 size_flags_horizontal = 3 +theme_override_colors/font_color = Color(1, 1, 1, 0.85) +theme_override_colors/font_pressed_color = Color(0.08, 0.14, 0.24, 1) +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("5_pc087") +theme_override_font_sizes/font_size = 16 +theme_override_styles/normal = SubResource("StyleBoxEmpty_f1hfh") +theme_override_styles/pressed = SubResource("StyleBoxFlat_6ax38") +theme_override_styles/hover = SubResource("StyleBoxFlat_pril5") +toggle_mode = true text = "FriendName" -[node name="DMTabCloseBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/MarginContainer/ChatTabsContainer/DMTabTemplate" unique_id=123456781] +[node name="DMTabCloseBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/TabsBackground/MarginContainer/ChatTabsContainer/DMTabTemplate" unique_id=123456781] layout_mode = 2 theme_override_colors/font_color = Color(0.8, 0.2, 0.2, 1) text = " X " -[node name="GlobalChat" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer" unique_id=945890] +[node name="MessagePanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer" unique_id=495737699] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_5jb2g") + +[node name="GradientOverlay" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/MessagePanel" unique_id=334451362] +material = SubResource("ShaderMaterial_rievh") +layout_mode = 2 +mouse_filter = 2 +texture = SubResource("GradientTexture2D_87ggl") +expand_mode = 1 + +[node name="GlobalChat" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/MessagePanel" unique_id=945890] unique_name_in_owner = true layout_mode = 2 size_flags_vertical = 3 -theme_override_constants/margin_left = 8 -theme_override_constants/margin_top = 6 -theme_override_constants/margin_right = 8 -theme_override_constants/margin_bottom = 8 +theme_override_constants/margin_left = 18 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 18 +theme_override_constants/margin_bottom = 16 -[node name="RichTextLabel" type="RichTextLabel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/VBoxContainer/GlobalChat" unique_id=1730680016] +[node name="RichTextLabel" type="RichTextLabel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/VBoxContainer/MessagePanel/GlobalChat" unique_id=1730680016] unique_name_in_owner = true layout_mode = 2 theme_override_colors/default_color = Color(1, 1, 1, 1) +theme_override_fonts/normal_font = ExtResource("14_vwf6o") +theme_override_fonts/bold_font = ExtResource("14_vwf6o") +theme_override_font_sizes/normal_font_size = 14 +theme_override_font_sizes/bold_font_size = 15 bbcode_enabled = true scroll_following = true -[node name="FriendSuggestPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel" unique_id=987654321] +[node name="FriendSuggestPanel" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel" unique_id=987654321] unique_name_in_owner = true visible = false layout_mode = 2 -[node name="FriendSuggestList" type="ItemList" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/ChatPanel/FriendSuggestPanel" unique_id=987654320] +[node name="FriendSuggestList" type="ItemList" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/FriendSuggestPanel" unique_id=987654320] unique_name_in_owner = true layout_mode = 2 allow_reselect = true auto_height = true -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol" unique_id=459038] -clip_contents = true +[node name="TailOverlay" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel" unique_id=1037808647] layout_mode = 2 +mouse_filter = 2 + +[node name="ChevIcon" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/ChatPanel/TailOverlay" unique_id=1489474671] +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_left = 18.0 +offset_top = 5.0 +offset_right = 40.0 +offset_bottom = 17.0 +grow_vertical = 0 +scale = Vector2(0.8, 0.8) +mouse_filter = 2 +texture = ExtResource("20_rievh") +expand_mode = 1 +stretch_mode = 5 + +[node name="HSeparator" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control" unique_id=1035778803] +layout_mode = 0 +offset_top = 205.0 +offset_right = 448.0 +offset_bottom = 217.0 +theme_override_constants/separation = 12 +theme_override_styles/separator = SubResource("StyleBoxEmpty_l7nca") + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control" unique_id=459038] +clip_contents = true +custom_minimum_size = Vector2(400, 0) +layout_mode = 0 +offset_top = 221.0 +offset_right = 400.0 +offset_bottom = 276.0 +size_flags_horizontal = 0 size_flags_vertical = 8 theme_override_constants/separation = 8 -[node name="QuitBtn2" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer" unique_id=1520754242] +[node name="BubbleBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer" unique_id=850962556] unique_name_in_owner = true -custom_minimum_size = Vector2(40, 40) +custom_minimum_size = Vector2(55, 55) layout_mode = 2 -theme = ExtResource("2_theme") -texture_normal = ExtResource("12_dfnwm") +size_flags_horizontal = 0 +size_flags_vertical = 4 +theme_override_styles/normal = SubResource("StyleBoxFlat_s0n6j") +theme_override_styles/pressed = SubResource("StyleBoxFlat_87ggl") +theme_override_styles/hover = SubResource("StyleBoxFlat_agxrn") +text = "​" -[node name="Control" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer" unique_id=59880168] -custom_minimum_size = Vector2(0, 70) +[node name="Icon" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/BubbleBtn" unique_id=1890525601] +modulate = Color(0.08, 0.16, 0.32, 1) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -13.0 +offset_top = -13.0 +offset_right = 13.0 +offset_bottom = 13.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("19_oysm8") +expand_mode = 1 +stretch_mode = 5 + +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer" unique_id=2123634957] +visible = false layout_mode = 2 size_flags_horizontal = 3 -theme_override_styles/panel = SubResource("StyleBoxFlat_3jc85") +theme_override_styles/panel = SubResource("StyleBoxFlat_rievh") -[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control" unique_id=1328089782] +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel" unique_id=1015348738] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -27.5 +offset_bottom = 27.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Button" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer" unique_id=840720163] +custom_minimum_size = Vector2(55, 55) +layout_mode = 2 +size_flags_vertical = 4 +theme_override_styles/normal = SubResource("StyleBoxFlat_olier") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer/Button" unique_id=1824281772] 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_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 -[node name="QuitBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer" unique_id=738138485] -unique_name_in_owner = true +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer/Button/MarginContainer" unique_id=523485444] layout_mode = 2 -texture_normal = ExtResource("13_0jb4q") +texture = ExtResource("20_4pkyx") +expand_mode = 1 -[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer" unique_id=628941879] +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer" unique_id=448545432] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/margin_left = 5 +size_flags_vertical = 4 +theme_override_constants/margin_left = 10 -[node name="ChatInput" type="LineEdit" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer/MarginContainer" unique_id=1346390421] -unique_name_in_owner = true +[node name="ChatInput" type="LineEdit" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer/MarginContainer" unique_id=1315081387] layout_mode = 2 size_flags_horizontal = 3 +size_flags_vertical = 4 theme_override_fonts/font = ExtResource("14_vwf6o") theme_override_font_sizes/font_size = 16 theme_override_styles/normal = SubResource("StyleBoxFlat_jhtcy") @@ -609,12 +1466,110 @@ theme_override_styles/read_only = SubResource("StyleBoxEmpty_iulku") theme_override_styles/focus = SubResource("StyleBoxEmpty_dfnwm") placeholder_text = " type to chat" -[node name="SendBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/HBoxContainer/Control/HBoxContainer" unique_id=1491048704] -unique_name_in_owner = true +[node name="Button2" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer" unique_id=1728884896] +custom_minimum_size = Vector2(64, 55) layout_mode = 2 +theme_override_styles/normal = SubResource("StyleBoxEmpty_87ggl") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer/Button2" unique_id=1324567722] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -29.0 +offset_top = -29.0 +offset_right = 29.0 +offset_bottom = 29.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/Panel/HBoxContainer/Button2/MarginContainer" unique_id=569120138] +layout_mode = 2 +texture = ExtResource("15_iwi7x") + +[node name="InputBar" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer" unique_id=59880168] +custom_minimum_size = Vector2(0, 55) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_l7nca") + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/InputBar" unique_id=1328089782] +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_override_constants/separation = 8 + +[node name="EmojiBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/InputBar/HBoxContainer" unique_id=524485525] +custom_minimum_size = Vector2(55, 55) +layout_mode = 2 +theme_override_styles/normal = SubResource("StyleBoxFlat_vfec7") +theme_override_styles/pressed = SubResource("StyleBoxFlat_sy4be") +theme_override_styles/hover = SubResource("StyleBoxFlat_f1hfh") + +[node name="Icon" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/InputBar/HBoxContainer/EmojiBtn" unique_id=363959800] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -11.0 +offset_top = -11.0 +offset_right = 11.0 +offset_bottom = 11.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("20_4pkyx") +expand_mode = 1 +stretch_mode = 5 + +[node name="QuitBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/InputBar/HBoxContainer" unique_id=738138485] +unique_name_in_owner = true +visible = false +layout_mode = 2 +texture_normal = ExtResource("13_0jb4q") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/InputBar/HBoxContainer" unique_id=628941879] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 5 + +[node name="ChatInput" type="LineEdit" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/InputBar/HBoxContainer/MarginContainer" unique_id=1346390421] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 38) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_colors/font_placeholder_color = Color(1, 1, 1, 0.75) +theme_override_fonts/font = ExtResource("14_vwf6o") +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxEmpty_0nf8f") +theme_override_styles/read_only = SubResource("StyleBoxEmpty_iulku") +theme_override_styles/focus = SubResource("StyleBoxEmpty_rox41") +placeholder_text = "Send to World..." + +[node name="SendBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/LeftCol/Control/HBoxContainer/InputBar/HBoxContainer" unique_id=1491048704] +unique_name_in_owner = true +custom_minimum_size = Vector2(44, 44) +layout_mode = 2 +size_flags_vertical = 4 theme = ExtResource("2_theme") +theme_override_styles/normal = SubResource("StyleBoxEmpty_6ax38") +theme_override_styles/pressed = SubResource("StyleBoxFlat_jkoci") +theme_override_styles/hover = SubResource("StyleBoxFlat_3y5sy") icon = ExtResource("15_iwi7x") -flat = true [node name="CenterCol" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox" unique_id=7006870] clip_contents = true @@ -625,22 +1580,54 @@ size_flags_horizontal = 3 custom_minimum_size = Vector2(280, 0) layout_mode = 2 -[node name="TopRightPanel" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=20449742] +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=76839117] +clip_contents = true +custom_minimum_size = Vector2(532, 48) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_oysm8") + +[node name="GradientPanel" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel" unique_id=966402216] +material = SubResource("ShaderMaterial_ixomp") +custom_minimum_size = Vector2(0, 48) +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 64.0 +grow_horizontal = 2 +scale = Vector2(1, 0.75) +texture = SubResource("GradientTexture2D_rievh") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel" unique_id=1907187664] +custom_minimum_size = Vector2(532, 0) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 16 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 16 +theme_override_constants/margin_bottom = 8 + +[node name="TopRightPanel" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer" unique_id=20449742] custom_minimum_size = Vector2(500, 0) layout_mode = 2 theme = ExtResource("2_theme") -theme_override_constants/separation = 12 +theme_override_constants/separation = 40 alignment = 2 -[node name="ProfileBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=752873406] +[node name="ProfileBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=752873406] unique_name_in_owner = true -custom_minimum_size = Vector2(61, 61) +visible = false +custom_minimum_size = Vector2(32, 32) layout_mode = 2 theme_override_fonts/font = ExtResource("5_pc087") flat = true -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/ProfileBtn" unique_id=1690437163] -custom_minimum_size = Vector2(32, 32) +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/ProfileBtn" unique_id=1690437163] +custom_minimum_size = Vector2(16, 16) layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -650,81 +1637,124 @@ grow_vertical = 2 texture = ExtResource("18_u7tfn") expand_mode = 2 -[node name="LeaderboardBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=312524216] +[node name="HelpBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=925822252] +custom_minimum_size = Vector2(16, 16) +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_fonts/font = ExtResource("5_pc087") +flat = true + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/HelpBtn" unique_id=155484110] +custom_minimum_size = Vector2(16, 16) +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -16.0 +offset_bottom = 16.0 +grow_horizontal = 0 +texture = ExtResource("24_ph747") +expand_mode = 1 + +[node name="CartBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=456149005] unique_name_in_owner = true -custom_minimum_size = Vector2(61, 61) +custom_minimum_size = Vector2(32, 32) layout_mode = 2 theme_override_fonts/font = ExtResource("5_pc087") flat = true -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/LeaderboardBtn" unique_id=1226601226] -custom_minimum_size = Vector2(32, 32) +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/CartBtn" unique_id=1719165221] +custom_minimum_size = Vector2(16, 16) layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("19_2630d") +texture = ExtResource("25_ixomp") expand_mode = 2 -[node name="CartBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=456149005] +[node name="TicketBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=64042310] unique_name_in_owner = true -custom_minimum_size = Vector2(61, 61) +custom_minimum_size = Vector2(28, 32) layout_mode = 2 theme_override_fonts/font = ExtResource("5_pc087") flat = true -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/CartBtn" unique_id=1719165221] -custom_minimum_size = Vector2(32, 32) +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/TicketBtn" unique_id=109558990] +custom_minimum_size = Vector2(16, 16) layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("20_835bk") -expand_mode = 2 +texture = ExtResource("26_8kv63") +expand_mode = 1 -[node name="TicketBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=64042310] +[node name="LeaderboardBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=312524216] unique_name_in_owner = true -custom_minimum_size = Vector2(61, 61) +custom_minimum_size = Vector2(40, 32) layout_mode = 2 theme_override_fonts/font = ExtResource("5_pc087") flat = true -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/TicketBtn" unique_id=109558990] -custom_minimum_size = Vector2(32, 32) +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/LeaderboardBtn" unique_id=1226601226] +custom_minimum_size = Vector2(16, 16) layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("21_ucbax") -expand_mode = 2 +texture = ExtResource("27_y8bta") +expand_mode = 1 -[node name="MailboxBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=64042311] +[node name="SocialBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=82719328] unique_name_in_owner = true -custom_minimum_size = Vector2(61, 61) +custom_minimum_size = Vector2(40, 32) +layout_mode = 2 +theme_override_fonts/font = ExtResource("5_pc087") +flat = true + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/SocialBtn" unique_id=134959792] +custom_minimum_size = Vector2(16, 16) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("28_st18m") +expand_mode = 1 + +[node name="MailboxBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=64042311] +unique_name_in_owner = true +custom_minimum_size = Vector2(32, 32) layout_mode = 2 theme_override_fonts/font = ExtResource("5_pc087") theme_override_styles/normal = SubResource("StyleBoxEmpty_835bk") theme_override_styles/pressed = SubResource("StyleBoxEmpty_ucbax") theme_override_styles/hover = SubResource("StyleBoxEmpty_1x1aw") -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/MailboxBtn" unique_id=109558991] -custom_minimum_size = Vector2(32, 32) +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/MailboxBtn" unique_id=109558991] +custom_minimum_size = Vector2(16, 16) layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -19.5 +offset_top = -12.0 +offset_right = 20.5 +offset_bottom = 13.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("23_835bk") +texture = ExtResource("29_6yc8v") expand_mode = 3 -[node name="MailBadge" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/MailboxBtn" unique_id=156491696] +[node name="MailBadge" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/MailboxBtn" unique_id=156491696] unique_name_in_owner = true visible = false layout_mode = 1 @@ -741,47 +1771,31 @@ theme_override_font_sizes/font_size = 10 horizontal_alignment = 1 vertical_alignment = 1 -[node name="SocialBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=82719328] +[node name="SettingsBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel" unique_id=90] unique_name_in_owner = true -custom_minimum_size = Vector2(61, 61) +custom_minimum_size = Vector2(32, 32) layout_mode = 2 theme_override_fonts/font = ExtResource("5_pc087") flat = true -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/SocialBtn" unique_id=134959792] -custom_minimum_size = Vector2(32, 32) +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Panel/MarginContainer/TopRightPanel/SettingsBtn" unique_id=629469797] +custom_minimum_size = Vector2(16, 16) layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("22_1x1aw") -expand_mode = 2 +texture = ExtResource("30_yb58j") +expand_mode = 1 -[node name="SettingsBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel" unique_id=90] -unique_name_in_owner = true -custom_minimum_size = Vector2(61, 61) +[node name="Events" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=43997484 instance=ExtResource("32_8kv63")] +custom_minimum_size = Vector2(276, 141) layout_mode = 2 -theme_override_fonts/font = ExtResource("5_pc087") -flat = true - -[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/TopRightPanel/SettingsBtn" unique_id=629469797] -custom_minimum_size = Vector2(32, 32) -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = ExtResource("23_twy5w") -expand_mode = 2 - -[node name="Spacer1" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=9023] -layout_mode = 2 -size_flags_vertical = 3 +size_flags_vertical = 1 [node name="Banners" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=1356766829] +visible = false layout_mode = 2 theme_override_constants/separation = 16 alignment = 2 @@ -828,30 +1842,123 @@ theme_override_font_sizes/font_size = 30 disabled = true text = "Banner Slot" -[node name="HBoxContainer3" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Banners" unique_id=1502007727] +[node name="VBoxContainer" type="VBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=496474529] +custom_minimum_size = Vector2(250, 0) layout_mode = 2 -alignment = 2 +size_flags_horizontal = 8 +size_flags_vertical = 3 -[node name="Control" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Banners/HBoxContainer3" unique_id=249145750] -clip_contents = true -custom_minimum_size = Vector2(350, 0) -layout_direction = 3 +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer" unique_id=1789411264] layout_mode = 2 -[node name="Banner3" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/Banners/HBoxContainer3" unique_id=945] -unique_name_in_owner = true -custom_minimum_size = Vector2(0, 120) +[node name="Label" type="Label" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/HBoxContainer" unique_id=1371230077] +layout_mode = 2 +theme_override_fonts/font = ExtResource("38_87ggl") +theme_override_font_sizes/font_size = 20 +text = "QUEST LIST" + +[node name="VSeparator" type="VSeparator" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/HBoxContainer" unique_id=2072828325] layout_mode = 2 size_flags_horizontal = 3 -theme = ExtResource("14_2630d") -theme_override_fonts/font = ExtResource("5_pc087") -theme_override_font_sizes/font_size = 30 -disabled = true -text = "Banner Slot" +theme_override_styles/separator = SubResource("StyleBoxEmpty_pril5") + +[node name="TextureRect" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/HBoxContainer" unique_id=2106503240] +custom_minimum_size = Vector2(16, 0) +layout_mode = 2 +texture = ExtResource("39_agxrn") +expand_mode = 1 +stretch_mode = 4 + +[node name="HSeparator2" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer" unique_id=2069465384] +layout_mode = 2 +theme_override_constants/separation = 4 +theme_override_styles/separator = SubResource("StyleBoxFlat_wqxeh") + +[node name="HSeparator" type="HSeparator" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer" unique_id=1831625398] +layout_mode = 2 +theme_override_styles/separator = SubResource("StyleBoxEmpty_do6di") + +[node name="QuestListTab" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer" unique_id=731395093] +custom_minimum_size = Vector2(0, 38) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_do6di") +script = ExtResource("40_agxrn") + +[node name="MarginContainer" type="MarginContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/QuestListTab" unique_id=1241608073] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 6 +theme_override_constants/margin_top = 6 +theme_override_constants/margin_right = 6 +theme_override_constants/margin_bottom = 6 + +[node name="HBoxContainer" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/QuestListTab/MarginContainer" unique_id=1931628729] +layout_mode = 2 +theme_override_constants/separation = 0 + +[node name="DailyTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/QuestListTab/MarginContainer/HBoxContainer" unique_id=1009068559] +unique_name_in_owner = true +custom_minimum_size = Vector2(68, 28) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_colors/font_color = Color(1, 1, 1, 0.9) +theme_override_colors/font_pressed_color = Color(0.06666667, 0.13333334, 0.1882353, 1) +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("38_87ggl") +theme_override_styles/normal = SubResource("StyleBoxEmpty_jkoci") +theme_override_styles/pressed = SubResource("StyleBoxFlat_os6ns") +theme_override_styles/hover = SubResource("StyleBoxFlat_b6wif") +toggle_mode = true +button_pressed = true +text = "DAILY" + +[node name="VSeparator2" type="VSeparator" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/QuestListTab/MarginContainer/HBoxContainer" unique_id=1786352918] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/separator = SubResource("StyleBoxEmpty_uovpt") + +[node name="WeeklyTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/QuestListTab/MarginContainer/HBoxContainer" unique_id=1907844738] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 26) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_colors/font_color = Color(1, 1, 1, 0.9) +theme_override_colors/font_pressed_color = Color(0.06666667, 0.13333334, 0.1882353, 1) +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("38_87ggl") +theme_override_styles/normal = SubResource("StyleBoxEmpty_3y5sy") +theme_override_styles/pressed = SubResource("StyleBoxFlat_os6ns") +theme_override_styles/hover = SubResource("StyleBoxFlat_b6wif") +toggle_mode = true +text = "WEEKLY" + +[node name="VSeparator" type="VSeparator" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/QuestListTab/MarginContainer/HBoxContainer" unique_id=1382495761] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_styles/separator = SubResource("StyleBoxEmpty_uovpt") + +[node name="MonthlyTabBtn" type="Button" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/VBoxContainer/QuestListTab/MarginContainer/HBoxContainer" unique_id=1294883329] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 26) +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_colors/font_color = Color(1, 1, 1, 0.9) +theme_override_colors/font_pressed_color = Color(0.06666667, 0.13333334, 0.1882353, 1) +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("38_87ggl") +theme_override_styles/normal = SubResource("StyleBoxEmpty_fwqx0") +theme_override_styles/pressed = SubResource("StyleBoxFlat_8onxx") +theme_override_styles/hover = SubResource("StyleBoxFlat_15eno") +toggle_mode = true +text = "MONTHLY" [node name="Spacer2" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=324] +custom_minimum_size = Vector2(0, 92) layout_mode = 2 -size_flags_vertical = 3 [node name="BottomRightPanel" type="HBoxContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol" unique_id=987] layout_mode = 2 @@ -869,10 +1976,68 @@ theme_override_fonts/font = ExtResource("5_pc087") theme_override_font_sizes/font_size = 18 text = "TUTORIAL" -[node name="BrowseRoomsBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=1204550484] +[node name="RoomBtnRoot" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=1998141679] +custom_minimum_size = Vector2(195, 77) +layout_mode = 2 +size_flags_horizontal = 10 +size_flags_vertical = 8 + +[node name="PanelContainer" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/RoomBtnRoot" unique_id=2047958981] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -160.0 +offset_top = -65.0 +offset_bottom = 36.0 +grow_horizontal = 0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_4pkyx") + +[node name="Panel2" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/RoomBtnRoot/PanelContainer" unique_id=1384210399] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_rievh") + +[node name="CardLeft" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/RoomBtnRoot/PanelContainer/Panel2" unique_id=975861905] +custom_minimum_size = Vector2(85, 85) +layout_mode = 0 +offset_left = -2.0 +offset_top = 20.0 +offset_right = 83.0 +offset_bottom = 105.0 +rotation = -0.35081118 +pivot_offset = Vector2(28, 28) +size_flags_horizontal = 0 +size_flags_vertical = 8 +mouse_filter = 2 +texture = ExtResource("33_yb58j") +expand_mode = 1 +stretch_mode = 5 + +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/RoomBtnRoot/PanelContainer" unique_id=155993237] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_olier") + +[node name="CardRight" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/RoomBtnRoot/PanelContainer/Panel" unique_id=817735936] +layout_mode = 0 +offset_left = 77.0 +offset_top = -1.0 +offset_right = 167.0 +offset_bottom = 89.0 +rotation = 0.34906584 +pivot_offset = Vector2(28, 28) +size_flags_horizontal = 8 +size_flags_vertical = 8 +mouse_filter = 2 +texture = ExtResource("34_oysm8") +expand_mode = 1 +stretch_mode = 5 + +[node name="BrowseRoomsBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/RoomBtnRoot" unique_id=1204550484] unique_name_in_owner = true custom_minimum_size = Vector2(0, 50) -layout_mode = 2 +layout_mode = 0 +offset_right = 195.0 +offset_bottom = 77.0 size_flags_horizontal = 10 size_flags_vertical = 8 theme = ExtResource("2_theme") @@ -880,10 +2045,66 @@ texture_normal = ExtResource("17_wjff0") texture_pressed = ExtResource("18_0jb4q") texture_hover = ExtResource("18_0jb4q") -[node name="CreateRoomBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=1662316269] +[node name="PlayBtnRoot" type="Control" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel" unique_id=521048431] +custom_minimum_size = Vector2(284, 107) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PanelContainer" type="PanelContainer" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/PlayBtnRoot" unique_id=1177755408] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -222.0 +offset_top = -110.0 +offset_bottom = 9.0 +grow_horizontal = 0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_oysm8") + +[node name="Panel" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/PlayBtnRoot/PanelContainer" unique_id=1036605899] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_5jb2g") + +[node name="CardRight" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/PlayBtnRoot/PanelContainer/Panel" unique_id=1142287670] +layout_mode = 0 +offset_left = 115.0 +offset_top = 26.0 +offset_right = 215.0 +offset_bottom = 126.0 +rotation = 0.24958208 +pivot_offset = Vector2(28, 28) +size_flags_horizontal = 8 +size_flags_vertical = 8 +mouse_filter = 2 +texture = ExtResource("38_rievh") +expand_mode = 1 +stretch_mode = 5 + +[node name="Panel2" type="Panel" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/PlayBtnRoot/PanelContainer" unique_id=379136491] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxEmpty_s0n6j") + +[node name="CardLeft" type="TextureRect" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/PlayBtnRoot/PanelContainer/Panel2" unique_id=614956734] +layout_mode = 0 +offset_left = 17.0 +offset_top = 58.0 +offset_right = 112.0 +offset_bottom = 153.0 +rotation = -0.34382987 +pivot_offset = Vector2(28, 28) +size_flags_horizontal = 0 +size_flags_vertical = 8 +mouse_filter = 2 +texture = ExtResource("37_4pkyx") +expand_mode = 1 +stretch_mode = 5 + +[node name="CreateRoomBtn" type="TextureButton" parent="MainMenuPanel/MainMargin/MainHBox/RightCol/BottomRightPanel/PlayBtnRoot" unique_id=1662316269] unique_name_in_owner = true custom_minimum_size = Vector2(0, 50) -layout_mode = 2 +layout_mode = 0 +offset_right = 284.0 +offset_bottom = 107.0 size_flags_horizontal = 3 theme = ExtResource("2_theme") texture_normal = ExtResource("18_h1rib") diff --git a/scenes/lobby_sliders.gd b/scenes/lobby_sliders.gd new file mode 100644 index 0000000..fb34b25 --- /dev/null +++ b/scenes/lobby_sliders.gd @@ -0,0 +1,142 @@ +extends ScrollContainer + +const SNAP_DURATION := 0.25 +const TEX_DEFAULT := preload("res://assets/graphics/gui/lobby/bar_default.svg") +const TEX_ACTIVE := preload("res://assets/graphics/gui/lobby/bar_active.svg") + +@export var auto_advance_enabled: bool = true +@export var auto_advance_delay: float = 4.0 + +@onready var _track: HBoxContainer = $CardMargin/HBoxContainer +@onready var _page_dots: Array = get_node_or_null("../PageIndicator").get_children() if get_node_or_null("../PageIndicator") else [] + +var _dragging := false +var _drag_start_pos := 0.0 +var _drag_start_scroll := 0 +var _snap_tween: Tween +var _auto_timer: Timer + + +func _ready() -> void: + _update_indicator() + _setup_auto_timer() + + +func _setup_auto_timer() -> void: + _auto_timer = Timer.new() + _auto_timer.name = "AutoAdvanceTimer" + _auto_timer.one_shot = true + _auto_timer.timeout.connect(_on_auto_timer_timeout) + add_child(_auto_timer) + _restart_auto_timer() + + +func _restart_auto_timer() -> void: + if not auto_advance_enabled or _dragging or _card_count() <= 1: + return + _auto_timer.stop() + _auto_timer.wait_time = auto_advance_delay + _auto_timer.start() + + +func _on_auto_timer_timeout() -> void: + if _dragging: + return + var next_index := (_current_page() + 1) % _card_count() + _animate_to_page(next_index) + + +func _exit_tree() -> void: + if _auto_timer: + _auto_timer.stop() + if _snap_tween: + _snap_tween.kill() + + +func _gui_input(event: InputEvent) -> void: + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: + if event.pressed: + _start_drag(event.position.x) + elif _dragging: + _end_drag() + elif event is InputEventMouseMotion and _dragging: + _update_drag(event.position.x) + elif event is InputEventScreenTouch and event.index == 0: + if event.pressed: + _start_drag(event.position.x) + elif _dragging: + _end_drag() + elif event is InputEventScreenDrag and event.index == 0 and _dragging: + _update_drag(event.position.x) + + +func _start_drag(x: float) -> void: + if _snap_tween: + _snap_tween.kill() + _auto_timer.stop() + _dragging = true + _drag_start_pos = x + _drag_start_scroll = scroll_horizontal + + +func _update_drag(x: float) -> void: + var delta := _drag_start_pos - x + scroll_horizontal = clampi(_drag_start_scroll + int(delta), 0, _max_scroll()) + _update_indicator() + + +func _end_drag() -> void: + _dragging = false + _snap_to_nearest_card() + + +func _max_scroll() -> int: + var bar := get_h_scroll_bar() + return maxi(0, int(bar.max_value - bar.page)) + + +func _card_count() -> int: + return maxi(1, _track.get_child_count()) + + +func _card_step() -> float: + var count := _card_count() + if count <= 1: + return 0.0 + return float(_max_scroll()) / float(count - 1) + + +func _current_page() -> int: + var step := _card_step() + if step <= 0.0: + return 0 + return clampi(roundi(scroll_horizontal / step), 0, _card_count() - 1) + + +func _snap_to_nearest_card() -> void: + _animate_to_page(_current_page()) + + +func _animate_to_page(target_index: int) -> void: + target_index = clampi(target_index, 0, _card_count() - 1) + var step := _card_step() + var target_scroll := int(round(target_index * step)) + if _snap_tween: + _snap_tween.kill() + _snap_tween = create_tween().set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + _snap_tween.tween_method(_set_scroll_and_indicator, float(scroll_horizontal), float(target_scroll), SNAP_DURATION) + _snap_tween.finished.connect(_restart_auto_timer) + + +func _set_scroll_and_indicator(value: float) -> void: + scroll_horizontal = int(round(value)) + _update_indicator() + + +func _update_indicator() -> void: + if _page_dots.is_empty(): + return + var active_index := _current_page() + for i in _page_dots.size(): + var dot: TextureRect = _page_dots[i] + dot.texture = TEX_ACTIVE if i == active_index else TEX_DEFAULT diff --git a/scenes/lobby_sliders.gd.uid b/scenes/lobby_sliders.gd.uid new file mode 100644 index 0000000..e23880f --- /dev/null +++ b/scenes/lobby_sliders.gd.uid @@ -0,0 +1 @@ +uid://bnxbmxuwjwqua diff --git a/scenes/lobby_sliders.tscn b/scenes/lobby_sliders.tscn new file mode 100644 index 0000000..6d9fdbc --- /dev/null +++ b/scenes/lobby_sliders.tscn @@ -0,0 +1,198 @@ +[gd_scene format=3 uid="uid://c3v78hufajngu"] + +[ext_resource type="Texture2D" uid="uid://bhv35y3q1jxr0" path="res://assets/graphics/gui/lobby/card_xmple.png" id="1_3k5w5"] +[ext_resource type="Script" uid="uid://bnxbmxuwjwqua" path="res://scenes/lobby_sliders.gd" id="1_l3iok"] +[ext_resource type="FontFile" uid="uid://dsqg0x5lnosou" path="res://assets/fonts/TektonDash2.ttf" id="2_l3iok"] +[ext_resource type="Texture2D" uid="uid://y0y2fqa6xml7" path="res://assets/graphics/gui/lobby/bar_default.svg" id="3_i4gg1"] +[ext_resource type="Texture2D" uid="uid://b5qt2u2k23b5w" path="res://assets/graphics/gui/lobby/bar_active.svg" id="4_crv6i"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_st18m"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_t5gla"] +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) +corner_radius_top_left = 23 +corner_radius_top_right = 23 +corner_radius_bottom_right = 23 +corner_radius_bottom_left = 23 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a37jl"] +bg_color = Color(1, 0.25882354, 0.25882354, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(0.06666667, 0.13333334, 0.1882353, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[node name="Sliders" type="Panel" unique_id=43997484] +custom_minimum_size = Vector2(276, 0) +offset_right = 276.0 +offset_bottom = 132.0 +size_flags_horizontal = 8 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxEmpty_st18m") + +[node name="ScrollContainer" type="ScrollContainer" parent="." unique_id=1629363718] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_bottom = 4.0 +grow_horizontal = 2 +grow_vertical = 2 +horizontal_scroll_mode = 3 +vertical_scroll_mode = 3 +script = ExtResource("1_l3iok") + +[node name="CardMargin" type="MarginContainer" parent="ScrollContainer" unique_id=481757735] +layout_mode = 2 +theme_override_constants/margin_left = 0 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 0 +theme_override_constants/margin_bottom = 0 + +[node name="HBoxContainer" type="HBoxContainer" parent="ScrollContainer/CardMargin" unique_id=1982136347] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 4 + +[node name="PanelContainer1" type="PanelContainer" parent="ScrollContainer/CardMargin/HBoxContainer" unique_id=610661983] +layout_mode = 2 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_t5gla") + +[node name="CardBase" type="TextureRect" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer1" unique_id=313528397] +custom_minimum_size = Vector2(270, 117) +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 4 +texture = ExtResource("1_3k5w5") +expand_mode = 1 + +[node name="LimitedBadge" type="PanelContainer" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer1/CardBase" unique_id=802083624] +layout_mode = 0 +offset_left = 2.0 +offset_top = -5.0 +offset_right = 108.0 +offset_bottom = 29.0 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_a37jl") + +[node name="MarginContainer" type="MarginContainer" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer1/CardBase/LimitedBadge" unique_id=51791062] +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/margin_left = 13 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 13 +theme_override_constants/margin_bottom = 3 + +[node name="Label" type="Label" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer1/CardBase/LimitedBadge/MarginContainer" unique_id=1817736469] +layout_mode = 2 +theme_override_fonts/font = ExtResource("2_l3iok") +theme_override_font_sizes/font_size = 20 +text = "Limited" + +[node name="PanelContainer2" type="PanelContainer" parent="ScrollContainer/CardMargin/HBoxContainer" unique_id=704308740] +layout_mode = 2 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_t5gla") + +[node name="CardBase" type="TextureRect" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer2" unique_id=870258525] +custom_minimum_size = Vector2(270, 117) +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 4 +texture = ExtResource("1_3k5w5") +expand_mode = 1 + +[node name="LimitedBadge" type="PanelContainer" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer2/CardBase" unique_id=1744093227] +layout_mode = 0 +offset_left = 2.0 +offset_top = -5.0 +offset_right = 102.0 +offset_bottom = 28.0 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_a37jl") + +[node name="MarginContainer" type="MarginContainer" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer2/CardBase/LimitedBadge" unique_id=126611072] +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/margin_left = 13 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 13 +theme_override_constants/margin_bottom = 3 + +[node name="Label" type="Label" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer2/CardBase/LimitedBadge/MarginContainer" unique_id=1709358746] +layout_mode = 2 +theme_override_fonts/font = ExtResource("2_l3iok") +theme_override_font_sizes/font_size = 20 +text = "Limited" + +[node name="PanelContainer3" type="PanelContainer" parent="ScrollContainer/CardMargin/HBoxContainer" unique_id=1308324127] +layout_mode = 2 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_t5gla") + +[node name="CardBase" type="TextureRect" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer3" unique_id=1957855413] +custom_minimum_size = Vector2(270, 117) +layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 4 +texture = ExtResource("1_3k5w5") +expand_mode = 1 + +[node name="LimitedBadge" type="PanelContainer" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer3/CardBase" unique_id=1087414779] +layout_mode = 0 +offset_left = 2.0 +offset_top = -5.0 +offset_right = 102.0 +offset_bottom = 28.0 +mouse_filter = 1 +theme_override_styles/panel = SubResource("StyleBoxFlat_a37jl") + +[node name="MarginContainer" type="MarginContainer" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer3/CardBase/LimitedBadge" unique_id=516591042] +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/margin_left = 13 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 13 +theme_override_constants/margin_bottom = 3 + +[node name="Label" type="Label" parent="ScrollContainer/CardMargin/HBoxContainer/PanelContainer3/CardBase/LimitedBadge/MarginContainer" unique_id=1269776987] +layout_mode = 2 +theme_override_fonts/font = ExtResource("2_l3iok") +theme_override_font_sizes/font_size = 20 +text = "Limited" + +[node name="PageIndicator" type="HBoxContainer" parent="." unique_id=844141711] +layout_mode = 0 +offset_left = 13.0 +offset_top = 108.0 +offset_right = 263.0 +offset_bottom = 117.0 +theme_override_constants/separation = 5 + +[node name="Dot1" type="TextureRect" parent="PageIndicator" unique_id=1939877728] +custom_minimum_size = Vector2(80, 6) +layout_mode = 2 +texture = ExtResource("4_crv6i") +expand_mode = 1 + +[node name="Dot2" type="TextureRect" parent="PageIndicator" unique_id=1471300482] +custom_minimum_size = Vector2(80, 6) +layout_mode = 2 +texture = ExtResource("3_i4gg1") +expand_mode = 1 + +[node name="Dot3" type="TextureRect" parent="PageIndicator" unique_id=1825186770] +custom_minimum_size = Vector2(80, 6) +layout_mode = 2 +texture = ExtResource("3_i4gg1") +expand_mode = 1 diff --git a/scenes/player.gd b/scenes/player.gd index 203fc38..82a5d1a 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -117,6 +117,7 @@ var can_finish: bool: # Modifier for Turn based var has_performed_action: bool = false +@warning_ignore("unused_private_class_variable") # read/written by player_action_manager.gd var _is_processing_action: bool = false var selected_gridmap_position = Vector2i(-1, -1) var selected_playerboard_slot = -1 @@ -157,6 +158,7 @@ var spawn_point_selected = false # Action for hilighter var highlighted_spawn_points = [] +@warning_ignore("unused_private_class_variable") # read/written by player_movement_manager.gd var _is_highlighting: bool = false # Character selection and animation @@ -579,7 +581,7 @@ const COSMETIC_MAPPING = { } } -func apply_loadout(character_node: Node3D) -> void: +func apply_loadout(_character_node: Node3D) -> void: """Apply equipped cosmetics via SkinManager — the single source of truth. Uses _player_loadout (synced from the owning client via sync_loadout RPC) so all peers render the same skin regardless of their own loadout.""" @@ -928,14 +930,14 @@ func _refresh_player_visuals(): if active_character: apply_loadout(active_character) -func update_rank_visuals(rank: int, score: int = -1): +func update_rank_visuals(rank: int, player_score: int = -1): var pos_label = get_node_or_null("Position") if not pos_label: return # Hide rank until the player has actually scored, so the match doesn't # start with everyone showing a position (e.g. all "1st"). - if score == 0: + if player_score == 0: pos_label.visible = false return @@ -1110,7 +1112,6 @@ func drop_all_tiles(): for i in range(playerboard.size()): if playerboard[i] != -1: - var item_id = playerboard[i] playerboard[i] = -1 # Find a spot to drop? Or just destroy? @@ -1603,7 +1604,7 @@ func _find_random_spawn_position() -> Vector2i: # Special handling for Stop n Go mode (22x10 Grid) if LobbyManager.game_mode == "Stop n Go": - var available_positions = [] + var stop_n_go_positions = [] # Scan the 22x10 grid for x in range(22): for z in range(10): @@ -1616,12 +1617,12 @@ func _find_random_spawn_position() -> Vector2i: # Assuming 4 is obstacle, and -1 is void. 0 is walkable, 2 is safe zone. if item != -1 and item != 4: if not is_position_occupied(pos): - available_positions.append(pos) - - if available_positions.size() > 0: + stop_n_go_positions.append(pos) + + if stop_n_go_positions.size() > 0: var rng = RandomNumberGenerator.new() rng.randomize() - return available_positions[rng.randi() % available_positions.size()] + return stop_n_go_positions[rng.randi() % stop_n_go_positions.size()] return Vector2i(10, 5) # Fallback center @@ -1651,6 +1652,7 @@ func _find_random_spawn_position() -> Vector2i: # Better fallback center instead of 0,0 which is often a wall/border print("[Player] Warning: No available spawn positions found! Using fallback.") + @warning_ignore("integer_division") # grid center is intentionally an integer cell return Vector2i(cols / 2, rs / 2) func find_random_valid_position_in_range() -> Vector2i: @@ -1690,8 +1692,8 @@ func raycast_to_grid(from: Vector3, to: Vector3) -> Vector2i: return Vector2i(-1, -1) -func is_within_movement_range(target_position: Vector2i) -> bool: - return movement_manager.is_within_movement_range(target_position) +func is_within_movement_range(check_position: Vector2i) -> bool: + return movement_manager.is_within_movement_range(check_position) # ----------------------------------------------------------------- # Movement @@ -1777,9 +1779,7 @@ func start_movement_along_path(path: Array, clear_visual: bool = true, force: bo var current_finish_locs = race_manager.get_current_finish_locations() if race_manager else finish_locations if current_position in current_finish_locs and can_finish: finish_race() - - var main = get_tree().get_root().get_node_or_null("Main") - + # Clear visuals for everyone including bots if clear_visual: if enhanced_gridmap: diff --git a/scenes/ui/battlepass_panel.gd b/scenes/ui/battlepass_panel.gd new file mode 100644 index 0000000..4886578 --- /dev/null +++ b/scenes/ui/battlepass_panel.gd @@ -0,0 +1,13 @@ +extends Panel + +@onready var _slider = $Content/ScrollContainer +@onready var _ticket = $Ticket + + +func _ready() -> void: + if _slider.has_signal("page_changed"): + _slider.page_changed.connect(_on_page_changed) + + +func _on_page_changed(index: int) -> void: + _ticket.show_index(index) diff --git a/scenes/ui/battlepass_panel.gd.uid b/scenes/ui/battlepass_panel.gd.uid new file mode 100644 index 0000000..5e04334 --- /dev/null +++ b/scenes/ui/battlepass_panel.gd.uid @@ -0,0 +1 @@ +uid://dc5dh15rrdc4 diff --git a/scenes/ui/battlepass_ticket.gd b/scenes/ui/battlepass_ticket.gd new file mode 100644 index 0000000..d772e44 --- /dev/null +++ b/scenes/ui/battlepass_ticket.gd @@ -0,0 +1,53 @@ +extends Panel + +const DIP_DURATION := 0.36 + +@onready var _tickets: Array = get_children().filter(func(c): return c is TextureRect) + +var _current_index := 0 +var _tween: Tween + + +func _ready() -> void: + for i in _tickets.size(): + _tickets[i].visible = (i == 0) + _tickets[i].modulate.a = 1.0 + + +func show_index(index: int, animate: bool = true) -> void: + if index < 0 or index >= _tickets.size() or index == _current_index: + return + + var from_ticket: TextureRect = _tickets[_current_index] + var to_ticket: TextureRect = _tickets[index] + + if not animate: + from_ticket.visible = false + to_ticket.visible = true + to_ticket.modulate.a = 1.0 + _current_index = index + return + + if _tween: + _tween.kill() + + var from_mat: ShaderMaterial = from_ticket.material + var to_mat: ShaderMaterial = to_ticket.material + + _tween = create_tween() + _tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + if from_mat: + _tween.tween_method(func(v): from_mat.set_shader_parameter("blur_amount", v), 0.0, 1.0, DIP_DURATION * 0.5) + _tween.parallel().tween_property(from_ticket, "modulate:a", 0.0, DIP_DURATION * 0.5) + + _tween.tween_callback(func(): + from_ticket.visible = false + to_ticket.modulate.a = 0.0 + to_ticket.visible = true + _current_index = index + ) + + _tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + if to_mat: + _tween.tween_method(func(v): to_mat.set_shader_parameter("blur_amount", v), 1.0, 0.0, DIP_DURATION * 0.5) + _tween.parallel().tween_property(to_ticket, "modulate:a", 1.0, DIP_DURATION * 0.5) diff --git a/scenes/ui/battlepass_ticket.gd.uid b/scenes/ui/battlepass_ticket.gd.uid new file mode 100644 index 0000000..fc0ea14 --- /dev/null +++ b/scenes/ui/battlepass_ticket.gd.uid @@ -0,0 +1 @@ +uid://bwu41vcu5t8nd diff --git a/scenes/ui/lobby_chat.gd b/scenes/ui/lobby_chat.gd index 99af33f..9d58989 100644 --- a/scenes/ui/lobby_chat.gd +++ b/scenes/ui/lobby_chat.gd @@ -10,6 +10,8 @@ var _active_chat_context: String = "global" var _dm_tabs: Dictionary = {} var _dm_messages: Dictionary = {} var _chat_config: Dictionary = {"prefix": "", "max_messages": 50, "max_age_days": 0} +var _global_chat_loading: bool = false +var _dm_loading: Dictionary = {} func _init(p_lobby: Control): lobby = p_lobby @@ -19,26 +21,41 @@ func _init(p_lobby: Control): if lobby.chat_input: lobby.chat_input.text_submitted.connect(func(_t): _on_chat_send_pressed()) lobby.chat_input.text_changed.connect(_on_chat_input_changed) - + + var global_btn = lobby.get_node_or_null("%GlobalChatTabBtn") + if global_btn: + global_btn.pressed.connect(func(): switch_chat_tab("global")) + + var server_btn = lobby.get_node_or_null("%ServerChatTabBtn") + if server_btn: + server_btn.pressed.connect(func(): switch_chat_tab("server")) + _setup_friend_suggest_ui() func join_global_chat() -> void: - if _chat_channel != null: + if _chat_channel != null or _global_chat_loading: return - + + _global_chat_loading = true + _refresh_chat_display() + var socket = NakamaManager.socket if not socket or not socket.is_connected_to_host(): push_warning("[Chat] Socket not connected, skipping chat join.") + _global_chat_loading = false + _refresh_chat_display() return - + var result = await socket.join_chat_async(GLOBAL_CHAT_ROOM, NakamaSocket.ChannelType.Room, true, false) - + if result.is_exception(): push_warning("[Chat] Failed to join global chat: " + result.get_exception().message) + _global_chat_loading = false + _refresh_chat_display() return - + _chat_channel = result print("[Chat] Joined global channel: ", _chat_channel.id) @@ -51,26 +68,28 @@ func join_global_chat() -> void: if cfg_res.has("config"): _chat_config = cfg_res["config"] - _chat_messages.clear() var limit: int = _chat_config.get("max_messages", 50) + var history_entries: Array = [] var history_result = await NakamaManager.client.list_channel_messages_async(NakamaManager.session, _chat_channel.id, limit, false) if not history_result.is_exception() and history_result.messages: var msgs = history_result.messages.duplicate() msgs.reverse() for msg in msgs: - _add_chat_message(msg, false) + history_entries.append(_parse_chat_message(msg)) # Inject admin system prefix if configured var prefix: String = _chat_config.get("prefix", "") if not prefix.is_empty(): - _chat_messages.insert(0, { + history_entries.insert(0, { "sender": "SYSTEM", "content": prefix, "ts": _get_local_time(), "date": Time.get_date_string_from_system() }) - + + _chat_messages = history_entries + _chat_messages _trim_old_messages() + _global_chat_loading = false _refresh_chat_display() func _on_chat_message_received(message) -> void: @@ -80,29 +99,32 @@ func _on_chat_message_received(message) -> void: return _add_chat_message(message, true) -func _add_chat_message(message, refresh_display: bool) -> void: +func _parse_chat_message(message) -> Dictionary: var text: String = "" var parsed = JSON.parse_string(message.content) if typeof(parsed) == TYPE_DICTIONARY: text = parsed.get("msg", message.content) else: text = message.content - + var sender: String = message.username if sender.is_empty() and message.sender_id: sender = message.sender_id.substr(0, 8) elif sender.is_empty(): sender = "Unknown" - + var ts_str: String = _format_nakama_time(message.create_time) - - _chat_messages.append({ + + return { "sender": sender, "content": text, "ts": ts_str, "date": message.create_time.substr(0, 10) if message.create_time else Time.get_date_string_from_system() - }) - + } + +func _add_chat_message(message, refresh_display: bool) -> void: + _chat_messages.append(_parse_chat_message(message)) + if refresh_display: _trim_old_messages() _refresh_chat_display() @@ -209,16 +231,21 @@ func _open_dm_tab(user_id: String, username: String) -> void: if not _dm_tabs.has(user_id): _create_dm_tab(user_id, username) _dm_messages[user_id] = [] + _dm_loading[user_id] = true switch_chat_tab(user_id) - + var history = await FriendManager.get_dm_history(user_id) var my_id = NakamaManager.session.user_id if NakamaManager.session else "" + var history_entries: Array = [] for entry in history: var is_self = entry.get("from") == my_id var sender_name = "You" if is_self else username var ts = _format_nakama_time(entry.get("create_time", "")) - _dm_messages[user_id].append({"sender": sender_name, "content": entry.get("msg", ""), "ts": ts}) - + history_entries.append({"sender": sender_name, "content": entry.get("msg", ""), "ts": ts}) + + _dm_messages[user_id] = history_entries + _dm_messages[user_id] + _dm_loading[user_id] = false + if _active_chat_context == user_id: _refresh_chat_display() else: @@ -256,16 +283,34 @@ func _close_dm_tab(user_id: String) -> void: func switch_chat_tab(context_id: String) -> void: _active_chat_context = context_id _refresh_chat_display() - - var tabs_container = lobby.get_node_or_null("%ChatTabsContainer") - if tabs_container: - var global_btn = lobby.get_node_or_null("%GlobalChatTabBtn") - if global_btn: - global_btn.modulate = Color(1.0, 1.0, 1.0) if context_id == "global" else Color(0.6, 0.6, 0.6) - - for u_id in _dm_tabs: - var tab_hbox = _dm_tabs[u_id] - tab_hbox.modulate = Color(1.0, 1.0, 1.0) if context_id == u_id else Color(0.6, 0.6, 0.6) + + var global_btn = lobby.get_node_or_null("%GlobalChatTabBtn") + if global_btn: + global_btn.button_pressed = (context_id == "global") + + var server_btn = lobby.get_node_or_null("%ServerChatTabBtn") + if server_btn: + server_btn.button_pressed = (context_id == "server") + + for u_id in _dm_tabs: + var tab_hbox = _dm_tabs[u_id] + var dm_btn = tab_hbox.get_node_or_null("DMTabBtn") + if dm_btn: + dm_btn.button_pressed = (context_id == u_id) + + if lobby.chat_input: + lobby.chat_input.placeholder_text = "Send to %s..." % _get_context_display_name(context_id) + +func _get_context_display_name(context_id: String) -> String: + if context_id == "global": + return "World" + if context_id == "server": + return "Server" + if _dm_tabs.has(context_id): + var btn = _dm_tabs[context_id].get_node_or_null("DMTabBtn") + if btn: + return btn.text + return "Chat" func _setup_friend_suggest_ui() -> void: lobby._friend_suggest_panel = lobby.get_node_or_null("%FriendSuggestPanel") @@ -331,12 +376,15 @@ func _refresh_chat_display() -> void: messages_to_show = [] for msg in messages_to_show: - var ts: String = msg.get("ts", "") var sender: String = msg.get("sender", "?") var text: String = msg.get("content", "") - - lobby.chat_display.append_text("[color=#888888][%s][/color] [b]%s:[/b] %s\n" % [ts, sender, text]) - + + lobby.chat_display.append_text("[b]%s[/b]\n[color=#c7d3e0]%s[/color]\n\n" % [sender, text]) + + var is_loading: bool = _global_chat_loading if _active_chat_context == "global" else _dm_loading.get(_active_chat_context, false) + if is_loading: + lobby.chat_display.append_text("[i][color=#8a97a8]Loading messages...[/color][/i]\n") + if lobby.chat_display: var scrollbar = lobby.chat_display.get_v_scroll_bar() if scrollbar: diff --git a/scenes/ui/lobby_room.gd b/scenes/ui/lobby_room.gd index aee3aa0..93822b7 100644 --- a/scenes/ui/lobby_room.gd +++ b/scenes/ui/lobby_room.gd @@ -153,8 +153,7 @@ func _on_room_joined(room_data: Dictionary) -> void: _on_enable_cycle_timer_changed(LobbyManager.enable_cycle_timer) _on_scarcity_mode_changed(LobbyManager.scarcity_mode) _on_sng_update() - _on_doors_update() - + if lobby.area_left_btn: lobby.area_left_btn.disabled = not is_host if lobby.area_right_btn: lobby.area_right_btn.disabled = not is_host if lobby.area_name_label: lobby.area_name_label.text = LobbyManager.get_selected_area() diff --git a/scenes/ui/quest_list_tab.gd b/scenes/ui/quest_list_tab.gd new file mode 100644 index 0000000..56d4fb3 --- /dev/null +++ b/scenes/ui/quest_list_tab.gd @@ -0,0 +1,25 @@ +extends Panel + +signal period_changed(period: String) + +@onready var _daily_btn: Button = %DailyTabBtn +@onready var _weekly_btn: Button = %WeeklyTabBtn +@onready var _monthly_btn: Button = %MonthlyTabBtn + +var _active := "daily" + + +func _ready() -> void: + _daily_btn.pressed.connect(_select.bind("daily")) + _weekly_btn.pressed.connect(_select.bind("weekly")) + _monthly_btn.pressed.connect(_select.bind("monthly")) + + +func _select(period: String) -> void: + if period == _active: + return + _active = period + _daily_btn.button_pressed = (period == "daily") + _weekly_btn.button_pressed = (period == "weekly") + _monthly_btn.button_pressed = (period == "monthly") + period_changed.emit(period) diff --git a/scenes/ui/quest_list_tab.gd.uid b/scenes/ui/quest_list_tab.gd.uid new file mode 100644 index 0000000..39e556f --- /dev/null +++ b/scenes/ui/quest_list_tab.gd.uid @@ -0,0 +1 @@ +uid://cas5sc40ampq1 diff --git a/scripts/bot_controller.gd b/scripts/bot_controller.gd index d1b8512..848b619 100644 --- a/scripts/bot_controller.gd +++ b/scripts/bot_controller.gd @@ -79,7 +79,6 @@ func _ready(): return # Initialize strategic planner - var BotStrategicPlanner = load("res://scripts/bot_strategic_planner.gd") strategic_planner = BotStrategicPlanner.new(actor, enhanced_gridmap) # Disable input processing for bots @@ -211,7 +210,7 @@ func _run_ai_tick(): return # Priority 0.5: Gauntlet (#075) — use Ghost powerup if boxed in - if await _try_activate_ghost(): + if _try_activate_ghost(): print("[BotController] Action Taken: Ghost (trapped)") return @@ -677,8 +676,6 @@ func _try_move() -> bool: else: print("[BotController] %s simple_move_to BLOCKED (others). Trying unstuck move." % actor.name) return await _try_unstuck_move() - - return false func _should_freeze_for_stop_n_go() -> bool: """Check if the bot should intentionally skip its turn during STOP phase outside of safe zones.""" @@ -909,12 +906,7 @@ func _handle_goal_completion(): if goals_cycle_manager: var time_remaining = goals_cycle_manager.get_time_remaining() goals_cycle_manager.on_goal_completed(actor, time_remaining) - - var powerup_manager = actor.get_node_or_null("PowerUpManager") - # if powerup_manager: - # powerup_manager.add_goal_completion_reward() - - + print("[BotController] %s COMPLETED GOAL!" % actor.name) func _wait_with_variance(base_delay: float): diff --git a/scripts/bot_strategic_planner.gd b/scripts/bot_strategic_planner.gd index 8658f01..aa3252b 100644 --- a/scripts/bot_strategic_planner.gd +++ b/scripts/bot_strategic_planner.gd @@ -204,9 +204,7 @@ func get_unneeded_tile_slot() -> int: """Find a slot containing a tile that is not needed for the goal.""" if not actor or actor.playerboard.size() == 0: return -1 - - var needed_tiles = get_tiles_needed() - + # Check center 3x3 for misplaced tiles for i in range(3): for j in range(3): @@ -252,7 +250,6 @@ func get_unneeded_tile_slot() -> int: var center_indices = [6, 7, 8, 11, 12, 13, 16, 17, 18] for i in range(actor.playerboard.size()): if not i in center_indices and actor.playerboard[i] != -1: - var item = actor.playerboard[i] # Only keep if we strictly need it and can't find it easily? # Actually, generally dump outer ring tiles to keep board clean # unless we are about to move it to a valid spot. @@ -263,8 +260,6 @@ func get_unneeded_tile_slot() -> int: return -1 - return -1 - func get_unneeded_tile_slot_panic() -> int: """Aggressively find ANY tile that doesn't match a goal perfectly.""" if not actor or actor.playerboard.size() == 0: @@ -439,33 +434,31 @@ func find_optimal_move_target() -> Vector2i: var time_left = gc_manager.get_global_time_remaining() if gc_manager else 999.0 var is_match_running = gc_manager.is_match_running() if gc_manager else false var is_late_game = is_sng and is_match_running and time_left > 0.0 and time_left <= 30.0 - - # 1. STOP N GO: Reach the finish line if goals are complete - if is_sng and main: - var sng_manager = main.get_node_or_null("StopNGoManager") - if sng_manager and sng_manager.is_mission_complete(actor.name.to_int()): - # MISSION COMPLETE: We CAN finish, but should we? - - if not is_late_game: - # CHAOS MODE: Allow falling through to target holo tiles, but we'll limit the target X later - # print("[BotStrategicPlanner] %s mission complete (Chaos Phase %.1fs). Roaming field." % [actor.name, time_left]) - pass - else: - # Late game: go to finish - var finish_target = Vector2i(21, actor.current_position.y) - - # Ensure finish_target is walkable - if not _is_valid_move_target(finish_target): - for dy in [1, -1, 2, -2]: - var alt = Vector2i(21, actor.current_position.y + dy) - if _is_valid_move_target(alt): - finish_target = alt - break - - print("[BotStrategicPlanner] %s mission complete (Late Game %.1fs)! Heading to finish: %s" % [actor.name, time_left, finish_target]) - return finish_target - var sng_manager = main.get_node_or_null("StopNGoManager") if main else null + + # 1. STOP N GO: Reach the finish line if goals are complete + if is_sng and sng_manager and sng_manager.is_mission_complete(actor.name.to_int()): + # MISSION COMPLETE: We CAN finish, but should we? + + if not is_late_game: + # CHAOS MODE: Allow falling through to target holo tiles, but we'll limit the target X later + # print("[BotStrategicPlanner] %s mission complete (Chaos Phase %.1fs). Roaming field." % [actor.name, time_left]) + pass + else: + # Late game: go to finish + var finish_target = Vector2i(21, actor.current_position.y) + + # Ensure finish_target is walkable + if not _is_valid_move_target(finish_target): + for dy in [1, -1, 2, -2]: + var alt = Vector2i(21, actor.current_position.y + dy) + if _is_valid_move_target(alt): + finish_target = alt + break + + print("[BotStrategicPlanner] %s mission complete (Late Game %.1fs)! Heading to finish: %s" % [actor.name, time_left, finish_target]) + return finish_target + var is_mission_complete = sng_manager.is_mission_complete(actor.name.to_int()) if sng_manager else false var needed_tiles = get_tiles_needed() diff --git a/scripts/generators/name_generator.gd b/scripts/generators/name_generator.gd index c26095d..30c955b 100644 --- a/scripts/generators/name_generator.gd +++ b/scripts/generators/name_generator.gd @@ -69,9 +69,9 @@ func generate_guest_name() -> String: _used_guest_names.append(fallback) return fallback -func release_guest_name(name: String) -> void: +func release_guest_name(guest_name: String) -> void: """Call when a guest disconnects to free up their name for reuse.""" - _used_guest_names.erase(name) + _used_guest_names.erase(guest_name) # ----------------------------------------------------------------------- # Bot name generation @@ -98,9 +98,9 @@ func generate_bot_name() -> String: _used_bot_names.append(candidate) return candidate -func release_bot_name(name: String) -> void: +func release_bot_name(bot_name: String) -> void: """Call when a bot slot is removed to free up its name.""" - _used_bot_names.erase(name) + _used_bot_names.erase(bot_name) func reset_all() -> void: """Reset both pools — useful on returning to main menu.""" diff --git a/scripts/managers/friend_manager.gd b/scripts/managers/friend_manager.gd index 37f9e81..8a19770 100644 --- a/scripts/managers/friend_manager.gd +++ b/scripts/managers/friend_manager.gd @@ -173,15 +173,15 @@ func send_lobby_invite(to_user_id: String, match_id: String) -> void: if result.get("success", false) == false: push_warning("[FriendManager] send_lobby_invite failed: " + str(result.get("error", ""))) -func _on_notification_received(notification) -> void: - print("[FriendManager] _on_notification_received: code=%d sender=%s" % [notification.code, notification.sender_id]) - match notification.code: +func _on_notification_received(notif) -> void: + print("[FriendManager] _on_notification_received: code=%d sender=%s" % [notif.code, notif.sender_id]) + match notif.code: NOTIF_LOBBY_INVITE: - var content = JSON.parse_string(notification.content) + var content = JSON.parse_string(notif.content) if content: var from_name: String = content.get("from_name", "Someone") var match_id: String = content.get("match_id", "") - emit_signal("lobby_invite_received", notification.sender_id, from_name, match_id) + emit_signal("lobby_invite_received", notif.sender_id, from_name, match_id) NOTIF_FRIEND_REQUEST: # Refresh friends list so the incoming request appears immediately print("[FriendManager] friend request notification received, reloading friends...") diff --git a/scripts/managers/gacha_manager.gd b/scripts/managers/gacha_manager.gd index 5920b6c..e7eae5e 100644 --- a/scripts/managers/gacha_manager.gd +++ b/scripts/managers/gacha_manager.gd @@ -32,11 +32,6 @@ func pull(banner_id: String, count: int) -> Array: push_error("[GachaManager] Not authenticated") return [] - var payload = JSON.stringify({ - "banner_id": banner_id, - "count": count - }) - var result = await BackendService.perform_gacha_pull(banner_id, count) if result.get("success", false) == false: diff --git a/scripts/managers/goals_cycle_manager.gd b/scripts/managers/goals_cycle_manager.gd index 854c020..d60a837 100644 --- a/scripts/managers/goals_cycle_manager.gd +++ b/scripts/managers/goals_cycle_manager.gd @@ -44,7 +44,7 @@ func initialize(main: Node): if LobbyManager: LobbyManager.enable_cycle_timer_changed.connect(_on_enable_cycle_timer_changed) -func _on_enable_cycle_timer_changed(enabled: bool): +func _on_enable_cycle_timer_changed(_enabled: bool): # If disabled mid-cycle, the timer will just freeze in _process # If enabled mid-cycle, it will resume pass @@ -69,9 +69,7 @@ func _process(delta): return # Skip countdown if timer is disabled - var lobby_manager = get_tree().get_root().get_node_or_null("Main/LobbyManager") # Note: LobbyManager is an Autoload, so we can access it directly via 'LobbyManager' - if LobbyManager and not LobbyManager.get_enable_cycle_timer(): # If timer is disabled, we just don't decrement. # But we still keep is_cycle_active = true so the phase is "active" (allowing actions) diff --git a/scripts/managers/player_manager.gd b/scripts/managers/player_manager.gd index 62d3c7a..305bc60 100644 --- a/scripts/managers/player_manager.gd +++ b/scripts/managers/player_manager.gd @@ -2,15 +2,12 @@ extends Node # PlayerManager - Handles player and bot lifecycle management -signal player_added(peer_id, player_node) signal player_removed(peer_id) -signal bot_created(bot_id, bot_node) -signal bot_removed(bot_id) var player_scene = preload("res://scenes/player.tscn") var connected_peer_ids = [] -func add_player_character(peer_id: int, position: Vector2i = Vector2i.ZERO) -> Node: +func add_player_character(peer_id: int, _position: Vector2i = Vector2i.ZERO) -> Node: var player_character = player_scene.instantiate() player_character.set_multiplayer_authority(peer_id) player_character.name = str(peer_id) diff --git a/scripts/nakama_manager.gd b/scripts/nakama_manager.gd index 5a25f62..6a16dc3 100644 --- a/scripts/nakama_manager.gd +++ b/scripts/nakama_manager.gd @@ -282,11 +282,6 @@ func list_matches_async(mode_filter: String = "") -> Array: # Batch-read room metadata from Nakama storage var meta_map: Dictionary = {} # match_id -> {host_name, game_mode, ...} if read_ids.size() > 0: - var storage_reads: Array = [] - for mid in read_ids: - # We don't know the owner_id, so list objects by collection+key - # Use list_storage_objects per match or batch read - pass # Read all match metas from our own storage (other users' objects are public read) for mid in read_ids: var list_result = await client.list_storage_objects_async(session, "match_meta", "", 100) diff --git a/scripts/services/backend_service.gd b/scripts/services/backend_service.gd index 254c8f4..f9650aa 100644 --- a/scripts/services/backend_service.gd +++ b/scripts/services/backend_service.gd @@ -87,13 +87,13 @@ func get_steamworks_manager() -> Node: return steamworks_manager ## Unified RPC with Retry and Error Mapping -func api_rpc_async(rpc_id: String, payload: String = "{}") -> Dictionary: +func api_rpc_async(p_rpc_id: String, payload: String = "{}") -> Dictionary: if not nakama_backend or not nakama_backend.client or not nakama_backend.session: return { "success": false, "error": ErrorCode.UNAUTHORIZED, "message": "Not authenticated" } var retries := 0 while retries <= MAX_RETRIES: - var result = await nakama_backend.client.rpc_async(nakama_backend.session, rpc_id, payload) + var result = await nakama_backend.client.rpc_async(nakama_backend.session, p_rpc_id, payload) # NakamaAPI.ApiRpc has is_exception() if result.is_exception(): diff --git a/scripts/ui/boot_screen.gd b/scripts/ui/boot_screen.gd index b9cf74a..572dfec 100644 --- a/scripts/ui/boot_screen.gd +++ b/scripts/ui/boot_screen.gd @@ -95,7 +95,7 @@ func _on_update_pressed() -> void: status_label.text = "Downloading update..." update_manager.download_update() -func _on_download_started(total_size: int) -> void: +func _on_download_started(_total_size: int) -> void: progress_bar.visible = true progress_label.visible = true progress_bar.value = 0 diff --git a/setting_bar_shader.gdshader b/setting_bar_shader.gdshader new file mode 100644 index 0000000..e0c34c8 --- /dev/null +++ b/setting_bar_shader.gdshader @@ -0,0 +1,20 @@ +shader_type canvas_item; + +// Masukkan ukuran Size panel Anda di Inspector (X dan Y) +uniform vec2 panel_size = vec2(550.0, 64.0); +// Atur radius kelengkungan dalam satuan pixel (misal: 12.0 atau 16.0) +uniform float corner_radius : hint_range(0.0, 100.0) = 8.0; + +void fragment() { + vec2 center = panel_size * 0.5; + vec2 half_size = panel_size * 0.5 - vec2(corner_radius); + vec2 p = UV * panel_size - center; + vec2 d = abs(p) - half_size; + float dist = length(max(d, 0.0)) + min(max(d.x, d.y), 0.0) - corner_radius; + + // Mengambil warna asli dari GradientTexture2D Anda + vec4 tex_color = texture(TEXTURE, UV); + float alpha_mask = 1.0 - step(0.0, dist); + + COLOR = vec4(tex_color.rgb, tex_color.a * alpha_mask); +} \ No newline at end of file diff --git a/setting_bar_shader.gdshader.uid b/setting_bar_shader.gdshader.uid new file mode 100644 index 0000000..9063b49 --- /dev/null +++ b/setting_bar_shader.gdshader.uid @@ -0,0 +1 @@ +uid://bx46eyi72i6ak diff --git a/wiki/Architecture-Client.md b/wiki/Architecture-Client.md index 6716623..669b408 100644 --- a/wiki/Architecture-Client.md +++ b/wiki/Architecture-Client.md @@ -4,7 +4,7 @@ [Back to Home](./Home) -Complete per-function reference for the Godot 4.7 client codebase. Every script, signal, autoload dependency, and cross-file relationship documented. +Complete per-function reference for the Godot 4.6.3 client codebase. Every script, signal, autoload dependency, and cross-file relationship documented. [Back to top](#top) @@ -93,7 +93,7 @@ Complete per-function reference for the Godot 4.7 client codebase. Every script, ``` /home/dev/tekton/ - project.godot -- Godot 4.7 project file + project.godot -- Godot 4.6.3 project file scripts/ main.gd -- (NOT USED; logic lives in scenes/main.gd) nakama_manager.gd -- Nakama network layer (autoload) diff --git a/wiki/patch_release_workflow.md b/wiki/patch_release_workflow.md index 88688a9..721e8a2 100644 --- a/wiki/patch_release_workflow.md +++ b/wiki/patch_release_workflow.md @@ -90,7 +90,7 @@ curl -X POST "http://52.74.133.55:3000/api/v1/repos/danchie/tekton/actions/workf ### What the CI does (deploy_patch.yml) 1. **Checkout** — `git clone --depth 1` from `experimental` branch (shallow = fast). -2. **Setup Godot** — Uses cached `/cache/godot_4.7` binary. Downloads only if missing (140MB, cached forever). +2. **Setup Godot** — Uses cached `/cache/godot_4.6.3` binary. Downloads only if missing (140MB, cached forever). 3. **Generate version.json** — Runs `tools/generate_version_json.py --skip-changelog`. Reads version from `project.godot`, bumps patch number, writes `assets/data/version.json` with the new release entry including `pck_url` pointing to Gitea raw endpoint. 4. **Export patch PCK** — `godot --headless --export-pack "Windows Desktop" build/patch.pck`. No export templates needed — `--export-pack` only packs resources, not binaries. Output ~10-15MB. 5. **Push to patches branch** — Force-pushes `patch.pck` + `version.json` to the `patches` branch of the repo. @@ -249,7 +249,7 @@ Root cause: `ubuntu-latest` container doesn't have `zip` pre-installed. The inst ### Godot export fails silently (`|| true`) The `|| true` on export commands means a failed Godot export still shows step as success. Check: -- Is `godot_4.7` cached at `/cache/`? +- Is `godot_4.6.3` cached at `/cache/`? - Does the export preset name match exactly? E.g. `"Windows Desktop"` must match `export_presets.cfg`. - Is `addons/godotsteam/libgodotsteam*` present? Missing DLLs cause Godot to exit 1.