From be5960dba86fe7b8e05b171cc2a73756823a76a2 Mon Sep 17 00:00:00 2001 From: Sofia Date: Thu, 30 Jul 2026 01:07:23 +0300 Subject: [PATCH] Add support for map icons --- godot/maps/default_map.tres | 2 ++ godot/maps/default_map/icon.png | Bin 0 -> 2815 bytes godot/maps/default_map/icon.png.import | 41 +++++++++++++++++++++++++ godot/scenes/lobby.tscn | 10 +++--- rust/src/map_resource.rs | 7 ++++- rust/src/ui/lobby.rs | 6 +++- 6 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 godot/maps/default_map/icon.png create mode 100644 godot/maps/default_map/icon.png.import diff --git a/godot/maps/default_map.tres b/godot/maps/default_map.tres index ef685fb..3d5df88 100644 --- a/godot/maps/default_map.tres +++ b/godot/maps/default_map.tres @@ -1,5 +1,6 @@ [gd_resource type="MapResource" format=3 uid="uid://c7n1tacc7a73t"] +[ext_resource type="Texture2D" uid="uid://bkugrxwqmw3lw" path="res://maps/default_map/icon.png" id="1_an43b"] [ext_resource type="AudioStream" uid="uid://d3tpaim4ia0xr" path="res://raw_assets/music/n-Dimensions (Main Theme - Retro Ver.mp3" id="1_bjd18"] [ext_resource type="PackedScene" uid="uid://7iooamjot1tg" path="res://maps/default_map/map0.tscn" id="1_k5804"] [ext_resource type="AudioStream" uid="uid://dkgm7o8u0w550" path="res://raw_assets/music/Red Doors 2.0 (GameClosure Edition).mp3" id="2_an43b"] @@ -12,3 +13,4 @@ name = "Default Map" scene = ExtResource("1_k5804") teams = Array[TeamResource]([ExtResource("2_kkbjr"), ExtResource("3_o48fm")]) music = Array[AudioStream]([ExtResource("1_bjd18"), ExtResource("2_an43b"), ExtResource("3_e1bs0")]) +icon = ExtResource("1_an43b") diff --git a/godot/maps/default_map/icon.png b/godot/maps/default_map/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df5686f495be82a6aa730502b54d6f510e67eddf GIT binary patch literal 2815 zcmVz@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;yMf82|tQC4;8`000SaNLh0L01FcU01FcV0GgZ_00007 zbV*G`2kHkM76vxz6D-RB0187%L_t(|+O1pJlH9lv%p$;^>6wvNE7{=)hr_Y{0e{x| zNB7a6VLSF^Bi1^myLqJ_0OBlOJtIma03OZEI#5-h}mPB2VXyKXR&D*R2ql~Z^(K_mI!FT+I-*Cef4GhjW!#?l< z1_mcQ;2F;tF@PWp46K)z&Gt4xN!t-#1ArL(b4HBl(O0CzzWAPlG=g4vM~n`Ja&&D0 zU|?~A_~QdcoWm6(M+_KzZ}3~%9$-J>$G{visU{m!NiS~%{7VvoF}Vku_s&w~otq=0 zLF0u6q4yNp7SGsE{G7#WOs6-cy>x!Uq~DhX3Iw$oBWb5oTNbrtdqLsf>o#XItIwyi zgnhw>!g_L+!k(wOEG?_1+f;lkr zt^piNXEYXI^49EtCXB%yjfpFY$LORC8(6f7%T1kc?uLW=m3*Et1#xk_K|=%M5!z@Y z^spJ!y_VG079r)pa*#cG4D-B>9=)XVdJlnwh+>W@tlvjs;$~oBsgYC?H1{1Y0|Ps8 z%G5en&>Y;DN|9?)EVmvB+#-nS(6P(HmH}f3x?G^;_H9B-i<6^6+CWW7j!9aE76wB` zl7WF;lI4UE12f2rQeFn%E6}?Hej2k~aPeW-D_(KN8Bch|6P~ij^W-DXKm=0_=?fBC zSee@c3@k>B9=<--287Md&Cbca;t3}_;1Q2_!ZTj* z0Ud5=&?tZ-*x6C0xdbbpHDV+x6QA=50|R^GHTTxlepH-anIz@u>kQJxlW_)~!&@hT z0RvjJ7;wTvFq2tZ2zsd&5}h~N%+X0g#O&5wKt>2Aj1a&_r(~SXY=^F%#yBlbb7PSm zrr}JC936ZrxqZ|O=ZxB5PN&M#WDZTNnpvbI%-R5!8N!4~q$;x!gzecwOE8zxOL~=0 zgP;;-&Vt5CJi5_r88#`dg z;KyT1xSC~6W!%rYY{??cm^k6v^c5XCd}==9xp~e!^!(%jBfju= zeBl>-kUzk{RGEkUS#oBnc25y-mFt0U;NL7WhCE%rY;yMErvpv=PTHMfq zbTv2=NQn8Qs}v2m@rqtLoN-p`4s)>sMKR2&v*hGR(JzT(?89GcHTe26*9@3hyC%UA z^qGIeulO&7uduMef>X(N=+L6YU+`BL+NvnyOqNwSql6cZEHpyu`%*Fhi3DUnys?Z` zl_ZIZlrzrw34g~|`HEM5#|=01>|lIse#RMpl0V}SkIQu?rr~v6DblJ$i-d@FttVg) z=+xiOD?zfdz%d8EKj0&NkdI*+!eU8G@8?S?5{9MFxwz=DR3a1gTAQs2stY}6^nAldUIvHd(uRo0JXogPj5Bq2pxMUu*COQx}w8w;4T+~)z=TGlG0!Mm?3&ui)_Q&sS?vPCm0yuJXb2D7$drJ!t9j&wM7>WA$TpuOL|X~p z_sI>pn+&@xZP|Wx?ooExWfrnRYHG{G&hHPXzFs6isxWt_>*C&5zkht`+S;+DlWDzf zEGtCVlFrT7;=Y%ZLoHeVLTq6yexoFXbK`2_mO`*=k`zTV?gb%>8m32dYk^N1A4)|A zLZSnua#a#xWepaO%1;Wd+=$3lB08yNhqBTqRj@4OinNsLUNsR`1;M3PUjcM4;EiSO zG>%U}F}3eP-a-Ck_NACsz_r!St^nCm>qDS+lT(~!ENW0h2>_HnV~$Xg5H*1Nq%Flf zv`)}H1RS`FKAVtS8%pg+Ya0T|vQm3L@Eu=iycx7?n4;wKn{YLiuc}&t(g(;Y@I6=V zC*&xFvM}Q$*6o3b%<^9|57)JC1HKa|?*J{k^sy+=AylDbV8HCU*mrxYd^&_Jzp(Ek zB{^UeS~+Xa$5Kmb?g?QeVJTR)YF&-GN-wFfES9Qdr{tH6ND+iA$AzLLN?cEhY7O9# z*VBL>0lT$V?q;4EHtPJoog*d5&~bHtZ{WvCk^rb)_2H`1Q<9;gV!CSQNsFS|vh1<% zqhPlLAX}4PLPjzLx=4^a0f!%bUy%2bkeh{00@d0z!|X<(*MK8GbWBEXBx&E1qqAd} zKABXa75Hf!Alp(`r!`%Y`~1Lhdh}nZr&W+u@*^vb(r$a*z0;b!LD7!_*W2mh%lt7! zsSRn##IFmiyu=++zhCM10^Xi?mOQ>jggpZOep}Z<>J<{?Z6q)$%A}g05n;8(V{o4m z?=l14@q{FQ-zRlZogC-*Mwb7tnyntgd!()95%=5u(mcOUE9%uq65$j1oFK-EPz_#} zRoyC!6z}i+!1&4AFGtY!Fr!N1_liv-Ua+x&E}BGD^qK^PLZa?+TBYOq>d3F{tu1TWQ*S~ RF}45z002ovPDHLkV1h0dIJN)) literal 0 HcmV?d00001 diff --git a/godot/maps/default_map/icon.png.import b/godot/maps/default_map/icon.png.import new file mode 100644 index 0000000..7045a3d --- /dev/null +++ b/godot/maps/default_map/icon.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bkugrxwqmw3lw" +path.s3tc="res://.godot/imported/icon.png-e76ac314614d31fd9b0de52e21ac82c0.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://maps/default_map/icon.png" +dest_files=["res://.godot/imported/icon.png-e76ac314614d31fd9b0de52e21ac82c0.s3tc.ctex"] + +[params] + +compress/mode=2 +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=true +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=0 diff --git a/godot/scenes/lobby.tscn b/godot/scenes/lobby.tscn index e623fd5..2dc2234 100644 --- a/godot/scenes/lobby.tscn +++ b/godot/scenes/lobby.tscn @@ -1441,18 +1441,20 @@ layout_mode = 2 metadata/_edit_lock_ = true [node name="v_box_container2" type="VBoxContainer" parent="lobby" unique_id=653902328] +propagate_maximum_size = false layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 anchor_right = 1.0 -offset_left = -835.0 -offset_top = 111.0 -offset_right = -727.0 -offset_bottom = 169.0 +offset_left = -857.0 +offset_top = 513.0 +offset_right = -557.0 +offset_bottom = 613.0 grow_horizontal = 0 [node name="option_button" type="OptionButton" parent="lobby/v_box_container2" unique_id=426342653] layout_mode = 2 +theme_override_constants/icon_max_width = 100 metadata/_edit_lock_ = true [node name="options_panel" type="Panel" parent="lobby" unique_id=1194589850] diff --git a/rust/src/map_resource.rs b/rust/src/map_resource.rs index 89b0038..9fd7802 100644 --- a/rust/src/map_resource.rs +++ b/rust/src/map_resource.rs @@ -1,4 +1,7 @@ -use godot::{classes::AudioStream, prelude::*}; +use godot::{ + classes::{AudioStream, CompressedTexture2D}, + prelude::*, +}; use crate::team_resource::TeamResource; @@ -13,6 +16,8 @@ pub struct MapResource { pub teams: Array>, #[export] pub music: Array>, + #[export] + pub icon: Option>, base: Base, } diff --git a/rust/src/ui/lobby.rs b/rust/src/ui/lobby.rs index 168c319..b75a7eb 100644 --- a/rust/src/ui/lobby.rs +++ b/rust/src/ui/lobby.rs @@ -98,7 +98,11 @@ impl IPanel for LobbyPanel { if let Some(map_selection) = &mut self.map_selection { let prev_selection = game.bind().selected_map_idx as i32; for map in game.bind().maps.iter_shared() { - map_selection.add_item(&map.bind().name); + if let Some(icon) = &map.bind().icon { + map_selection.add_icon_item(icon, &map.bind().name); + } else { + map_selection.add_item(&map.bind().name); + } } map_selection.select(prev_selection); if is_host {