diff --git a/components/Scenes/FullscreenPanels/GameOver.tscn b/components/Scenes/FullscreenPanels/GameOver.tscn index 0e5c29e..a803d77 100644 --- a/components/Scenes/FullscreenPanels/GameOver.tscn +++ b/components/Scenes/FullscreenPanels/GameOver.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=7 format=3 uid="uid://beo6s1kudbbve"] +[gd_scene format=3 uid="uid://beo6s1kudbbve"] [ext_resource type="PackedScene" uid="uid://d3qojeqa3difn" path="res://components/Abstracts/FullscreenPanelBase.tscn" id="1_u2ynr"] -[ext_resource type="Script" path="res://scripts/Contents/Panels/GameOver.gd" id="2_6cd45"] +[ext_resource type="Script" uid="uid://bub7ku5qf2tpo" path="res://scripts/Contents/Panels/GameOver.gd" id="2_6cd45"] [ext_resource type="FontFile" uid="uid://v3frxpuvtj5o" path="res://resources/fonts/syht-bold.ttf" id="3_2arur"] [ext_resource type="AudioStream" uid="uid://dbso1w8hvgilg" path="res://resources/sounds/effect/Lose.wav" id="3_n4aax"] @@ -12,7 +12,7 @@ bg_color = Color(1, 0, 0, 0.3) font = ExtResource("3_2arur") font_size = 50 -[node name="GameOver" instance=ExtResource("1_u2ynr")] +[node name="GameOver" unique_id=2121797652 instance=ExtResource("1_u2ynr")] offset_top = 0.0 offset_bottom = 0.0 script = ExtResource("2_6cd45") @@ -20,22 +20,26 @@ script = ExtResource("2_6cd45") [node name="wrapper" parent="content" index="1"] theme_override_constants/separation = 50 -[node name="container" type="PanelContainer" parent="content/wrapper" index="0"] +[node name="container" type="PanelContainer" parent="content/wrapper" index="0" unique_id=428012739] layout_mode = 2 size_flags_vertical = 3 theme_override_styles/panel = SubResource("StyleBoxFlat_7gbuu") -[node name="wrapper" type="VBoxContainer" parent="content/wrapper/container" index="0"] +[node name="wrapper" type="VBoxContainer" parent="content/wrapper/container" index="0" unique_id=2055114212] layout_mode = 2 +theme_override_constants/separation = 20 alignment = 1 -[node name="text" type="Label" parent="content/wrapper/container/wrapper" index="0"] +[node name="death" type="VBoxContainer" parent="content/wrapper/container/wrapper" index="0" unique_id=1305351100] +layout_mode = 2 + +[node name="text" type="Label" parent="content/wrapper/container/wrapper/death" index="0" unique_id=1017927892] layout_mode = 2 size_flags_horizontal = 4 text = "败北" label_settings = SubResource("LabelSettings_17i5j") -[node name="deadreason" type="RichTextLabel" parent="content/wrapper/container/wrapper" index="1"] +[node name="deadreason" type="RichTextLabel" parent="content/wrapper/container/wrapper/death" index="1" unique_id=1670544883] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 @@ -44,7 +48,23 @@ text = "[color=gray]死亡原因[/color]" fit_content = true autowrap_mode = 0 -[node name="audio" type="AudioStreamPlayer2D" parent="." index="2"] +[node name="gameControl" type="HBoxContainer" parent="content/wrapper/container/wrapper" index="1" unique_id=2129714003] +layout_mode = 2 +alignment = 1 + +[node name="returnBtn" type="Button" parent="content/wrapper/container/wrapper/gameControl" index="0" unique_id=1955688444] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +text = "重新开始游戏" + +[node name="exitBtn" type="Button" parent="content/wrapper/container/wrapper/gameControl" index="1" unique_id=1303303813] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +text = "退出游戏" + +[node name="audio" type="AudioStreamPlayer2D" parent="." index="2" unique_id=2020590816] unique_name_in_owner = true stream = ExtResource("3_n4aax") volume_db = 10.0 diff --git a/components/Scenes/FullscreenPanels/Starter.tscn b/components/Scenes/FullscreenPanels/Starter.tscn index 18d9e63..38b24ff 100644 --- a/components/Scenes/FullscreenPanels/Starter.tscn +++ b/components/Scenes/FullscreenPanels/Starter.tscn @@ -6,30 +6,19 @@ [ext_resource type="Texture2D" uid="uid://dtw7ljiir0ug6" path="res://resources/comics/starterBack.png" id="3_sdsu8"] [ext_resource type="Theme" uid="uid://dhvs6urgf6jr5" path="res://themes/main.tres" id="4_lfxcn"] [ext_resource type="Texture2D" uid="uid://bgi4bx6bsjv48" path="res://resources/icons/logo.png" id="5_i7qv0"] +[ext_resource type="PackedScene" uid="uid://bbm8l3hr4ihar" path="res://components/UI/ItemShow.tscn" id="7_4ekdw"] +[ext_resource type="StyleBox" uid="uid://c2umi01exgdmu" path="res://styleboxes/panel/HorizontalBorder.tres" id="7_kl3ko"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_i7qv0"] shader = ExtResource("3_i7qv0") shader_parameter/prog = 0.5000000074506 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4ekdw"] +content_margin_left = 60.0 + [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_sdsu8"] content_margin_right = 60.0 -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_i7qv0"] -content_margin_left = 20.0 -content_margin_top = 20.0 -content_margin_right = 20.0 -content_margin_bottom = 20.0 -bg_color = Color(0, 0, 0, 0.70000005) -border_width_left = 10 -border_width_right = 10 -border_color = Color(1, 1, 1, 1) -border_blend = true -corner_radius_top_left = 15 -corner_radius_top_right = 15 -corner_radius_bottom_right = 15 -corner_radius_bottom_left = 15 -corner_detail = 1 - [sub_resource type="LabelSettings" id="LabelSettings_lfxcn"] font_size = 20 outline_size = 1 @@ -179,56 +168,107 @@ stretch_mode = 5 [node name="wrapper" parent="content" index="3"] theme_override_constants/separation = 30 -[node name="wrapper" type="PanelContainer" parent="content/wrapper" index="0" unique_id=756923034] +[node name="layout" type="HBoxContainer" parent="content/wrapper" index="0" unique_id=1600804613] layout_mode = 2 -size_flags_horizontal = 8 -theme_override_styles/panel = SubResource("StyleBoxEmpty_sdsu8") -[node name="start" type="PanelContainer" parent="content/wrapper/wrapper" index="0" unique_id=1232082966] +[node name="outGameWrapper" type="PanelContainer" parent="content/wrapper/layout" index="0" unique_id=2095529794] layout_mode = 2 -size_flags_horizontal = 8 -theme_override_styles/panel = SubResource("StyleBoxFlat_i7qv0") +theme_override_styles/panel = SubResource("StyleBoxEmpty_4ekdw") -[node name="starter" type="VBoxContainer" parent="content/wrapper/wrapper/start" index="0" unique_id=2056064159] +[node name="layout" type="HBoxContainer" parent="content/wrapper/layout/outGameWrapper" index="0" unique_id=425031834] layout_mode = 2 theme_override_constants/separation = 30 -[node name="singleplayer" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter" index="0" unique_id=1117567773] +[node name="character" type="PanelContainer" parent="content/wrapper/layout/outGameWrapper/layout" index="0" unique_id=1828402109] +layout_mode = 2 +theme_override_styles/panel = ExtResource("7_kl3ko") + +[node name="container" type="VBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/character" index="0" unique_id=1167478166] +layout_mode = 2 + +[node name="title" type="Label" parent="content/wrapper/layout/outGameWrapper/layout/character/container" index="0" unique_id=1287813603] +layout_mode = 2 +text = "选择角色" + +[node name="outGame" type="PanelContainer" parent="content/wrapper/layout/outGameWrapper/layout" index="1" unique_id=1923951688] +layout_mode = 2 +theme_override_styles/panel = ExtResource("7_kl3ko") + +[node name="container" type="VBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/outGame" index="0" unique_id=145459012] +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="items" type="HBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container" index="0" unique_id=141139741] layout_mode = 2 theme_override_constants/separation = 20 -[node name="playConfig" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="0" unique_id=1132195820] +[node name="crystal" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container/items" index="0" unique_id=827814628 instance=ExtResource("7_4ekdw")] +unique_name_in_owner = true +layout_mode = 2 +type = 5 + +[node name="diamond" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container/items" index="1" unique_id=1846263735 instance=ExtResource("7_4ekdw")] +unique_name_in_owner = true +layout_mode = 2 +type = 6 + +[node name="upgradeFields" type="VBoxContainer" parent="content/wrapper/layout/outGameWrapper/layout/outGame/container" index="1" unique_id=310882955] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +alignment = 1 + +[node name="startGameWrapper" type="PanelContainer" parent="content/wrapper/layout" index="1" unique_id=756923034] +layout_mode = 2 +size_flags_horizontal = 10 +theme_override_styles/panel = SubResource("StyleBoxEmpty_sdsu8") + +[node name="start" type="PanelContainer" parent="content/wrapper/layout/startGameWrapper" index="0" unique_id=1232082966] +layout_mode = 2 +size_flags_horizontal = 8 +theme = ExtResource("4_lfxcn") +theme_override_styles/panel = ExtResource("7_kl3ko") + +[node name="starter" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start" index="0" unique_id=2056064159] +layout_mode = 2 +theme_override_constants/separation = 30 + +[node name="singleplayer" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter" index="0" unique_id=1117567773] +layout_mode = 2 +theme_override_constants/separation = 20 + +[node name="playConfig" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer" index="0" unique_id=1132195820] layout_mode = 2 theme_override_constants/separation = 6 -[node name="diffs" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="0" unique_id=526058063] +[node name="diffs" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="0" unique_id=526058063] layout_mode = 2 alignment = 1 -[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="0" unique_id=1507689450] +[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/diffs" index="0" unique_id=1507689450] layout_mode = 2 text = "选择难度:" -[node name="diffEdit" type="HSlider" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="1" unique_id=1308866785] +[node name="diffEdit" type="HSlider" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/diffs" index="1" unique_id=1308866785] unique_name_in_owner = true custom_minimum_size = Vector2(100, 0) layout_mode = 2 size_flags_vertical = 4 max_value = 0.0 -[node name="levelShow" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="2" unique_id=1102279314] +[node name="levelShow" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/diffs" index="2" unique_id=1102279314] unique_name_in_owner = true layout_mode = 2 text = "0 ∈ [0, 0]" -[node name="gamemode" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="1" unique_id=1396041711] +[node name="gamemode" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="1" unique_id=1396041711] layout_mode = 2 -[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/gamemode" index="0" unique_id=1975146551] +[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/gamemode" index="0" unique_id=1975146551] layout_mode = 2 text = "游戏模式:" -[node name="gamemodeOption" type="OptionButton" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/gamemode" index="1" unique_id=620219949] +[node name="gamemodeOption" type="OptionButton" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/gamemode" index="1" unique_id=620219949] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -243,14 +283,14 @@ popup/item_1/id = 1 popup/item_2/text = "割草" popup/item_2/id = 2 -[node name="player" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="2" unique_id=656225175] +[node name="player" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="2" unique_id=656225175] layout_mode = 2 -[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/player" index="0" unique_id=1899542373] +[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/player" index="0" unique_id=1899542373] layout_mode = 2 text = "角色名:" -[node name="playerNameInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/player" index="1" unique_id=1401004968] +[node name="playerNameInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/player" index="1" unique_id=1401004968] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -263,14 +303,14 @@ expand_to_text_length = true select_all_on_focus = true virtual_keyboard_type = 7 -[node name="useTutorial" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="3" unique_id=2079979053] +[node name="useTutorial" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig" index="3" unique_id=2079979053] layout_mode = 2 -[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/useTutorial" index="0" unique_id=20976924] +[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/useTutorial" index="0" unique_id=20976924] layout_mode = 2 text = "新手教程?" -[node name="useTutorialBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/useTutorial" index="1" unique_id=689654160] +[node name="useTutorialBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/playConfig/useTutorial" index="1" unique_id=689654160] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -278,41 +318,41 @@ toggle_mode = true button_pressed = true text = "观看" -[node name="start" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="1" unique_id=1119283819] +[node name="start" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer" index="1" unique_id=1119283819] layout_mode = 2 theme_override_constants/separation = 10 alignment = 1 -[node name="startSingleplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="0" unique_id=935895475] +[node name="startSingleplayerBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/start" index="0" unique_id=935895475] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 theme = ExtResource("4_lfxcn") text = "单人游戏" -[node name="startMultiplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="1" unique_id=1874616219] +[node name="startMultiplayerBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/singleplayer/start" index="1" unique_id=1874616219] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 theme = ExtResource("4_lfxcn") text = "多人游戏" -[node name="multiplayer" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter" index="1" unique_id=2010516457] +[node name="multiplayer" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter" index="1" unique_id=2010516457] visible = false layout_mode = 2 theme_override_constants/separation = 15 alignment = 1 -[node name="main" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer" index="0" unique_id=255202573] +[node name="main" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer" index="0" unique_id=255202573] layout_mode = 2 -[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="0" unique_id=504003020] +[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="0" unique_id=504003020] layout_mode = 2 size_flags_horizontal = 4 text = "多人游戏" label_settings = SubResource("LabelSettings_lfxcn") -[node name="connectionState" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="1" unique_id=1479839873] +[node name="connectionState" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="1" unique_id=1479839873] unique_name_in_owner = true modulate = Color(1, 0, 0, 1) layout_mode = 2 @@ -320,16 +360,16 @@ size_flags_horizontal = 4 text = "状态:未连接到服务器。" label_settings = SubResource("LabelSettings_kl3ko") -[node name="host" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="2" unique_id=105458555] +[node name="host" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="2" unique_id=105458555] layout_mode = 2 alignment = 1 -[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="0" unique_id=871253279] +[node name="tip" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="0" unique_id=871253279] layout_mode = 2 text = "地址" label_settings = SubResource("LabelSettings_sdsu8") -[node name="hostInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="1" unique_id=1534443919] +[node name="hostInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="1" unique_id=1534443919] unique_name_in_owner = true layout_mode = 2 theme = ExtResource("4_lfxcn") @@ -341,11 +381,11 @@ clear_button_enabled = true select_all_on_focus = true virtual_keyboard_type = 7 -[node name="separator" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="2" unique_id=1728951883] +[node name="separator" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="2" unique_id=1728951883] layout_mode = 2 text = ":" -[node name="portInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/multiplayer/main/host" index="3" unique_id=476929474] +[node name="portInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/host" index="3" unique_id=476929474] unique_name_in_owner = true layout_mode = 2 theme = ExtResource("4_lfxcn") @@ -356,55 +396,55 @@ emoji_menu_enabled = false select_all_on_focus = true virtual_keyboard_type = 2 -[node name="operation" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/main" index="3" unique_id=720531196] +[node name="operation" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main" index="3" unique_id=720531196] layout_mode = 2 alignment = 1 -[node name="launchBtn" type="Button" parent="content/wrapper/wrapper/start/starter/multiplayer/main/operation" index="0" unique_id=480209339] +[node name="launchBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/operation" index="0" unique_id=480209339] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 text = "启动服务器" -[node name="connectBtn" type="Button" parent="content/wrapper/wrapper/start/starter/multiplayer/main/operation" index="1" unique_id=921875653] +[node name="connectBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/operation" index="1" unique_id=921875653] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 text = "连接服务器" -[node name="disconnectBtn" type="Button" parent="content/wrapper/wrapper/start/starter/multiplayer/main/operation" index="2" unique_id=1179706084] +[node name="disconnectBtn" type="Button" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/main/operation" index="2" unique_id=1179706084] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 disabled = true text = "断开连接" -[node name="configs" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer" index="1" unique_id=332744115] +[node name="configs" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer" index="1" unique_id=332744115] layout_mode = 2 theme_override_constants/separation = 30 alignment = 1 -[node name="serverConfig" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs" index="0" unique_id=586906646] +[node name="serverConfig" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs" index="0" unique_id=586906646] unique_name_in_owner = true visible = false layout_mode = 2 -[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig" index="0" unique_id=838895828] +[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig" index="0" unique_id=838895828] layout_mode = 2 size_flags_horizontal = 4 text = "服务器配置" -[node name="maxPlayer" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig" index="1" unique_id=233504210] +[node name="maxPlayer" type="HBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig" index="1" unique_id=233504210] layout_mode = 2 alignment = 1 -[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="0" unique_id=665443104] +[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="0" unique_id=665443104] layout_mode = 2 size_flags_horizontal = 4 text = "最大玩家数" label_settings = SubResource("LabelSettings_i7qv0") -[node name="maxPlayerInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="1" unique_id=237311490] +[node name="maxPlayerInput" type="LineEdit" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/serverConfig/maxPlayer" index="1" unique_id=237311490] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 @@ -415,17 +455,17 @@ emoji_menu_enabled = false select_all_on_focus = true virtual_keyboard_type = 2 -[node name="players" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs" index="1" unique_id=798597277] +[node name="players" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs" index="1" unique_id=798597277] unique_name_in_owner = true visible = false layout_mode = 2 -[node name="title" type="Label" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/players" index="0" unique_id=1095446629] +[node name="title" type="Label" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/players" index="0" unique_id=1095446629] layout_mode = 2 size_flags_horizontal = 4 text = "玩家管理" -[node name="list" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/multiplayer/configs/players" index="1" unique_id=1550608733] +[node name="list" type="VBoxContainer" parent="content/wrapper/layout/startGameWrapper/start/starter/multiplayer/configs/players" index="1" unique_id=1550608733] unique_name_in_owner = true layout_mode = 2 alignment = 1 diff --git a/components/UI/FieldShow.tscn b/components/UI/FieldShow.tscn index 8845838..16d0357 100644 --- a/components/UI/FieldShow.tscn +++ b/components/UI/FieldShow.tscn @@ -1,29 +1,31 @@ -[gd_scene load_steps=5 format=3 uid="uid://cw5ip3rw4r3pp"] +[gd_scene format=3 uid="uid://cw5ip3rw4r3pp"] -[ext_resource type="Script" path="res://scripts/Statemachine/FieldShow.gd" id="1_gwocj"] -[ext_resource type="Texture2D" uid="uid://iu5i8ullbhf6" path="res://resources/items/apple.svg" id="2_q02yi"] +[ext_resource type="Script" uid="uid://cosrwhfwqba7c" path="res://scripts/Statemachine/FieldShow.gd" id="1_gwocj"] +[ext_resource type="Texture2D" uid="uid://indwfnk25l74" path="res://resources/fieldIcons/生命上限.svg" id="2_ueodc"] [ext_resource type="Theme" uid="uid://b6nox1qqh50ub" path="res://themes/smallText.tres" id="2_x62bb"] +[ext_resource type="Texture2D" uid="uid://bq8wf01j5ulwe" path="res://resources/ui/update-level.svg" id="4_imrgm"] -[sub_resource type="LabelSettings" id="LabelSettings_ysv18"] +[sub_resource type="LabelSettings" id="LabelSettings_imrgm"] font_size = 13 -[node name="FieldShow" type="HBoxContainer"] +[node name="FieldShow" type="HBoxContainer" unique_id=1958616813] offset_right = 144.0 offset_bottom = 18.0 +alignment = 1 script = ExtResource("1_gwocj") metadata/_edit_horizontal_guides_ = [20.0] -[node name="icon" type="TextureRect" parent="."] +[node name="icon" type="TextureRect" parent="." unique_id=1570201622] unique_name_in_owner = true custom_minimum_size = Vector2(20, 20) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 -texture = ExtResource("2_q02yi") +texture = ExtResource("2_ueodc") expand_mode = 1 stretch_mode = 5 -[node name="name" type="Label" parent="."] +[node name="name" type="Label" parent="." unique_id=452024197] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 11 @@ -31,18 +33,31 @@ theme = ExtResource("2_x62bb") text = "生命上限" horizontal_alignment = 1 -[node name="sep" type="ColorRect" parent="."] +[node name="sep" type="ColorRect" parent="." unique_id=947351883] custom_minimum_size = Vector2(20, 1) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 4 size_flags_stretch_ratio = 16.0 -[node name="value" type="Label" parent="."] +[node name="value" type="Label" parent="." unique_id=1521326049] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 10 -size_flags_vertical = 8 -text = "0" -label_settings = SubResource("LabelSettings_ysv18") +text = "+10.0" +label_settings = SubResource("LabelSettings_imrgm") horizontal_alignment = 1 + +[node name="upgrades" type="HBoxContainer" parent="." unique_id=1359455298] +unique_name_in_owner = true +visible = false +layout_mode = 2 + +[node name="upgradeBtn" type="Button" parent="upgrades" unique_id=1348396281] +unique_name_in_owner = true +layout_mode = 2 +icon = ExtResource("4_imrgm") + +[node name="cost" type="HBoxContainer" parent="upgrades" unique_id=1708563406] +unique_name_in_owner = true +layout_mode = 2 diff --git a/project.godot b/project.godot index d209fc3..48b0cf8 100644 --- a/project.godot +++ b/project.godot @@ -29,6 +29,10 @@ window/size/viewport_width=1280 window/size/viewport_height=720 window/size/mode=2 +[global_group] + +bullets="" + [gui] theme/custom="res://themes/main.tres" diff --git a/resources/items/crystal.svg b/resources/items/crystal.svg new file mode 100644 index 0000000..48450d8 --- /dev/null +++ b/resources/items/crystal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/items/crystal.svg.import b/resources/items/crystal.svg.import new file mode 100644 index 0000000..663fa25 --- /dev/null +++ b/resources/items/crystal.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bdp6x3yncvway" +path="res://.godot/imported/crystal.svg-b5be99c51af6bba53888868c59397820.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/items/crystal.svg" +dest_files=["res://.godot/imported/crystal.svg-b5be99c51af6bba53888868c59397820.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/resources/items/diamond.svg b/resources/items/diamond.svg new file mode 100644 index 0000000..c31e15c --- /dev/null +++ b/resources/items/diamond.svg @@ -0,0 +1,25 @@ + + + + + crystal-a + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/items/diamond.svg.import b/resources/items/diamond.svg.import new file mode 100644 index 0000000..d258d0c --- /dev/null +++ b/resources/items/diamond.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2pdt75oaeyyi" +path="res://.godot/imported/diamond.svg-c2e0c7bcfcf4bf5e3510e897076abe04.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resources/items/diamond.svg" +dest_files=["res://.godot/imported/diamond.svg-c2e0c7bcfcf4bf5e3510e897076abe04.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/scripts/Contents/Panels/GameOver.gd b/scripts/Contents/Panels/GameOver.gd index c673de4..ea73c7e 100644 --- a/scripts/Contents/Panels/GameOver.gd +++ b/scripts/Contents/Panels/GameOver.gd @@ -1,10 +1,30 @@ @tool extends FullscreenPanelBase -@onready var audio: AudioStreamPlayer2D = $"%audio" -@onready var deadreason: RichTextLabel = $"%deadreason" +@onready var audio: AudioStreamPlayer2D = $%audio +@onready var deadreason: RichTextLabel = $%deadreason +@onready var returnBtn: Button = $%returnBtn +@onready var exitBtn: Button = $%exitBtn + +func _ready(): + returnBtn.pressed.connect( + func(): + returnBtn.disabled = true + for bullet in get_tree().get_nodes_in_group("bullets"): + bullet.queue_free() + for entity in get_tree().get_nodes_in_group("entities"): + entity.queue_free() + UIState.setPanel("Starter") + ) + exitBtn.pressed.connect( + func(): + get_tree().quit() + ) func beforeOpen(args: Array = []): audio.play() var reasonTemplate = MathTool.randomChoiceFrom(GameRule.deadReasons) deadreason.text = ("[color=gray]" + reasonTemplate + "凶手是[b]%s[/b]的[b]%s[/b]。[/color]") % args +func afterOpen(_args: Array = []): + returnBtn.disabled = false + exitBtn.disabled = false diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index 98f7104..2f67b89 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -7,6 +7,10 @@ class_name StarterPanel @onready var gamemodeOption: OptionButton = $%gamemodeOption @onready var useTutorialBtn: Button = $%useTutorialBtn +@onready var upgradeFieldsBox: Control = $%upgradeFields +@onready var crystalShow: ItemShow = $%crystal +@onready var diamondShow: ItemShow = $%diamond + @onready var startSingleplayerBtn: Button = $%startSingleplayerBtn @onready var startMultiplayerBtn: Button = $%startMultiplayerBtn @onready var levelShow: Label = $%levelShow @@ -81,9 +85,6 @@ func startSingleplayerGame(): func _ready(): historyStack = Composables.useHistoryStack(playerNameInput) - diffEdit.min_value = GameRule.difficultyRange.x - diffEdit.max_value = GameRule.difficultyRange.y - diffEdit.value = GameRule.difficulty useTutorialBtn.toggled.connect( func(on: bool): useTutorialBtn.text = "观看" if on else "跳过" @@ -134,7 +135,6 @@ func _ready(): setPlayerName(getLast.call(1), newText) mutexPlayer.rpc(newText) ) - setState(MultiplayerState.ConnectionState.DISCONNECTED) func _physics_process(_delta): levelShow.text = "%d ∈ [%d, %d]" % [diffEdit.value, diffEdit.min_value, diffEdit.max_value] GameRule.difficulty = diffEdit.value @@ -158,3 +158,32 @@ func getPlayerNames() -> Array[String]: for i in playersList.get_children(): result.append(i.text) return result + +func beforeOpen(_args: Array = []): + diffEdit.min_value = GameRule.difficultyRange.x + diffEdit.max_value = GameRule.difficultyRange.y + diffEdit.value = GameRule.difficulty + setState(MultiplayerState.ConnectionState.DISCONNECTED) + + crystalShow.count = OutGameStorage.inventory[ItemStore.ItemType.CRYSTAL] + diamondShow.count = OutGameStorage.inventory[ItemStore.ItemType.DIAMOND] + for child in upgradeFieldsBox.get_children(): + upgradeFieldsBox.remove_child(child) + for field in OutGameStorage.upgradableFieldsAdvance: + var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate() as FieldShow + fieldShow.cost(ItemStore.ItemType.CRYSTAL, 50) + fieldShow.cost(ItemStore.ItemType.DIAMOND, 1) + fieldShow.upgradable = true + fieldShow.upgradeValue = OutGameStorage.upgradableFieldsAdvance[field] + fieldShow.field = field + fieldShow.value = OutGameStorage.upgradableFieldsValue[field] + fieldShow.showAdvantage = true + fieldShow.upgrade.connect( + func(newValue: float): + OutGameStorage.upgradableFieldsValue[fieldShow.field] = newValue + for index in len(fieldShow.costCounts): + fieldShow.costCounts[index] *= GameRule.outGameUpgradeMultipiler + ) + upgradeFieldsBox.add_child(fieldShow) + + startSingleplayerBtn.disabled = false diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 24e9ae5..e7e3682 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -560,6 +560,7 @@ static func generate( instance.add_to_group("mobs") else: instance.add_to_group("players") + instance.add_to_group("entities") if addToWorld: WorldManager.rootNode.spawn(instance) return instance diff --git a/scripts/Statemachine/FieldShow.gd b/scripts/Statemachine/FieldShow.gd index 8bdc4f9..e85612f 100644 --- a/scripts/Statemachine/FieldShow.gd +++ b/scripts/Statemachine/FieldShow.gd @@ -2,6 +2,8 @@ extends HBoxContainer class_name FieldShow +signal upgrade(newValue: float) + @export var field: FieldStore.Entity = FieldStore.Entity.MAX_HEALTH @export var value: float = 0 @export var showSign: bool = true @@ -9,19 +11,40 @@ class_name FieldShow @export var useViewCast: bool = false @export var maxed: bool = false @export var showAdvantage: bool = false +@export var upgradable: bool = false +@export var upgradeValue: float = 0 +@export var costItems: Array[ItemStore.ItemType] = [] +@export var costCounts: Array[int] = [] -@onready var icon: TextureRect = $"%icon" -@onready var nameLabel: Label = $"%name" -@onready var valueLabel: Label = $"%value" +@onready var icon: TextureRect = $%icon +@onready var nameLabel: Label = $%name +@onready var valueLabel: Label = $%value +@onready var upgradesBox: Control = $%upgrades +@onready var upgradeBtn: Button = $%upgradeBtn +@onready var costsBox: Control = $%cost func _ready(): + valueLabel.label_settings = valueLabel.label_settings.duplicate() + upgradeBtn.pressed.connect( + func(): + if upgradable: + if enoughToUpgrade(): + value += upgradeValue + upgrade.emit(value) + rebuildInfo() + else: + UIState.showTip("物品不足!", TipBox.MessageType.ERROR) + ) + rebuildInfo() + +func rebuildInfo(): + nameLabel.text = FieldStore.entityMap[field] + icon.texture = ComponentManager.getFieldTexture(FieldStore.entityMap.get(field)) if useViewCast: var caster = FieldStore.entityViewCastMap.get(field) if caster: value = caster.call(entity, value) - nameLabel.text = FieldStore.entityMap[field] - icon.texture = ComponentManager.getFieldTexture(FieldStore.entityMap.get(field)) - var formattedValue: String + var formattedValue: String = "" var dataType = FieldStore.entityMapType[field] if dataType == FieldStore.DataType.VALUE: formattedValue = "%s" % (MathTool.toSigned(value) if showSign else str(value)) @@ -31,18 +54,46 @@ func _ready(): formattedValue = "%s°" % (MathTool.toSigned(value) if showSign else str(value)) elif dataType == FieldStore.DataType.PERCENT: formattedValue = (MathTool.toSigned(value * 100) if showSign else str(value * 100)) + "%" - valueLabel.label_settings = valueLabel.label_settings.duplicate() valueLabel.text = formattedValue if maxed: valueLabel.label_settings.font_color = Color(1, 0.3, 0.3) valueLabel.text = "MAX%s" % valueLabel.text elif showAdvantage: - if field in FieldStore.entityNegativeFields: - valueLabel.label_settings.font_color = Color.RED if value > 0 else Color.GREEN + if value == 0: + valueLabel.label_settings.font_color = Color.WHITE else: - valueLabel.label_settings.font_color = Color.GREEN if value > 0 else Color.RED + if field in FieldStore.entityNegativeFields: + valueLabel.label_settings.font_color = Color.RED if value > 0 else Color.GREEN + else: + valueLabel.label_settings.font_color = Color.GREEN if value > 0 else Color.RED else: valueLabel.label_settings.font_color = Color(1, 1, 1) + upgradesBox.visible = upgradable + for child in costsBox.get_children(): + costsBox.remove_child(child) + for index in len(costItems): + var item = costItems[index] + var itemShow = ComponentManager.getUIComponent("ItemShow").instantiate() as ItemShow + itemShow.type = item + itemShow.count = costCounts[index] + itemShow.enough = OutGameStorage.inventory[item] >= costCounts[index] + costsBox.add_child(itemShow) +func enoughToUpgrade(): + var result = true + for child in costsBox.get_children(): + if child is ItemShow: + if !child.enough: + result = false + break + return result +func cost(item: ItemStore.ItemType, count: int): + for index in len(costItems): + var itemd = costItems[index] + if itemd == item: + costCounts[index] += count + break + costItems.append(item) + costCounts.append(count) static func create(newField: FieldStore.Entity, newValue: float, newShowSign: bool, newEntity: EntityBase, newUseViewCast: bool) -> FieldShow: var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate() diff --git a/scripts/Tools/FieldStore.gd b/scripts/Tools/FieldStore.gd index dc99891..406052e 100644 --- a/scripts/Tools/FieldStore.gd +++ b/scripts/Tools/FieldStore.gd @@ -105,7 +105,7 @@ static var entityMaxValueMap = { Entity.CRIT_RATE: 0.9, Entity.PENERATE: 0.9, Entity.PENARATION_RESISTANCE: 1, - Entity.PRICE_REDUCTION: 0.7, + Entity.PRICE_REDUCTION: 0.85, Entity.DROP_APPLE_RATE: 0.3, Entity.FEED_COUNT_SHOW: 5, Entity.BULLET_TRACE: 1, diff --git a/scripts/Tools/GameRule.gd b/scripts/Tools/GameRule.gd index 53a7a23..84de5b9 100644 --- a/scripts/Tools/GameRule.gd +++ b/scripts/Tools/GameRule.gd @@ -23,3 +23,4 @@ static var penerateRateInfluenceByLuckValue: float = MathTool.percent(3) # 幸 static var detainTime: float = 250 # 血量如果在这个时间内没有改变才会开始播放降低动画 static var weaponUpdateCost: float = 1.1 # 武器升级后消耗的棒球数量倍数 static var canSpawnMobWhenBossWave: bool = true # Boss波次是否可生成小怪 +static var outGameUpgradeMultipiler: float = 2 # 局外养成升级后物品消耗倍率 diff --git a/scripts/Tools/ItemStore.gd b/scripts/Tools/ItemStore.gd index b9f89aa..e0b96bb 100644 --- a/scripts/Tools/ItemStore.gd +++ b/scripts/Tools/ItemStore.gd @@ -7,6 +7,8 @@ enum ItemType { APPLE, BEACHBALL, SOUL, + CRYSTAL, + DIAMOND } static var nameMap = { ItemType.BASEBALL: "棒球", @@ -14,6 +16,8 @@ static var nameMap = { ItemType.APPLE: "苹果", ItemType.BEACHBALL: "沙滩球", ItemType.SOUL: "灵魂", + ItemType.CRYSTAL: "紫水晶", + ItemType.DIAMOND: "钻石" } static var idMap = { ItemType.BASEBALL: "baseball", @@ -21,6 +25,8 @@ static var idMap = { ItemType.APPLE: "apple", ItemType.BEACHBALL: "beachball", ItemType.SOUL: "soul", + ItemType.CRYSTAL: "crystal", + ItemType.DIAMOND: "diamond" } static func getTexture(type: ItemType) -> Texture2D: return ComponentManager.getItemTexture(idMap.get(type, "baseball")) diff --git a/scripts/Tools/OutGameStorage.gd b/scripts/Tools/OutGameStorage.gd index 360d1f6..5b37078 100644 --- a/scripts/Tools/OutGameStorage.gd +++ b/scripts/Tools/OutGameStorage.gd @@ -2,3 +2,20 @@ class_name OutGameStorage static var maxInitialFeedCount: int = 3 static var maxInitialWeaponCount: int = 3 +static var inventory = { + ItemStore.ItemType.CRYSTAL: 0, + ItemStore.ItemType.DIAMOND: 0 +} + +static var upgradableFieldsAdvance = { + FieldStore.Entity.MAX_HEALTH: 10, + FieldStore.Entity.DAMAGE_MULTIPILER: 0.1, + FieldStore.Entity.ATTACK_SPEED: 0.05, + FieldStore.Entity.PRICE_REDUCTION: 0.02 +} +static var upgradableFieldsValue = { + FieldStore.Entity.MAX_HEALTH: 0, + FieldStore.Entity.DAMAGE_MULTIPILER: 0, + FieldStore.Entity.ATTACK_SPEED: 0, + FieldStore.Entity.PRICE_REDUCTION: 0 +} diff --git a/styleboxes/panel/HorizontalBorder.tres b/styleboxes/panel/HorizontalBorder.tres new file mode 100644 index 0000000..f29d9fc --- /dev/null +++ b/styleboxes/panel/HorizontalBorder.tres @@ -0,0 +1,17 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://c2umi01exgdmu"] + +[resource] +content_margin_left = 20.0 +content_margin_top = 20.0 +content_margin_right = 20.0 +content_margin_bottom = 20.0 +bg_color = Color(0, 0, 0, 0.70000005) +border_width_left = 10 +border_width_right = 10 +border_color = Color(1, 1, 1, 1) +border_blend = true +corner_radius_top_left = 15 +corner_radius_top_right = 15 +corner_radius_bottom_right = 15 +corner_radius_bottom_left = 15 +corner_detail = 1