2025-08-26 18:09:04 +08:00
|
|
|
@tool
|
|
|
|
|
extends HBoxContainer
|
2025-08-26 18:44:28 +08:00
|
|
|
class_name FieldShow
|
2025-08-26 18:09:04 +08:00
|
|
|
|
|
|
|
|
@export var field: FieldStore.Entity = FieldStore.Entity.MAX_HEALTH
|
2025-08-26 18:44:28 +08:00
|
|
|
@export var value: float = 0
|
2025-08-28 13:58:31 +08:00
|
|
|
@export var showSign: bool = true
|
2025-08-29 07:54:00 +08:00
|
|
|
@export var entity: EntityBase = null
|
|
|
|
|
@export var useViewCast: bool = false
|
2025-09-06 19:29:46 +08:00
|
|
|
@export var maxed: bool = false
|
2025-09-30 17:51:22 +08:00
|
|
|
@export var showAdvantage: bool = false
|
2025-08-26 18:09:04 +08:00
|
|
|
|
2025-09-30 18:24:40 +08:00
|
|
|
@onready var icon: TextureRect = $"%icon"
|
2025-08-26 18:09:04 +08:00
|
|
|
@onready var nameLabel: Label = $"%name"
|
|
|
|
|
@onready var valueLabel: Label = $"%value"
|
|
|
|
|
|
2025-08-26 22:31:28 +08:00
|
|
|
func _ready():
|
2025-08-29 07:54:00 +08:00
|
|
|
if useViewCast:
|
|
|
|
|
var caster = FieldStore.entityViewCastMap.get(field)
|
|
|
|
|
if caster:
|
|
|
|
|
value = caster.call(entity, value)
|
2025-08-26 18:09:04 +08:00
|
|
|
nameLabel.text = FieldStore.entityMap[field]
|
2025-09-30 18:24:40 +08:00
|
|
|
icon.texture = ComponentManager.getFieldTexture(FieldStore.entityMap.get(field))
|
2025-08-26 18:44:28 +08:00
|
|
|
var formattedValue: String
|
|
|
|
|
var dataType = FieldStore.entityMapType[field]
|
|
|
|
|
if dataType == FieldStore.DataType.VALUE:
|
2026-01-18 15:31:52 +08:00
|
|
|
formattedValue = "%s" % (MathTool.toSigned(value) if showSign else str(value))
|
2025-09-06 16:11:59 +08:00
|
|
|
elif dataType == FieldStore.DataType.INTEGER:
|
2026-01-18 15:31:52 +08:00
|
|
|
formattedValue = "%s" % (MathTool.toSigned(int(value)) if showSign else str(int(value)))
|
2025-08-26 18:44:28 +08:00
|
|
|
elif dataType == FieldStore.DataType.ANGLE:
|
2026-01-18 15:31:52 +08:00
|
|
|
formattedValue = "%s°" % (MathTool.toSigned(value) if showSign else str(value))
|
2025-08-26 18:44:28 +08:00
|
|
|
elif dataType == FieldStore.DataType.PERCENT:
|
2026-01-18 15:31:52 +08:00
|
|
|
formattedValue = (MathTool.toSigned(value * 100) if showSign else str(value * 100)) + "%"
|
2025-09-06 19:29:46 +08:00
|
|
|
valueLabel.label_settings = valueLabel.label_settings.duplicate()
|
2025-08-26 18:44:28 +08:00
|
|
|
valueLabel.text = formattedValue
|
2025-09-06 19:29:46 +08:00
|
|
|
if maxed:
|
|
|
|
|
valueLabel.label_settings.font_color = Color(1, 0.3, 0.3)
|
|
|
|
|
valueLabel.text = "MAX%s" % valueLabel.text
|
2025-09-30 17:51:22 +08:00
|
|
|
elif showAdvantage:
|
|
|
|
|
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
|
2025-09-06 19:29:46 +08:00
|
|
|
else:
|
|
|
|
|
valueLabel.label_settings.font_color = Color(1, 1, 1)
|
2025-08-28 13:58:31 +08:00
|
|
|
|
2025-08-29 07:54:00 +08:00
|
|
|
static func create(newField: FieldStore.Entity, newValue: float, newShowSign: bool, newEntity: EntityBase, newUseViewCast: bool) -> FieldShow:
|
2025-09-21 13:34:51 +08:00
|
|
|
var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate()
|
2025-08-28 13:58:31 +08:00
|
|
|
fieldShow.field = newField
|
|
|
|
|
fieldShow.value = newValue
|
|
|
|
|
fieldShow.showSign = newShowSign
|
2025-08-29 07:54:00 +08:00
|
|
|
fieldShow.entity = newEntity
|
|
|
|
|
fieldShow.useViewCast = newUseViewCast
|
2025-08-28 13:58:31 +08:00
|
|
|
return fieldShow
|