1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00
Files
Dog-Lynx-And-HCN/scripts/Contents/Panels/MakeFeed.gd
T
fallingshrimp 6b31030887 feat(角色系统): 重构角色生成和升级系统
- 在EntityBase.gd中修改角色生成逻辑,使用FeedCardBase初始化角色属性
- 调整OutGameStorage.gd中的升级字段初始值和成本配置
- 在ComponentManager.gd中添加抽象组件管理功能
- 更新Rooster.tscn的默认武器为ChainGun
- 在Starter.gd中优化升级界面刷新逻辑,提取rebuildInfo方法
- 在MakeFeed.gd中添加feed卡片重建功能
2026-05-04 10:30:54 +08:00

89 lines
2.7 KiB
GDScript

@tool
extends FullscreenPanelBase
class_name MakeFeedPanel
var selectedCount: int = 0
var refreshNeedBaseballCount = 10
@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"
@onready var refreshBtn: Button = $"%refreshBtn"
@onready var needBB: ItemShow = $"%needBB"
func _ready():
skipBtn.pressed.connect(
func():
skipBtn.disabled = true
finish()
)
refreshBtn.pressed.connect(
func():
if UIState.player.inventory[ItemStore.ItemType.BASEBALL] >= refreshNeedBaseballCount:
UIState.player.inventory[ItemStore.ItemType.BASEBALL] -= refreshNeedBaseballCount
refreshNeedBaseballCount += randi_range(GameRule.refreshCountIncreaseCount.x, GameRule.refreshCountIncreaseCount.y)
regenerateCards()
)
ComponentManager.init()
for i in len(ComponentManager.feeds):
var feed = ComponentManager.getFeed(i).instantiate() as Feed
feed.selected.connect(
func(applied: bool):
if applied:
selectedCount += 1
updateValue()
if selectedCount >= UIState.player.fields[FieldStore.Entity.FEED_COUNT_CAN_MADE]:
finish()
for feedCard in feedCards.get_children():
if feedCard is Feed:
feed.rebuildInfo()
)
avaliableFeeds.add_child(feed)
func beforeOpen(_args: Array = []):
selectedCount = 0
regenerateCards()
func afterOpen(_args: Array = []):
skipBtn.disabled = false
func clearCards():
for i in feedCards.get_children():
feedCards.remove_child(i)
avaliableFeeds.add_child(i)
func updateValue():
waveLabel.text = str(Wave.current + 1)
countLabel.text = "%d" % (UIState.player.fields[FieldStore.Entity.FEED_COUNT_CAN_MADE] - selectedCount)
needBB.count = refreshNeedBaseballCount
func finish():
var center = Vector2.ZERO
for player in EntityBase.getPlayers():
center += player.position
center /= len(EntityBase.getPlayers())
WorldManager.rootNode.spawnWave(center)
UIState.closeCurrentPanel()
func regenerateCards():
updateValue()
clearCards()
var feeds = generateCardByQuality()
for feed in feeds:
feed.show()
feed.rebuildInfo()
avaliableFeeds.remove_child(feed)
feedCards.add_child(feed)
func generateCardByQuality():
var feeds = []
for i in range(len(avaliableFeeds.get_children())):
var feed = avaliableFeeds.get_children()[i] as Feed
for j in range(feed.nameLabel.weight(UIState.player)):
feeds.append(i)
var result = []
for i in range(UIState.player.fields[FieldStore.Entity.FEED_COUNT_SHOW]):
feeds.shuffle()
var feed = avaliableFeeds.get_children()[feeds[0]] as Feed
feed.rebuildInfo()
result.append(feed)
feeds = ArrayTool.removeAll(feeds, feeds[0])
return result