1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

feat: 添加局外养成系统和游戏结束面板改进

添加新的物品类型紫水晶和钻石
实现局外属性升级系统
改进游戏结束面板的返回和退出功能
添加新的UI组件用于显示属性和物品
更新游戏规则和存储系统以支持局外养成
This commit is contained in:
2026-05-04 08:52:20 +08:00
parent e53af2a163
commit e1c017bf3a
17 changed files with 434 additions and 101 deletions
+1
View File
@@ -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
+61 -10
View File
@@ -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()