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:
@@ -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
|
||||
|
||||
@@ -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 = "香蕉"
|
||||
@@ -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="."]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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毫秒每次攻击
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user