1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

Refactor feed components and UI interactions

- Updated various feed components (Cake, Cupcake, Dango, Donut, FruitPlatter, FruitSalad, Milk, Orange, RedJam, Strawberry, Taco, WaterBottle, Xigua-Full, Xigua-Half, YellowJam) to correct names, textures, and display names.
- Modified MakeFeed scene to improve feed selection and display logic, including the addition of skip functionality.
- Enhanced UIState and EntityBase scripts to manage feed counts and selections more effectively.
- Introduced DirTool for directory operations and improved file loading mechanisms.
- Adjusted TickTool for frame-based operations.
This commit is contained in:
2025-08-27 16:33:21 +08:00
parent a3ae7ae887
commit 9e396eef3d
24 changed files with 164 additions and 162 deletions
+38 -13
View File
@@ -1,26 +1,51 @@
@tool
extends FullscreenPanelBase
@onready var avaliableFeeds: Node = $"%avaliableFeeds"
var selectedCount: int = 0
@onready var avaliableFeeds: Node2D = $"%avaliableFeeds"
@onready var feedCards: HBoxContainer = $"%feedcards"
@onready var waveLabel: RichTextLabel = $"%wave"
@onready var countLabel: RichTextLabel = $"%count"
@onready var skipBtn: Button = $"%skipBtn"
func _ready():
skipBtn.pressed.connect(
func():
finish()
)
for file in DirTool.listdir("res://components/Feeds/"):
var i = load(file).instantiate() as Feed
i.selected.connect(
func(applied: bool):
if applied:
selectedCount += 1
updateValue()
if selectedCount >= UIState.player.fields[FieldStore.Entity.FEED_COUNT_CAN_MADE]:
finish()
)
avaliableFeeds.add_child(i)
func beforeOpen():
selectedCount = 0
afterClose()
updateValue()
var feeds: Array[Feed] = []
for i in avaliableFeeds.get_children():
feeds.append(i)
var allHad = false
while not allHad:
afterClose()
feeds.shuffle()
for i in range(3):
var feed = feeds[i] as Feed
feed.show()
avaliableFeeds.remove_child(feed)
feedCards.add_child(feed)
if feed.allHad(UIState.player):
allHad = true
feeds.shuffle()
for i in range(UIState.player.fields[FieldStore.Entity.FEED_COUNT_SHOW]):
var feed = feeds[i] as Feed
avaliableFeeds.remove_child(feed)
feedCards.add_child(feed)
func afterClose():
for i in feedCards.get_children():
i.hide()
feedCards.remove_child(i)
avaliableFeeds.add_child(i)
func updateValue():
waveLabel.text = str(Wave.current + 1)
countLabel.text = str(UIState.player.fields[FieldStore.Entity.FEED_COUNT_CAN_MADE] - selectedCount)
func finish():
Wave.next()
UIState.closeCurrentPanel()
+3 -1
View File
@@ -16,7 +16,9 @@ var fields = {
FieldStore.Entity.PENARATION_RESISTANCE: 0,
FieldStore.Entity.PRICE_REDUCTION: 0,
FieldStore.Entity.EXTRA_BULLET_COUNT: 0,
FieldStore.Entity.DROP_APPLE_RATE: 0
FieldStore.Entity.DROP_APPLE_RATE: 0,
FieldStore.Entity.FEED_COUNT_SHOW: 3,
FieldStore.Entity.FEED_COUNT_CAN_MADE: 1
}
var inventory = {
ItemStore.ItemType.BASEBALL: 100,
+2
View File
@@ -37,3 +37,5 @@ static func setPanel(targetName: String = ""):
panel.showPanel()
else:
panel.hidePanel()
static func closeCurrentPanel():
setPanel()
+5 -4
View File
@@ -2,6 +2,8 @@
extends PanelContainer
class_name Feed
signal selected(applied: bool)
@export var avatarTexture: Texture2D = preload("res://icon.svg")
@export var displayName: String = "未命名饲料"
@export var fields: Array[FieldStore.Entity] = []
@@ -18,10 +20,7 @@ class_name Feed
func _ready():
selectButton.pressed.connect(
func():
if apply(UIState.player):
UIState.setPanel()
queue_free()
Wave.next()
apply(UIState.player)
)
avatarRect.texture = avatarTexture
nameLabel.text = "[b]" + displayName + "[/b]"
@@ -70,6 +69,8 @@ func apply(entity: EntityBase):
var applier = FieldStore.entityApplier.get(field, null)
if !applier or applier.call(entity, value):
entity.fields[field] += value
hide()
selected.emit(allHave)
return allHave
func multipiler() -> float:
if is_instance_valid(UIState.player):
+16
View File
@@ -0,0 +1,16 @@
class_name DirTool
static func listdir(path: String) -> Array[String]:
var files: Array[String] = []
var dir = DirAccess.open(path)
if dir:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if file_name != "." and file_name != "..":
files.append(path + file_name)
file_name = dir.get_next()
dir.list_dir_end()
return files
else:
return []
+12 -3
View File
@@ -21,7 +21,9 @@ enum Entity {
PENARATION_RESISTANCE,
PRICE_REDUCTION,
EXTRA_BULLET_COUNT,
DROP_APPLE_RATE
DROP_APPLE_RATE,
FEED_COUNT_SHOW,
FEED_COUNT_CAN_MADE
}
static var entityMap = {
Entity.MAX_HEALTH: "最大生命值",
@@ -38,7 +40,9 @@ static var entityMap = {
Entity.PENARATION_RESISTANCE: "穿透抗性",
Entity.PRICE_REDUCTION: "饲料降价",
Entity.EXTRA_BULLET_COUNT: "额外子弹",
Entity.DROP_APPLE_RATE: "苹果掉落率"
Entity.DROP_APPLE_RATE: "苹果掉落率",
Entity.FEED_COUNT_SHOW: "可选饲料数量",
Entity.FEED_COUNT_CAN_MADE: "可制作饲料数量"
}
static var entityMapType = {
Entity.MAX_HEALTH: DataType.VALUE,
@@ -55,7 +59,9 @@ static var entityMapType = {
Entity.PENARATION_RESISTANCE: DataType.PERCENT,
Entity.PRICE_REDUCTION: DataType.PERCENT,
Entity.EXTRA_BULLET_COUNT: DataType.VALUE,
Entity.DROP_APPLE_RATE: DataType.PERCENT
Entity.DROP_APPLE_RATE: DataType.PERCENT,
Entity.FEED_COUNT_SHOW: DataType.VALUE,
Entity.FEED_COUNT_CAN_MADE: DataType.VALUE
}
static var entityApplier = {
Entity.MAX_HEALTH: func(entity, value):
@@ -64,6 +70,9 @@ static var entityApplier = {
Entity.EXTRA_APPLE_MAX: func(entity, value):
entity.inventoryMax[ItemStore.ItemType.APPLE] += value
,
Entity.EXTRA_BULLET_COUNT: func(entity, value):
entity.fields[Entity.OFFSET_SHOOT] += value * 5
,
}
enum Bullet {
+4 -1
View File
@@ -1,4 +1,7 @@
class_name TickTool
static func millseconds(ms: int):
return await WorldManager.tree.create_timer(ms / 1000.0).timeout
return await WorldManager.tree.create_timer(ms / 1000.0).timeout
static func frame(count: int = 1):
for i in range(count):
await WorldManager.tree.physics_frame