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

feat: 更新饲料和物品显示逻辑,添加香蕉饲料场景,重构字段显示功能

This commit is contained in:
2025-08-26 18:44:28 +08:00
parent 7e5a8861ec
commit 3197fe6048
9 changed files with 84 additions and 12 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ texture = ExtResource("1_jonms")
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
text = "香蕉"
text = "未命名饲料"
[node name="fields" type="VBoxContainer" parent="container"]
unique_name_in_owner = true
+15
View File
@@ -0,0 +1,15 @@
[gd_scene load_steps=3 format=3 uid="uid://btisbc7ehj4fo"]
[ext_resource type="PackedScene" uid="uid://b4cwipt17nh7g" path="res://components/Abstracts/FeedCardBase.tscn" id="1_tdrm3"]
[ext_resource type="Texture2D" uid="uid://b7vxserbhskol" path="res://resources/feeds/banana.svg" id="2_2mlfi"]
[node name="Banana" instance=ExtResource("1_tdrm3")]
avatarTexture = ExtResource("2_2mlfi")
displayName = "香蕉"
fields = Array[int]([0, 3, 7])
fieldValues = Array[float]([10.0, 0.1])
costs = Array[int]([0, 1])
costCounts = Array[int]([5, 10])
[node name="name" parent="container/info" index="1"]
text = "香蕉"
+2
View File
@@ -4,6 +4,8 @@
[ext_resource type="Texture2D" uid="uid://bks8jmctleina" path="res://resources/items/baseball.svg" id="1_hyowb"]
[node name="ItemShow" type="HBoxContainer"]
size_flags_horizontal = 6
size_flags_vertical = 6
script = ExtResource("1_2dhsb")
[node name="avatar" type="TextureRect" parent="."]
+1 -1
View File
@@ -56,7 +56,7 @@ static func generate(
var instance: BulletBase = bullet.instantiate()
instance.launcher = launchBy
instance.position = spawnPosition
instance.rotation = spawnRotation
instance.rotation = spawnRotation + randf_range(-launchBy.fields.get(FieldStore.Entity.OFFSET_SHOOT), launchBy.fields.get(FieldStore.Entity.OFFSET_SHOOT))
if addToWorld:
WorldManager.rootNode.add_child(instance)
return instance
+1
View File
@@ -9,6 +9,7 @@ var fields = {
FieldStore.Entity.CRIT_RATE: 0.05,
FieldStore.Entity.CRIT_DAMAGE: 1,
FieldStore.Entity.PENERATE: 0,
FieldStore.Entity.OFFSET_SHOOT: 3
}
@export var cooldownUnit: float = 100 # 100毫秒每次攻击
+12 -3
View File
@@ -1,12 +1,21 @@
@tool
extends HBoxContainer
class_name FieldShow
@export var field: FieldStore.Entity = FieldStore.Entity.MAX_HEALTH
@export var value: String = ""
@export var value: float = 0
@onready var nameLabel: Label = $"%name"
@onready var valueLabel: Label = $"%value"
func _process(_delta):
func _ready():
nameLabel.text = FieldStore.entityMap[field]
valueLabel.text = value
var formattedValue: String
var dataType = FieldStore.entityMapType[field]
if dataType == FieldStore.DataType.VALUE:
formattedValue = str(value)
elif dataType == FieldStore.DataType.ANGLE:
formattedValue = str(value) + "°"
elif dataType == FieldStore.DataType.PERCENT:
formattedValue = "%.1f" % (value * 100) + "%"
valueLabel.text = formattedValue
+2 -1
View File
@@ -1,5 +1,6 @@
@tool
extends HBoxContainer
class_name ItemShow
@export var type: ItemStore.ItemType = ItemStore.ItemType.BASEBALL
@export var count: int = 0
@@ -7,6 +8,6 @@ extends HBoxContainer
@onready var avatarTexture: TextureRect = $"%avatar"
@onready var countLabel: Label = $"%count"
func _process(_delta):
func _ready():
avatarTexture.texture = load("res://resources/items/%s.svg" % ItemStore.idMap[type])
countLabel.text = str(count)
+26 -4
View File
@@ -5,11 +5,33 @@ class_name Feed
@export var avatarTexture: Texture2D = null
@export var displayName: String = "未命名饲料"
@export var fields: Array[FieldStore.Entity] = []
@export var values: Array[float] = []
@export var fieldValues: Array[float] = []
@export var costs: Array[ItemStore.ItemType] = []
@export var counts: Array[int] = []
@export var costCounts: Array[int] = []
@onready var avatar: TextureRect = $"%avatar"
@onready var avatarRect: TextureRect = $"%avatar"
@onready var nameLabel: Label = $"%name"
@onready var fieldsBox: VBoxContainer = $"%fields"
@onready var costsBox: VBoxContainer = $"%costs"
@onready var costsBox: GridContainer = $"%costs"
func _ready():
avatarRect.texture = avatarTexture
nameLabel.text = displayName
for i in fieldsBox.get_children():
i.queue_free()
for i in range(min(fields.size(), fieldValues.size())):
var field = fields[i]
var value = fieldValues[i]
var fieldShow: FieldShow = preload("res://components/UI/FieldShow.tscn").instantiate()
fieldShow.field = field
fieldShow.value = str(value)
fieldsBox.add_child(fieldShow)
for i in costsBox.get_children():
i.queue_free()
for i in range(min(costs.size(), costCounts.size())):
var cost = costs[i]
var count = costCounts[i]
var costShow: ItemShow = preload("res://components/UI/ItemShow.tscn").instantiate()
costShow.type = cost
costShow.count = count
costsBox.add_child(costShow)
+24 -2
View File
@@ -1,6 +1,11 @@
@tool
class_name FieldStore
enum DataType {
VALUE,
PERCENT,
ANGLE
}
enum Entity {
MAX_HEALTH,
DAMAGE_MULTIPILER,
@@ -8,7 +13,8 @@ enum Entity {
ATTACK_SPEED,
CRIT_RATE,
CRIT_DAMAGE,
PENERATE
PENERATE,
OFFSET_SHOOT
}
static var entityMap = {
Entity.MAX_HEALTH: "最大生命值",
@@ -17,7 +23,18 @@ static var entityMap = {
Entity.ATTACK_SPEED: "攻击速度",
Entity.CRIT_RATE: "暴击率",
Entity.CRIT_DAMAGE: "暴击伤害",
Entity.PENERATE: "穿透"
Entity.PENERATE: "穿透",
Entity.OFFSET_SHOOT: "散射角"
}
static var entityMapType = {
Entity.MAX_HEALTH: DataType.VALUE,
Entity.DAMAGE_MULTIPILER: DataType.PERCENT,
Entity.MOVEMENT_SPEED: DataType.PERCENT,
Entity.ATTACK_SPEED: DataType.PERCENT,
Entity.CRIT_RATE: DataType.PERCENT,
Entity.CRIT_DAMAGE: DataType.PERCENT,
Entity.PENERATE: DataType.PERCENT,
Entity.OFFSET_SHOOT: DataType.ANGLE
}
enum Bullet {
@@ -29,4 +46,9 @@ static var bulletMap = {
Bullet.SPEED: "速度",
Bullet.DAMAGE: "伤害",
Bullet.PENERATE: "穿透"
}
static var bulletMapType = {
Bullet.SPEED: DataType.VALUE,
Bullet.DAMAGE: DataType.VALUE,
Bullet.PENERATE: DataType.PERCENT
}