mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-27 22:41:56 +08:00
5e82841d58
将Rooster角色的武器从蓝色水晶更换为紫色水晶,并移除了不再使用的树和道像武器 修复FieldShow状态机中costItems循环的长度检查问题
109 lines
3.8 KiB
GDScript
109 lines
3.8 KiB
GDScript
@tool
|
|
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
|
|
@export var entity: EntityBase = null
|
|
@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 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():
|
|
for index in len(costItems):
|
|
var item = costItems[index]
|
|
OutGameStorage.inventory[item] -= costCounts[index]
|
|
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)
|
|
var formattedValue: String = ""
|
|
var dataType = FieldStore.entityMapType[field]
|
|
if dataType == FieldStore.DataType.VALUE:
|
|
formattedValue = "%s" % (MathTool.toSigned(value) if showSign else str(value))
|
|
elif dataType == FieldStore.DataType.INTEGER:
|
|
formattedValue = "%s" % (MathTool.toSigned(int(value)) if showSign else str(int(value)))
|
|
elif dataType == FieldStore.DataType.ANGLE:
|
|
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.text = formattedValue
|
|
if maxed:
|
|
valueLabel.label_settings.font_color = Color(1, 0.3, 0.3)
|
|
valueLabel.text = "MAX%s" % valueLabel.text
|
|
elif showAdvantage:
|
|
if value == 0:
|
|
valueLabel.label_settings.font_color = Color.WHITE
|
|
else:
|
|
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()
|
|
fieldShow.field = newField
|
|
fieldShow.value = newValue
|
|
fieldShow.showSign = newShowSign
|
|
fieldShow.entity = newEntity
|
|
fieldShow.useViewCast = newUseViewCast
|
|
return fieldShow
|