feat: adding the skin_shader_generator, and gacha base barebone

This commit is contained in:
2026-04-24 00:17:00 +08:00
parent 16c82a48b8
commit 7e4b707e84
196 changed files with 4883 additions and 200 deletions
+2
View File
@@ -7,4 +7,6 @@ layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_editor")
+520
View File
@@ -0,0 +1,520 @@
[gd_scene format=3 uid="uid://bfn70q6drs4oy"]
[ext_resource type="Script" uid="uid://dbcyurv4m7mka" path="res://scripts/tools/skin_shader_generator.gd" id="1_script"]
[ext_resource type="Texture2D" uid="uid://c1i00chwkmxtw" path="res://assets/characters/Oldpop_oldpop-tex.png" id="2_ac8h2"]
[node name="SkinShaderGenerator" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_script")
[node name="MainHSplit" type="HSplitContainer" parent="."]
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
split_offsets = PackedInt32Array(480)
split_offset = 480
[node name="UVEditorVBox" type="VBoxContainer" parent="MainHSplit"]
custom_minimum_size = Vector2(480, 0)
layout_mode = 2
[node name="UVPanel" type="PanelContainer" parent="MainHSplit/UVEditorVBox"]
layout_mode = 2
size_flags_vertical = 3
[node name="UVPreview" type="TextureRect" parent="MainHSplit/UVEditorVBox/UVPanel"]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("2_ac8h2")
expand_mode = 1
stretch_mode = 5
[node name="UVOverlay" type="Control" parent="MainHSplit/UVEditorVBox/UVPanel"]
unique_name_in_owner = true
layout_mode = 2
[node name="UVToolsHBox" type="HBoxContainer" parent="MainHSplit/UVEditorVBox"]
custom_minimum_size = Vector2(0, 28)
layout_mode = 2
[node name="ShowAllUVs" type="CheckBox" parent="MainHSplit/UVEditorVBox/UVToolsHBox"]
unique_name_in_owner = true
layout_mode = 2
text = "Show All UVs"
[node name="FlipUV" type="CheckBox" parent="MainHSplit/UVEditorVBox/UVToolsHBox"]
unique_name_in_owner = true
layout_mode = 2
text = "Flip UV"
[node name="HideRef" type="CheckBox" parent="MainHSplit/UVEditorVBox/UVToolsHBox"]
unique_name_in_owner = true
layout_mode = 2
text = "Hide Ref"
[node name="RightHSplit" type="HSplitContainer" parent="MainHSplit"]
layout_mode = 2
split_offsets = PackedInt32Array(400)
split_offset = 400
[node name="PreviewVBox" type="VBoxContainer" parent="MainHSplit/RightHSplit"]
layout_mode = 2
[node name="ViewportPanel" type="PanelContainer" parent="MainHSplit/RightHSplit/PreviewVBox"]
layout_mode = 2
size_flags_vertical = 3
[node name="ViewportContainer" type="SubViewportContainer" parent="MainHSplit/RightHSplit/PreviewVBox/ViewportPanel"]
layout_mode = 2
stretch = true
[node name="Viewport3D" type="SubViewport" parent="MainHSplit/RightHSplit/PreviewVBox/ViewportPanel/ViewportContainer"]
unique_name_in_owner = true
own_world_3d = true
handle_input_locally = false
msaa_3d = 2
size = Vector2i(400, 646)
render_target_update_mode = 4
[node name="ZoomHBox" type="HBoxContainer" parent="MainHSplit/RightHSplit/PreviewVBox"]
layout_mode = 2
[node name="ZoomMinus" type="Button" parent="MainHSplit/RightHSplit/PreviewVBox/ZoomHBox"]
unique_name_in_owner = true
layout_mode = 2
text = " "
[node name="ZoomSlider" type="HSlider" parent="MainHSplit/RightHSplit/PreviewVBox/ZoomHBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 1
min_value = 0.3
max_value = 10.0
step = 0.1
value = 1.8
[node name="ZoomPlus" type="Button" parent="MainHSplit/RightHSplit/PreviewVBox/ZoomHBox"]
unique_name_in_owner = true
layout_mode = 2
text = " + "
[node name="InspectedLabel" type="Label" parent="MainHSplit/RightHSplit/PreviewVBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 0, 1)
horizontal_alignment = 1
[node name="TabContainer" type="TabContainer" parent="MainHSplit/RightHSplit"]
unique_name_in_owner = true
custom_minimum_size = Vector2(360, 0)
layout_mode = 2
current_tab = 1
[node name="Scene Tree" type="ScrollContainer" parent="MainHSplit/RightHSplit/TabContainer"]
visible = false
layout_mode = 2
metadata/_tab_index = 0
[node name="MeshList" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Scene Tree"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
[node name="Inspector" type="ScrollContainer" parent="MainHSplit/RightHSplit/TabContainer"]
layout_mode = 2
horizontal_scroll_mode = 0
metadata/_tab_index = 1
[node name="PIPanel" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 12
[node name="Margin" type="MarginContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel"]
layout_mode = 2
theme_override_constants/margin_left = 6
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 6
theme_override_constants/margin_bottom = 6
[node name="VBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin"]
layout_mode = 2
theme_override_constants/separation = 12
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox"]
layout_mode = 2
theme_override_colors/font_color = Color(0, 1, 1, 1)
text = "▼ Part Properties"
[node name="PIName" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 0, 1)
text = "(no part selected)"
[node name="Grid" type="GridContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox"]
layout_mode = 2
columns = 2
[node name="Label4" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
layout_mode = 2
text = "Ref UV Img:"
[node name="PIRefHBox" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
layout_mode = 2
[node name="PIRefBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid/PIRefHBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Default"
text_overrun_behavior = 3
[node name="PIRefClear" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid/PIRefHBox"]
unique_name_in_owner = true
layout_mode = 2
text = "✕"
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
layout_mode = 2
text = "Category:"
[node name="PICategory" type="OptionButton" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
[node name="Label2" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
layout_mode = 2
text = "Fill Color:"
[node name="PIColor" type="ColorPickerButton" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
unique_name_in_owner = true
custom_minimum_size = Vector2(60, 0)
layout_mode = 2
color = Color(1, 1, 1, 1)
[node name="Label3" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
layout_mode = 2
text = "Sticker Img:"
[node name="PIImageHBox" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid"]
layout_mode = 2
[node name="PIImageBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid/PIImageHBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "None"
text_overrun_behavior = 3
[node name="PIImageClear" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/Grid/PIImageHBox"]
unique_name_in_owner = true
layout_mode = 2
text = "✕"
[node name="TransformVBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 8
[node name="HBox" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox"]
layout_mode = 2
text = "Pos X:"
[node name="PIPosX" type="HSlider" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
min_value = -1.0
max_value = 2.0
step = 0.01
[node name="HBox2" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox2"]
layout_mode = 2
text = "Pos Y:"
[node name="PIPosY" type="HSlider" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox2"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
min_value = -1.0
max_value = 2.0
step = 0.01
[node name="HBox3" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox3"]
layout_mode = 2
text = "Scale:"
[node name="PIScale" type="HSlider" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox3"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
min_value = 0.01
max_value = 5.0
step = 0.01
value = 1.0
[node name="HBox4" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox4"]
layout_mode = 2
text = "Rotate:"
[node name="PIRot" type="HSlider" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/TransformVBox/HBox4"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
min_value = -180.0
max_value = 180.0
[node name="HSeparator" type="HSeparator" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox"]
layout_mode = 2
[node name="MaskSection" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox"]
layout_mode = 2
theme_override_constants/separation = 8
[node name="HBox" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection"]
layout_mode = 2
[node name="Label2" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection/HBox"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_colors/font_color = Color(1, 1, 0, 1)
text = "UV Masks (isolate regions):"
[node name="AddMaskBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection/HBox"]
unique_name_in_owner = true
layout_mode = 2
text = "+ Add"
[node name="MaskList" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection"]
unique_name_in_owner = true
layout_mode = 2
[node name="DrawingToolbar" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection"]
unique_name_in_owner = true
visible = false
layout_mode = 2
[node name="DrawStatus" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection/DrawingToolbar"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Editing Mask A..."
[node name="FinishBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection/DrawingToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "✓ Done"
[node name="ClearBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Inspector/PIPanel/Margin/VBox/MaskSection/DrawingToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "✕ Clear"
[node name="Settings" type="ScrollContainer" parent="MainHSplit/RightHSplit/TabContainer"]
visible = false
layout_mode = 2
horizontal_scroll_mode = 0
metadata/_tab_index = 2
[node name="VBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 10
[node name="Margin" type="MarginContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox"]
layout_mode = 2
theme_override_constants/margin_left = 6
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 6
theme_override_constants/margin_bottom = 6
[node name="VBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin"]
layout_mode = 2
theme_override_constants/separation = 12
[node name="CharBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/CharBox"]
layout_mode = 2
theme_override_colors/font_color = Color(0.5, 1, 1, 1)
text = "Active Character:"
[node name="CharacterOpt" type="OptionButton" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/CharBox"]
unique_name_in_owner = true
layout_mode = 2
[node name="WireBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/WireBox"]
layout_mode = 2
theme_override_colors/font_color = Color(0.5, 1, 1, 1)
text = "Wireframe Opacity:"
[node name="WireOpacity" type="HSlider" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/WireBox"]
unique_name_in_owner = true
layout_mode = 2
max_value = 1.0
step = 0.05
value = 0.07
[node name="HBox" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/WireBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/WireBox/HBox"]
layout_mode = 2
text = "Color:"
[node name="WireColor" type="OptionButton" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/WireBox/HBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
selected = 0
[node name="HSeparator" type="HSeparator" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox"]
layout_mode = 2
[node name="PresetBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/PresetBox"]
layout_mode = 2
theme_override_colors/font_color = Color(0.5, 1, 1, 1)
text = "Session Presets:"
[node name="HBox" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/PresetBox"]
layout_mode = 2
[node name="SavePresetBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/PresetBox/HBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "💾 Save JSON"
[node name="LoadPresetBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox/PresetBox/HBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "📂 Load JSON"
[node name="Label2" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Settings/VBox/Margin/VBox"]
layout_mode = 2
theme_override_colors/font_color = Color(0.5, 0.5, 0.5, 1)
theme_override_font_sizes/font_size = 12
text = "Workflow:
1. Click mesh in Scene Tree.
2. Set Category & Color in Inspector.
3. Add Sticker/Decal if needed.
4. Hit GENERATE to bake."
autowrap_mode = 3
[node name="Export" type="ScrollContainer" parent="MainHSplit/RightHSplit/TabContainer"]
visible = false
layout_mode = 2
horizontal_scroll_mode = 0
metadata/_tab_index = 3
[node name="ExportVBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Export"]
layout_mode = 2
size_flags_horizontal = 3
[node name="Margin" type="MarginContainer" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox"]
layout_mode = 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="VBox" type="VBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin"]
layout_mode = 2
theme_override_constants/separation = 12
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox"]
layout_mode = 2
theme_override_colors/font_color = Color(0, 1, 0.5, 1)
text = "▼ Export Assets"
[node name="PrefixLabel" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0, 1, 0.5, 1)
theme_override_font_sizes/font_size = 13
text = "oldpop_skin_"
horizontal_alignment = 2
[node name="HBoxContainer" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox/HBoxContainer"]
layout_mode = 2
text = "Name:"
[node name="ExportName" type="LineEdit" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "custom_name"
[node name="HBoxContainer2" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox/HBoxContainer2"]
layout_mode = 2
text = "Target Folder:"
[node name="ExportFolder" type="OptionButton" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox/HBoxContainer2"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
[node name="HBoxContainer3" type="HBoxContainer" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox"]
layout_mode = 2
[node name="Label" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox/HBoxContainer3"]
layout_mode = 2
text = "Mode:"
[node name="ExportMode" type="OptionButton" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox/HBoxContainer3"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
[node name="GenerateBtn" type="Button" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
text = "🚀 GENERATE & EXPORT"
[node name="StatusLabel" type="Label" parent="MainHSplit/RightHSplit/TabContainer/Export/ExportVBox/Margin/VBox"]
unique_name_in_owner = true
layout_mode = 2
horizontal_alignment = 1
+95
View File
@@ -0,0 +1,95 @@
[gd_scene format=3 uid="uid://frag_craft_panel_001"]
[ext_resource type="Script" path="res://scripts/ui/fragment_craft_panel.gd" id="1"]
[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2"]
[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="3_font"]
[node name="FragmentCraftPanel" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2")
script = ExtResource("1")
[node name="Background" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.04, 0.04, 0.08, 0.96)
[node name="MainMargin" type="MarginContainer" parent="."]
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 = 30
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 30
theme_override_constants/margin_bottom = 20
[node name="MainVBox" type="VBoxContainer" parent="MainMargin"]
layout_mode = 2
theme_override_constants/separation = 14
[node name="TopBar" type="HBoxContainer" parent="MainMargin/MainVBox"]
layout_mode = 2
theme_override_constants/separation = 12
[node name="BackBtn" type="Button" parent="MainMargin/MainVBox/TopBar"]
unique_name_in_owner = true
custom_minimum_size = Vector2(44, 44)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 22
text = "←"
[node name="TitleLabel" type="Label" parent="MainMargin/MainVBox/TopBar"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_colors/font_color = Color(0.4, 1.0, 0.7, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 24
text = "🧩 Fragment Craft"
[node name="FragBalance" type="Label" parent="MainMargin/MainVBox/TopBar"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.85, 0.85, 0.85, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 14
text = "⬜ ×0 🟩 ×0 🟦 ×0"
[node name="SubTitle" type="Label" parent="MainMargin/MainVBox"]
layout_mode = 2
theme_override_colors/font_color = Color(0.65, 0.65, 0.65, 1)
theme_override_font_sizes/font_size = 13
text = "Collect Common, Uncommon, and Rare fragments from gacha pulls to craft exclusive skins."
[node name="HSep" type="HSeparator" parent="MainMargin/MainVBox"]
layout_mode = 2
[node name="ScrollContainer" type="ScrollContainer" parent="MainMargin/MainVBox"]
layout_mode = 2
size_flags_vertical = 3
horizontal_scroll_mode = 0
[node name="RecipeList" type="VBoxContainer" parent="MainMargin/MainVBox/ScrollContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/separation = 10
[node name="StatusLabel" type="Label" parent="MainMargin/MainVBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_font_sizes/font_size = 14
horizontal_alignment = 1
text = ""
+267
View File
@@ -0,0 +1,267 @@
[gd_scene format=3 uid="uid://gacha_panel_001"]
[ext_resource type="Script" path="res://scripts/ui/gacha_panel.gd" id="1"]
[ext_resource type="Theme" uid="uid://da337sh5qxi0s" path="res://assets/themes/ui_theme.tres" id="2"]
[ext_resource type="FontFile" uid="uid://xnjx058n4tsw" path="res://assets/fonts/Nougat-ExtraBlack.ttf" id="3_font"]
[node name="GachaPanel" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2")
script = ExtResource("1")
[node name="Background" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.04, 0.04, 0.08, 0.95)
[node name="MainMargin" type="MarginContainer" parent="."]
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 = 28
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 28
theme_override_constants/margin_bottom = 20
[node name="MainVBox" type="VBoxContainer" parent="MainMargin"]
layout_mode = 2
theme_override_constants/separation = 14
[node name="TopBar" type="HBoxContainer" parent="MainMargin/MainVBox"]
layout_mode = 2
theme_override_constants/separation = 10
[node name="BackBtn" type="Button" parent="MainMargin/MainVBox/TopBar"]
unique_name_in_owner = true
custom_minimum_size = Vector2(44, 44)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 22
text = "←"
[node name="TitleLabel" type="Label" parent="MainMargin/MainVBox/TopBar"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_colors/font_color = Color(1.0, 0.85, 0.25, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 26
text = "✨ Gacha"
[node name="CraftBtn" type="Button" parent="MainMargin/MainVBox/TopBar"]
unique_name_in_owner = true
custom_minimum_size = Vector2(130, 40)
layout_mode = 2
theme_override_colors/font_color = Color(0.4, 1.0, 0.7, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 14
text = "🧩 Fragment Craft"
[node name="BannerTabs" type="HBoxContainer" parent="MainMargin/MainVBox"]
layout_mode = 2
theme_override_constants/separation = 12
alignment = 1
[node name="StarTabBtn" type="Button" parent="MainMargin/MainVBox/BannerTabs"]
unique_name_in_owner = true
custom_minimum_size = Vector2(160, 48)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 18
text = "✦ Star Banner"
[node name="GoldTabBtn" type="Button" parent="MainMargin/MainVBox/BannerTabs"]
unique_name_in_owner = true
custom_minimum_size = Vector2(160, 48)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 18
text = "▤ Gold Banner"
[node name="ContentHBox" type="HBoxContainer" parent="MainMargin/MainVBox"]
layout_mode = 2
size_flags_vertical = 3
theme_override_constants/separation = 20
[node name="LeftPanel" type="PanelContainer" parent="MainMargin/MainVBox/ContentHBox"]
custom_minimum_size = Vector2(320, 0)
layout_mode = 2
[node name="LeftMargin" type="MarginContainer" parent="MainMargin/MainVBox/ContentHBox/LeftPanel"]
layout_mode = 2
theme_override_constants/margin_left = 18
theme_override_constants/margin_top = 18
theme_override_constants/margin_right = 18
theme_override_constants/margin_bottom = 18
[node name="LeftVBox" type="VBoxContainer" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin"]
layout_mode = 2
theme_override_constants/separation = 14
[node name="BannerLabel" type="Label" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(1.0, 0.85, 0.25, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 22
text = "Star Banner"
horizontal_alignment = 1
[node name="BalanceRow" type="HBoxContainer" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox"]
layout_mode = 2
theme_override_constants/separation = 8
alignment = 1
[node name="BalanceLbl" type="Label" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox/BalanceRow"]
layout_mode = 2
theme_override_colors/font_color = Color(0.7, 0.7, 0.7)
theme_override_font_sizes/font_size = 13
text = "Balance:"
[node name="BalanceLabel" type="Label" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox/BalanceRow"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.9, 0.75, 0.2, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 18
text = "✦ 0"
[node name="PityLabel" type="Label" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.6, 0.6, 0.9, 1)
theme_override_font_sizes/font_size = 13
text = "Pity: 0 / 90"
horizontal_alignment = 1
[node name="HSep1" type="HSeparator" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox"]
layout_mode = 2
[node name="Pull1Row" type="HBoxContainer" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox"]
layout_mode = 2
theme_override_constants/separation = 8
[node name="Pull1Btn" type="Button" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox/Pull1Row"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
size_flags_horizontal = 3
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 16
text = "1× Pull"
[node name="Cost1Label" type="Label" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox/Pull1Row"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.9, 0.75, 0.2, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 14
text = "✦ 160"
[node name="Pull10Row" type="HBoxContainer" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox"]
layout_mode = 2
theme_override_constants/separation = 8
[node name="Pull10Btn" type="Button" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox/Pull10Row"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
size_flags_horizontal = 3
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 16
text = "10× Pull"
[node name="Cost10Label" type="Label" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox/Pull10Row"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.9, 0.75, 0.2, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 14
text = "✦ 1440"
[node name="StatusLabel" type="Label" parent="MainMargin/MainVBox/ContentHBox/LeftPanel/LeftMargin/LeftVBox"]
unique_name_in_owner = true
layout_mode = 2
theme_override_colors/font_color = Color(0.9, 0.4, 0.4, 1)
theme_override_font_sizes/font_size = 13
horizontal_alignment = 1
text = ""
[node name="RightPanel" type="PanelContainer" parent="MainMargin/MainVBox/ContentHBox"]
layout_mode = 2
size_flags_horizontal = 3
[node name="RightMargin" type="MarginContainer" parent="MainMargin/MainVBox/ContentHBox/RightPanel"]
layout_mode = 2
theme_override_constants/margin_left = 16
theme_override_constants/margin_top = 16
theme_override_constants/margin_right = 16
theme_override_constants/margin_bottom = 16
[node name="RatesLabel" type="RichTextLabel" parent="MainMargin/MainVBox/ContentHBox/RightPanel/RightMargin"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_font_sizes/font_size = 13
text = ""
fit_content = true
[node name="ResultPanel" type="PanelContainer" parent="."]
unique_name_in_owner = true
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -450.0
offset_top = -260.0
offset_right = 450.0
offset_bottom = 260.0
grow_horizontal = 2
grow_vertical = 2
[node name="ResultVBox" type="VBoxContainer" parent="ResultPanel"]
layout_mode = 2
theme_override_constants/separation = 10
[node name="ResultTitle" type="Label" parent="ResultPanel/ResultVBox"]
layout_mode = 2
theme_override_colors/font_color = Color(1, 0.9, 0.3, 1)
theme_override_fonts/font = ExtResource("3_font")
theme_override_font_sizes/font_size = 20
text = "Pull Results"
horizontal_alignment = 1
[node name="ScrollContainer" type="ScrollContainer" parent="ResultPanel/ResultVBox"]
layout_mode = 2
size_flags_vertical = 3
custom_minimum_size = Vector2(0, 160)
[node name="ResultGrid" type="GridContainer" parent="ResultPanel/ResultVBox/ScrollContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
theme_override_constants/h_separation = 8
theme_override_constants/v_separation = 8
columns = 5
[node name="CloseResultBtn" type="Button" parent="ResultPanel/ResultVBox"]
unique_name_in_owner = true
custom_minimum_size = Vector2(0, 38)
layout_mode = 2
theme_override_fonts/font = ExtResource("3_font")
text = "Close"
+7
View File
@@ -316,6 +316,13 @@ layout_mode = 2
theme_override_font_sizes/font_size = 28
text = "💎"
[node name="FragTabBtn" type="Button" parent="MainMargin/MainHBox/CenterCol/CategoryTabs" unique_id=1985872465]
unique_name_in_owner = true
custom_minimum_size = Vector2(56, 56)
layout_mode = 2
theme_override_font_sizes/font_size = 28
text = "🧩"
[node name="ViewportWrapper" type="Control" parent="MainMargin/MainHBox/CenterCol" unique_id=1095002692]
layout_mode = 2
size_flags_vertical = 3