1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-27 22:41:56 +08:00

feat: 添加水晶和钻石物品系统

- 在EntityBase中新增水晶和钻石物品类型
- 敌人在死亡时概率掉落水晶,BOSS额外掉落钻石
- 游戏结束时将水晶和钻石存入OutGameStorage
- 调整Starter面板中钻石升级成本为0
- 在UI场景中添加水晶和钻石显示节点
This commit is contained in:
2026-05-04 09:15:49 +08:00
parent e1c017bf3a
commit bd85129ecc
6 changed files with 38 additions and 3 deletions
+10
View File
@@ -180,6 +180,16 @@ unique_name_in_owner = true
layout_mode = 2
type = 4
[node name="crystal" parent="root/itemsContainer/items" unique_id=707392257 instance=ExtResource("3_o2oi4")]
unique_name_in_owner = true
layout_mode = 2
type = 5
[node name="diamond" parent="root/itemsContainer/items" unique_id=1684500885 instance=ExtResource("3_o2oi4")]
unique_name_in_owner = true
layout_mode = 2
type = 6
[node name="energyContainer" type="PanelContainer" parent="root" unique_id=1886165069]
unique_name_in_owner = true
z_index = 1
+2
View File
@@ -25,6 +25,8 @@ 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
OutGameStorage.inventory[ItemStore.ItemType.CRYSTAL] += UIState.player.inventory[ItemStore.ItemType.CRYSTAL]
OutGameStorage.inventory[ItemStore.ItemType.DIAMOND] += UIState.player.inventory[ItemStore.ItemType.DIAMOND]
func afterOpen(_args: Array = []):
returnBtn.disabled = false
exitBtn.disabled = false
@@ -49,6 +49,8 @@ func beforeOpen(_args: Array = []):
startBtn.pressed.emit()
)
feedCounted += 1
func afterOpen(_args: Array = []):
startBtn.disabled = false
func clearFeeds():
for feed in initialFeedSelection.get_children():
+6 -2
View File
@@ -172,7 +172,7 @@ func beforeOpen(_args: Array = []):
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.cost(ItemStore.ItemType.DIAMOND, 0)
fieldShow.upgradable = true
fieldShow.upgradeValue = OutGameStorage.upgradableFieldsAdvance[field]
fieldShow.field = field
@@ -182,8 +182,12 @@ func beforeOpen(_args: Array = []):
func(newValue: float):
OutGameStorage.upgradableFieldsValue[fieldShow.field] = newValue
for index in len(fieldShow.costCounts):
fieldShow.costCounts[index] *= GameRule.outGameUpgradeMultipiler
if fieldShow.costCounts[index] == 0:
fieldShow.costCounts[index] += 1
else:
fieldShow.costCounts[index] *= GameRule.outGameUpgradeMultipiler
)
upgradeFieldsBox.add_child(fieldShow)
startSingleplayerBtn.disabled = false
Wave.current = 0
+18
View File
@@ -67,6 +67,8 @@ var inventory = {
ItemStore.ItemType.APPLE: 5,
ItemStore.ItemType.BEACHBALL: 0,
ItemStore.ItemType.SOUL: 0,
ItemStore.ItemType.CRYSTAL: 0,
ItemStore.ItemType.DIAMOND: 0
}
var inventoryMax = {
ItemStore.ItemType.BASEBALL: INF, # 无限
@@ -74,6 +76,8 @@ var inventoryMax = {
ItemStore.ItemType.APPLE: 5,
ItemStore.ItemType.BEACHBALL: INF,
ItemStore.ItemType.SOUL: INF,
ItemStore.ItemType.CRYSTAL: INF,
ItemStore.ItemType.DIAMOND: INF,
}
@export var defaultCooldownUnit: float = 100
@@ -415,6 +419,18 @@ func tryDie(by: BulletBase = null):
fields[FieldStore.Entity.MAX_HEALTH] * randf_range(1 - GameRule.beachballOffset, 1 + GameRule.beachballOffset),
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
)
for i in randi_range(0, 20 if isBoss else 3):
ItemDropped.generate(
ItemStore.ItemType.CRYSTAL,
5 if isBoss else 1,
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
)
if isBoss:
ItemDropped.generate(
ItemStore.ItemType.DIAMOND,
1,
position + MathTool.sampleInCircle(GameRule.itemDroppedSpawnOffset)
)
if isBoss:
ItemDropped.generate(
ItemStore.ItemType.SOUL,
@@ -544,6 +560,8 @@ static func generatePlayer(playerName: String) -> EntityBase:
var player = generate(ComponentManager.getCharacter("Rooster"), Vector2.ZERO, false)
player.displayName = playerName
player.name = "Player_%s" % playerName
for field in OutGameStorage.upgradableFieldsValue:
player.fields[field] += OutGameStorage.upgradableFieldsValue[field]
return player
static func generate(
entity: PackedScene,
-1
View File
@@ -118,7 +118,6 @@ func _ready():
)
for i in sounds.get_children():
i.process_mode = ProcessMode.PROCESS_MODE_ALWAYS
rebuildInfo()
debugRebuild = false # 只能在编辑器里打开
func _physics_process(_delta):
if debugRebuild: