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:
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -37,3 +37,5 @@ static func setPanel(targetName: String = ""):
|
||||
panel.showPanel()
|
||||
else:
|
||||
panel.hidePanel()
|
||||
static func closeCurrentPanel():
|
||||
setPanel()
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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 []
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user