From e1c017bf3a6a7f354abec28574d45098ea505772 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?=
<3161880837@qq.com>
Date: Mon, 4 May 2026 08:52:20 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=B1=80=E5=A4=96?=
=?UTF-8?q?=E5=85=BB=E6=88=90=E7=B3=BB=E7=BB=9F=E5=92=8C=E6=B8=B8=E6=88=8F?=
=?UTF-8?q?=E7=BB=93=E6=9D=9F=E9=9D=A2=E6=9D=BF=E6=94=B9=E8=BF=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
添加新的物品类型紫水晶和钻石
实现局外属性升级系统
改进游戏结束面板的返回和退出功能
添加新的UI组件用于显示属性和物品
更新游戏规则和存储系统以支持局外养成
---
.../Scenes/FullscreenPanels/GameOver.tscn | 36 +++-
.../Scenes/FullscreenPanels/Starter.tscn | 166 +++++++++++-------
components/UI/FieldShow.tscn | 41 +++--
project.godot | 4 +
resources/items/crystal.svg | 1 +
resources/items/crystal.svg.import | 43 +++++
resources/items/diamond.svg | 25 +++
resources/items/diamond.svg.import | 43 +++++
scripts/Contents/Panels/GameOver.gd | 24 ++-
scripts/Contents/Panels/Starter.gd | 37 +++-
scripts/Statemachine/EntityBase.gd | 1 +
scripts/Statemachine/FieldShow.gd | 71 ++++++--
scripts/Tools/FieldStore.gd | 2 +-
scripts/Tools/GameRule.gd | 1 +
scripts/Tools/ItemStore.gd | 6 +
scripts/Tools/OutGameStorage.gd | 17 ++
styleboxes/panel/HorizontalBorder.tres | 17 ++
17 files changed, 434 insertions(+), 101 deletions(-)
create mode 100644 resources/items/crystal.svg
create mode 100644 resources/items/crystal.svg.import
create mode 100644 resources/items/diamond.svg
create mode 100644 resources/items/diamond.svg.import
create mode 100644 styleboxes/panel/HorizontalBorder.tres
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 @@
+
\ 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