mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-06-28 14:32:30 +08:00
feat(FieldShow): 添加实体视图转换功能及新字段
为FieldShow组件添加useViewCast参数和entity引用,支持通过视图转换函数动态计算显示值 新增DROPPED_ITEM_GRAVITY相关字段到FieldStore 调整ItemDropped状态机的物品移动速度计算参数
This commit is contained in:
@@ -5,11 +5,17 @@ class_name FieldShow
|
|||||||
@export var field: FieldStore.Entity = FieldStore.Entity.MAX_HEALTH
|
@export var field: FieldStore.Entity = FieldStore.Entity.MAX_HEALTH
|
||||||
@export var value: float = 0
|
@export var value: float = 0
|
||||||
@export var showSign: bool = true
|
@export var showSign: bool = true
|
||||||
|
@export var entity: EntityBase = null
|
||||||
|
@export var useViewCast: bool = false
|
||||||
|
|
||||||
@onready var nameLabel: Label = $"%name"
|
@onready var nameLabel: Label = $"%name"
|
||||||
@onready var valueLabel: Label = $"%value"
|
@onready var valueLabel: Label = $"%value"
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
if useViewCast:
|
||||||
|
var caster = FieldStore.entityViewCastMap.get(field)
|
||||||
|
if caster:
|
||||||
|
value = caster.call(entity, value)
|
||||||
nameLabel.text = FieldStore.entityMap[field]
|
nameLabel.text = FieldStore.entityMap[field]
|
||||||
var formattedValue: String
|
var formattedValue: String
|
||||||
var dataType = FieldStore.entityMapType[field]
|
var dataType = FieldStore.entityMapType[field]
|
||||||
@@ -21,9 +27,11 @@ func _ready():
|
|||||||
formattedValue = (MathTool.signBeforeStr(value * 100) if showSign else str(value * 100)) + "%"
|
formattedValue = (MathTool.signBeforeStr(value * 100) if showSign else str(value * 100)) + "%"
|
||||||
valueLabel.text = formattedValue
|
valueLabel.text = formattedValue
|
||||||
|
|
||||||
static func create(newField: FieldStore.Entity, newValue: float, newShowSign: bool) -> FieldShow:
|
static func create(newField: FieldStore.Entity, newValue: float, newShowSign: bool, newEntity: EntityBase, newUseViewCast: bool) -> FieldShow:
|
||||||
var fieldShow = preload("res://components/UI/FieldShow.tscn").instantiate()
|
var fieldShow = preload("res://components/UI/FieldShow.tscn").instantiate()
|
||||||
fieldShow.field = newField
|
fieldShow.field = newField
|
||||||
fieldShow.value = newValue
|
fieldShow.value = newValue
|
||||||
fieldShow.showSign = newShowSign
|
fieldShow.showSign = newShowSign
|
||||||
|
fieldShow.entity = newEntity
|
||||||
|
fieldShow.useViewCast = newUseViewCast
|
||||||
return fieldShow
|
return fieldShow
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ func _physics_process(_delta):
|
|||||||
linear_velocity = Vector2.ZERO
|
linear_velocity = Vector2.ZERO
|
||||||
else:
|
else:
|
||||||
var direction = (targetPlayer.position - position).normalized()
|
var direction = (targetPlayer.position - position).normalized()
|
||||||
var speed = 4000.0 / ((targetPlayer.position - position).length() ** (1 / 3.0))
|
var speed = 5000.0 / ((targetPlayer.position - position).length() ** (1 / 3.0))
|
||||||
apply_central_force(direction * speed)
|
apply_central_force(direction * speed)
|
||||||
if position.distance_to(targetPlayer.position) < 60:
|
if position.distance_to(targetPlayer.position) < 60:
|
||||||
targetPlayer.collectItem(item, stackCount)
|
targetPlayer.collectItem(item, stackCount)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ func _physics_process(_delta):
|
|||||||
for i in fields.get_children():
|
for i in fields.get_children():
|
||||||
fields.remove_child(i)
|
fields.remove_child(i)
|
||||||
for i in player.fields:
|
for i in player.fields:
|
||||||
fields.add_child(FieldShow.create(i, player.fields[i], false))
|
fields.add_child(FieldShow.create(i, player.fields[i], false, player, true))
|
||||||
fieldsAnimator.play("show")
|
fieldsAnimator.play("show")
|
||||||
if Input.is_action_just_released("showFields"):
|
if Input.is_action_just_released("showFields"):
|
||||||
fieldsAnimator.play("hide")
|
fieldsAnimator.play("hide")
|
||||||
|
|||||||
@@ -25,7 +25,9 @@ enum Entity {
|
|||||||
FEED_COUNT_SHOW,
|
FEED_COUNT_SHOW,
|
||||||
FEED_COUNT_CAN_MADE,
|
FEED_COUNT_CAN_MADE,
|
||||||
MAX_ENERGY,
|
MAX_ENERGY,
|
||||||
LUCK_VALUE
|
LUCK_VALUE,
|
||||||
|
DROPPED_ITEM_GRAVITY_MULTIPILER,
|
||||||
|
DROPPED_ITEM_GRAVITY_INFLUENCE_BY_DISTANCE_MULTIPILER
|
||||||
}
|
}
|
||||||
static var entityMap = {
|
static var entityMap = {
|
||||||
Entity.MAX_HEALTH: "生命上限",
|
Entity.MAX_HEALTH: "生命上限",
|
||||||
@@ -46,7 +48,9 @@ static var entityMap = {
|
|||||||
Entity.FEED_COUNT_SHOW: "可选饲料数量",
|
Entity.FEED_COUNT_SHOW: "可选饲料数量",
|
||||||
Entity.FEED_COUNT_CAN_MADE: "可制作饲料数量",
|
Entity.FEED_COUNT_CAN_MADE: "可制作饲料数量",
|
||||||
Entity.MAX_ENERGY: "能量上限",
|
Entity.MAX_ENERGY: "能量上限",
|
||||||
Entity.LUCK_VALUE: "幸运"
|
Entity.LUCK_VALUE: "幸运值",
|
||||||
|
Entity.DROPPED_ITEM_GRAVITY_MULTIPILER: "掉落物重力倍率",
|
||||||
|
Entity.DROPPED_ITEM_GRAVITY_INFLUENCE_BY_DISTANCE_MULTIPILER: "掉落物重力受距离影响"
|
||||||
}
|
}
|
||||||
static var entityMapType = {
|
static var entityMapType = {
|
||||||
Entity.MAX_HEALTH: DataType.VALUE,
|
Entity.MAX_HEALTH: DataType.VALUE,
|
||||||
@@ -67,7 +71,9 @@ static var entityMapType = {
|
|||||||
Entity.FEED_COUNT_SHOW: DataType.VALUE,
|
Entity.FEED_COUNT_SHOW: DataType.VALUE,
|
||||||
Entity.FEED_COUNT_CAN_MADE: DataType.VALUE,
|
Entity.FEED_COUNT_CAN_MADE: DataType.VALUE,
|
||||||
Entity.MAX_ENERGY: DataType.VALUE,
|
Entity.MAX_ENERGY: DataType.VALUE,
|
||||||
Entity.LUCK_VALUE: DataType.VALUE
|
Entity.LUCK_VALUE: DataType.VALUE,
|
||||||
|
Entity.DROPPED_ITEM_GRAVITY_MULTIPILER: DataType.PERCENT,
|
||||||
|
Entity.DROPPED_ITEM_GRAVITY_INFLUENCE_BY_DISTANCE_MULTIPILER: DataType.VALUE
|
||||||
}
|
}
|
||||||
static var entityMaxValueMap = {
|
static var entityMaxValueMap = {
|
||||||
Entity.CRIT_RATE: 1,
|
Entity.CRIT_RATE: 1,
|
||||||
@@ -91,6 +97,11 @@ static var entityApplier = {
|
|||||||
return true
|
return true
|
||||||
,
|
,
|
||||||
}
|
}
|
||||||
|
static var entityViewCastMap = {
|
||||||
|
Entity.EXTRA_APPLE_MAX: func(entity, _value):
|
||||||
|
return entity.inventoryMax[ItemStore.ItemType.APPLE]
|
||||||
|
,
|
||||||
|
}
|
||||||
|
|
||||||
enum Bullet {
|
enum Bullet {
|
||||||
SPEED,
|
SPEED,
|
||||||
|
|||||||
Reference in New Issue
Block a user