mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-07-09 11:32:54 +08:00
feat: 更新饲料和物品显示逻辑,添加香蕉饲料场景,重构字段显示功能
This commit is contained in:
@@ -45,7 +45,7 @@ texture = ExtResource("1_jonms")
|
|||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 4
|
size_flags_horizontal = 4
|
||||||
text = "香蕉"
|
text = "未命名饲料"
|
||||||
|
|
||||||
[node name="fields" type="VBoxContainer" parent="container"]
|
[node name="fields" type="VBoxContainer" parent="container"]
|
||||||
unique_name_in_owner = true
|
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"]
|
[ext_resource type="Texture2D" uid="uid://bks8jmctleina" path="res://resources/items/baseball.svg" id="1_hyowb"]
|
||||||
|
|
||||||
[node name="ItemShow" type="HBoxContainer"]
|
[node name="ItemShow" type="HBoxContainer"]
|
||||||
|
size_flags_horizontal = 6
|
||||||
|
size_flags_vertical = 6
|
||||||
script = ExtResource("1_2dhsb")
|
script = ExtResource("1_2dhsb")
|
||||||
|
|
||||||
[node name="avatar" type="TextureRect" parent="."]
|
[node name="avatar" type="TextureRect" parent="."]
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ static func generate(
|
|||||||
var instance: BulletBase = bullet.instantiate()
|
var instance: BulletBase = bullet.instantiate()
|
||||||
instance.launcher = launchBy
|
instance.launcher = launchBy
|
||||||
instance.position = spawnPosition
|
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:
|
if addToWorld:
|
||||||
WorldManager.rootNode.add_child(instance)
|
WorldManager.rootNode.add_child(instance)
|
||||||
return instance
|
return instance
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ var fields = {
|
|||||||
FieldStore.Entity.CRIT_RATE: 0.05,
|
FieldStore.Entity.CRIT_RATE: 0.05,
|
||||||
FieldStore.Entity.CRIT_DAMAGE: 1,
|
FieldStore.Entity.CRIT_DAMAGE: 1,
|
||||||
FieldStore.Entity.PENERATE: 0,
|
FieldStore.Entity.PENERATE: 0,
|
||||||
|
FieldStore.Entity.OFFSET_SHOOT: 3
|
||||||
}
|
}
|
||||||
|
|
||||||
@export var cooldownUnit: float = 100 # 100毫秒每次攻击
|
@export var cooldownUnit: float = 100 # 100毫秒每次攻击
|
||||||
|
|||||||
@@ -1,12 +1,21 @@
|
|||||||
@tool
|
@tool
|
||||||
extends HBoxContainer
|
extends HBoxContainer
|
||||||
|
class_name FieldShow
|
||||||
|
|
||||||
@export var field: FieldStore.Entity = FieldStore.Entity.MAX_HEALTH
|
@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 nameLabel: Label = $"%name"
|
||||||
@onready var valueLabel: Label = $"%value"
|
@onready var valueLabel: Label = $"%value"
|
||||||
|
|
||||||
func _process(_delta):
|
func _ready():
|
||||||
nameLabel.text = FieldStore.entityMap[field]
|
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
|
@tool
|
||||||
extends HBoxContainer
|
extends HBoxContainer
|
||||||
|
class_name ItemShow
|
||||||
|
|
||||||
@export var type: ItemStore.ItemType = ItemStore.ItemType.BASEBALL
|
@export var type: ItemStore.ItemType = ItemStore.ItemType.BASEBALL
|
||||||
@export var count: int = 0
|
@export var count: int = 0
|
||||||
@@ -7,6 +8,6 @@ extends HBoxContainer
|
|||||||
@onready var avatarTexture: TextureRect = $"%avatar"
|
@onready var avatarTexture: TextureRect = $"%avatar"
|
||||||
@onready var countLabel: Label = $"%count"
|
@onready var countLabel: Label = $"%count"
|
||||||
|
|
||||||
func _process(_delta):
|
func _ready():
|
||||||
avatarTexture.texture = load("res://resources/items/%s.svg" % ItemStore.idMap[type])
|
avatarTexture.texture = load("res://resources/items/%s.svg" % ItemStore.idMap[type])
|
||||||
countLabel.text = str(count)
|
countLabel.text = str(count)
|
||||||
|
|||||||
+26
-4
@@ -5,11 +5,33 @@ class_name Feed
|
|||||||
@export var avatarTexture: Texture2D = null
|
@export var avatarTexture: Texture2D = null
|
||||||
@export var displayName: String = "未命名饲料"
|
@export var displayName: String = "未命名饲料"
|
||||||
@export var fields: Array[FieldStore.Entity] = []
|
@export var fields: Array[FieldStore.Entity] = []
|
||||||
@export var values: Array[float] = []
|
@export var fieldValues: Array[float] = []
|
||||||
@export var costs: Array[ItemStore.ItemType] = []
|
@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 nameLabel: Label = $"%name"
|
||||||
@onready var fieldsBox: VBoxContainer = $"%fields"
|
@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
|
@tool
|
||||||
class_name FieldStore
|
class_name FieldStore
|
||||||
|
|
||||||
|
enum DataType {
|
||||||
|
VALUE,
|
||||||
|
PERCENT,
|
||||||
|
ANGLE
|
||||||
|
}
|
||||||
enum Entity {
|
enum Entity {
|
||||||
MAX_HEALTH,
|
MAX_HEALTH,
|
||||||
DAMAGE_MULTIPILER,
|
DAMAGE_MULTIPILER,
|
||||||
@@ -8,7 +13,8 @@ enum Entity {
|
|||||||
ATTACK_SPEED,
|
ATTACK_SPEED,
|
||||||
CRIT_RATE,
|
CRIT_RATE,
|
||||||
CRIT_DAMAGE,
|
CRIT_DAMAGE,
|
||||||
PENERATE
|
PENERATE,
|
||||||
|
OFFSET_SHOOT
|
||||||
}
|
}
|
||||||
static var entityMap = {
|
static var entityMap = {
|
||||||
Entity.MAX_HEALTH: "最大生命值",
|
Entity.MAX_HEALTH: "最大生命值",
|
||||||
@@ -17,7 +23,18 @@ static var entityMap = {
|
|||||||
Entity.ATTACK_SPEED: "攻击速度",
|
Entity.ATTACK_SPEED: "攻击速度",
|
||||||
Entity.CRIT_RATE: "暴击率",
|
Entity.CRIT_RATE: "暴击率",
|
||||||
Entity.CRIT_DAMAGE: "暴击伤害",
|
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 {
|
enum Bullet {
|
||||||
@@ -30,3 +47,8 @@ static var bulletMap = {
|
|||||||
Bullet.DAMAGE: "伤害",
|
Bullet.DAMAGE: "伤害",
|
||||||
Bullet.PENERATE: "穿透"
|
Bullet.PENERATE: "穿透"
|
||||||
}
|
}
|
||||||
|
static var bulletMapType = {
|
||||||
|
Bullet.SPEED: DataType.VALUE,
|
||||||
|
Bullet.DAMAGE: DataType.VALUE,
|
||||||
|
Bullet.PENERATE: DataType.PERCENT
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user