Skip to content

Commit f316d63

Browse files
authored
Merge pull request #94 from NoobKazoku/空间站
空间站
2 parents 592b277 + c51bf03 commit f316d63

File tree

5 files changed

+119
-17
lines changed

5 files changed

+119
-17
lines changed

resources/language.csv

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@ id,ch,en
5858
当前等级,当前等级,Current Level
5959
下一等级,下一等级,Next Level
6060
消耗,消耗,Cost
61-
矿石,矿石,Ore
61+
散矿,散矿,Ore
6262
宝石,宝石,Gem
6363
已满级,已满级,Max Level Reached
6464
等级,等级,Level
65+
升级成功,升级成功,Upgrade Successful
66+
升级失败,升级失败,Upgrade Failed
67+
没有选中技能,没有选中技能,No Skill Selected
68+
缺少,缺少,Lacking
69+
从等级,从等级,From Level
70+
提升到等级,提升到等级,To Level

scenes/UI/level_up/LevelUp.cs

Lines changed: 87 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ public partial class LevelUp : Button, IController
2828
// 静态缓存:参考陨石实现方法的备选方案
2929
private static SkillRoot? _cachedSkillRoot = null;
3030
private static bool _hasTriedLoadStatic = false;
31+
32+
// NPC对话框文本打字机
33+
private TextTyper? _npcTextTyper = null;
34+
35+
/// <summary>
36+
/// 设置NPC对话框文本打字机
37+
/// </summary>
38+
/// <param name="textTyper">TextTyper实例</param>
39+
public void SetNpcTextTyper(TextTyper textTyper)
40+
{
41+
_npcTextTyper = textTyper;
42+
GD.Print($"LevelUp: 已设置TextTyper引用");
43+
}
3144

3245
public override void _Ready()
3346
{
@@ -73,7 +86,14 @@ public void OnPressed()
7386
// 检查是否有选中的技能
7487
if (_currentSkillData == null || _currentSkillLevel == null)
7588
{
76-
GD.Print("请先选择一个技能");
89+
if (_npcTextTyper != null)
90+
{
91+
_npcTextTyper.SetTyperText(Tr("没有选中技能"));
92+
}
93+
else
94+
{
95+
GD.Print(Tr("没有选中技能"));
96+
}
7797
return;
7898
}
7999

@@ -87,7 +107,15 @@ public void OnPressed()
87107
// 检查是否已满级
88108
if (currentLevel >= _currentSkillData.MaxLevel)
89109
{
90-
GD.Print($"{_currentSkillData.DisplayName} 已满级,无法继续升级");
110+
string fullLevelText = $"{Tr(_currentSkillData.DisplayName)} {Tr("已满级")}";
111+
if (_npcTextTyper != null)
112+
{
113+
_npcTextTyper.SetTyperText(fullLevelText);
114+
}
115+
else
116+
{
117+
GD.Print(fullLevelText);
118+
}
91119
return;
92120
}
93121

@@ -98,17 +126,56 @@ public void OnPressed()
98126
return;
99127
}
100128

101-
// 检查散矿是否足够
102-
if (PlayerManager.Instance.TotalOreCount < OreCost)
129+
// 检查资源是否足够
130+
bool oreShortage = PlayerManager.Instance.TotalOreCount < OreCost;
131+
bool gemShortage = PlayerManager.Instance.TotalGemCount < GemCost;
132+
133+
// 如果两种资源都缺
134+
if (oreShortage && gemShortage)
103135
{
104-
GD.Print($"矿石不足!需要{OreCost}散矿,当前只有{PlayerManager.Instance.TotalOreCount}散矿");
136+
int oreNeeded = OreCost - PlayerManager.Instance.TotalOreCount;
137+
int gemNeeded = GemCost - PlayerManager.Instance.TotalGemCount;
138+
string shortageText = $"{Tr("升级失败")}{Tr("缺少")}{oreNeeded}{Tr("散矿")}+{gemNeeded}{Tr("宝石")}";
139+
if (_npcTextTyper != null)
140+
{
141+
_npcTextTyper.SetTyperText(shortageText);
142+
}
143+
else
144+
{
145+
GD.Print(shortageText);
146+
}
147+
return;
148+
}
149+
150+
// 如果只缺散矿
151+
if (oreShortage)
152+
{
153+
int oreNeeded = OreCost - PlayerManager.Instance.TotalOreCount;
154+
string oreShortageText = $"{Tr("升级失败")}{Tr("缺少")}{oreNeeded}{Tr("散矿")}";
155+
if (_npcTextTyper != null)
156+
{
157+
_npcTextTyper.SetTyperText(oreShortageText);
158+
}
159+
else
160+
{
161+
GD.Print(oreShortageText);
162+
}
105163
return;
106164
}
107165

108-
// 检查宝石是否足够
109-
if (PlayerManager.Instance.TotalGemCount < GemCost)
166+
// 如果只缺宝石
167+
if (gemShortage)
110168
{
111-
GD.Print($"宝石不足!需要{GemCost}宝石,当前只有{PlayerManager.Instance.TotalGemCount}宝石");
169+
int gemNeeded = GemCost - PlayerManager.Instance.TotalGemCount;
170+
string gemShortageText = $"{Tr("升级失败")}{Tr("缺少")}{gemNeeded}{Tr("宝石")}";
171+
if (_npcTextTyper != null)
172+
{
173+
_npcTextTyper.SetTyperText(gemShortageText);
174+
}
175+
else
176+
{
177+
GD.Print(gemShortageText);
178+
}
112179
return;
113180
}
114181

@@ -133,8 +200,16 @@ public void OnPressed()
133200
// 保存存档
134201
_saveStorageUtility.Save();
135202

136-
GD.Print($"升级成功!{_currentSkillData.DisplayName} 从等级{currentLevel}提升到等级{nextLevel}");
137-
GD.Print($"消耗了{OreCost}散矿和{GemCost}宝石");
203+
// 显示升级成功信息
204+
string successText = $"{Tr("升级成功")}{Tr(_currentSkillData.DisplayName)} {Tr("从等级")}{currentLevel}{Tr("提升到等级")}{nextLevel}";
205+
if (_npcTextTyper != null)
206+
{
207+
_npcTextTyper.SetTyperText(successText);
208+
}
209+
else
210+
{
211+
GD.Print(successText);
212+
}
138213

139214
// 更新PlayerManager中的对应变量
140215
UpdatePlayerManagerVariable(_currentSkillData.Name, (float)_currentSkillLevel.Value);
@@ -320,7 +395,7 @@ private void SelectSkill(string skillName)
320395

321396
if (_currentSkillData != null)
322397
{
323-
GD.Print($"选中{_currentSkillData.DisplayName}: {_currentSkillData.Description}");
398+
GD.Print($"选中{Tr(_currentSkillData.DisplayName)}: {Tr(_currentSkillData.Description)}");
324399

325400
// 从存档中获取当前技能等级
326401
int currentLevel = _saveStorageUtility.GetSkillLevel(skillName);
@@ -357,7 +432,7 @@ private void SelectSkill(string skillName)
357432

358433
if (currentLevel < _currentSkillData.MaxLevel)
359434
{
360-
GD.Print($"当前等级{currentLevel} -> 下一等级{nextLevel}: 数值={_currentSkillLevel.Value}, 消耗={OreCost}矿石, {GemCost}宝石");
435+
GD.Print($"当前等级{currentLevel} -> 下一等级{nextLevel}: 数值={_currentSkillLevel.Value}, 消耗={OreCost}{Tr("散矿")}, {GemCost}{Tr("宝石")}");
361436
}
362437
else
363438
{

scenes/space_rock/SpaceRock.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public override void _Ready()
3636
AngularDamp = 0;
3737
ShootArea.BodyEntered += OnBodyEntered;
3838
LinearVelocity = new Vector2(GD.RandRange(-50, 50), GD.RandRange(-50, 50));
39+
AngularVelocity = GD.RandRange(-30, 30);
3940

4041
// 初始化计时器
4142
_lifeTimer = new Timer();
@@ -145,7 +146,7 @@ public void OnAcquire()
145146

146147
// 设置随机移动速度,让陨石持续移动
147148
LinearVelocity = new Vector2(GD.RandRange(-50, 50), GD.RandRange(-50, 50));
148-
AngularVelocity = 0;
149+
AngularVelocity = GD.RandRange(-30, 30);
149150
AnimatedSprite2D.Visible = true;
150151
ShootArea.Monitoring = true;
151152
ShootArea.Monitorable = true;

scenes/space_station/SpaceStation.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,25 @@ public override void _Ready()
3030
// 获取LevelUpDataReadUtility
3131
_levelUpDataUtility = this.GetUtility<LevelUpDataReadUtility>();
3232

33+
// 获取LevelUp节点并设置TextTyper
34+
var levelUpNode = GetNode<LevelUp>("%LevelUp");
35+
if (levelUpNode != null && _npcTextTyper != null)
36+
{
37+
levelUpNode.SetNpcTextTyper(_npcTextTyper);
38+
_log.Debug("已为LevelUp节点设置TextTyper引用");
39+
}
40+
else
41+
{
42+
if (levelUpNode == null)
43+
{
44+
_log.Error("未找到LevelUp节点");
45+
}
46+
if (_npcTextTyper == null)
47+
{
48+
_log.Error("TextTyper节点未初始化");
49+
}
50+
}
51+
3352
DataLoad();
3453

3554
// 从存档加载技能等级数据并更新PlayerManager变量
@@ -254,8 +273,8 @@ private void OnSkillButtonPressed(string skillName)
254273
currentLevel = 1;
255274
}
256275

257-
// 构建显示文本:技能描述(使用本地化)
258-
string displayText = Tr(skillData.Description) + "\n";
276+
// 构建显示文本:技能名称(使用本地化)和技能描述(使用本地化)
277+
string displayText = $"{Tr(skillData.DisplayName)}: {Tr(skillData.Description)}\n";
259278

260279
// 计算下一等级
261280
int nextLevel = currentLevel;
@@ -272,7 +291,7 @@ private void OnSkillButtonPressed(string skillName)
272291
if (currentLevel < skillData.MaxLevel)
273292
{
274293
// 未满级:显示当前等级 -> 下一等级和消耗(使用本地化)
275-
displayText += $"{Tr("当前等级")}{currentLevel} -> {Tr("下一等级")}{nextLevel}: {Tr("消耗")}={nextLevelData.UpgradeCost.Ore}{Tr("矿石")}, {nextLevelData.UpgradeCost.Gem}{Tr("宝石")}";
294+
displayText += $"{Tr("当前等级")}{currentLevel} -> {Tr("下一等级")}{nextLevel}: {Tr("消耗")}={nextLevelData.UpgradeCost.Ore}{Tr("散矿")}, {nextLevelData.UpgradeCost.Gem}{Tr("宝石")}";
276295
}
277296
else
278297
{

scenes/space_station/space_station.tscn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ custom_minimum_size = Vector2(128, 0)
240240
layout_mode = 2
241241

242242
[node name="LevelUp" parent="MarginContainer/VBoxContainer/Panel/MarginContainer/HBoxContainer/HBoxContainer/升级按钮" instance=ExtResource("3_rl2py")]
243+
unique_name_in_owner = true
243244
custom_minimum_size = Vector2(128, 64)
244245
layout_mode = 1
245246
anchors_preset = 15

0 commit comments

Comments
 (0)