2025-08-26 13:56:12 +08:00
|
|
|
extends CanvasLayer
|
|
|
|
|
class_name UIState
|
|
|
|
|
|
2026-01-24 15:54:42 +08:00
|
|
|
static var items: HBoxContainer
|
2026-01-24 15:43:53 +08:00
|
|
|
static var fields: VBoxContainer
|
|
|
|
|
static var fieldsAnimator: AnimationPlayer
|
|
|
|
|
static var player: EntityBase
|
2025-08-26 13:56:12 +08:00
|
|
|
static var bossbar: EntityStateBar
|
2026-01-24 15:43:53 +08:00
|
|
|
static var currentPanel: FullscreenPanelBase
|
2025-08-26 22:31:28 +08:00
|
|
|
static var panels: Control
|
2025-08-27 21:14:06 +08:00
|
|
|
static var energyPercent: ColorBar
|
2025-08-28 06:49:50 +08:00
|
|
|
static var itemCollect: VBoxContainer
|
2026-05-03 12:14:03 +08:00
|
|
|
static var skillIconContainer: HBoxContainer
|
2026-01-24 15:43:53 +08:00
|
|
|
static var tips: VBoxContainer
|
2026-05-03 16:03:02 +08:00
|
|
|
static var itemsContainer: Control
|
|
|
|
|
static var energyContainer: Control
|
2025-08-26 13:56:12 +08:00
|
|
|
|
2026-05-05 07:04:32 +08:00
|
|
|
static var showingFields: bool = false
|
|
|
|
|
|
2025-08-26 13:56:12 +08:00
|
|
|
func _ready():
|
2026-01-24 15:43:53 +08:00
|
|
|
bossbar = $%bossbar
|
|
|
|
|
panels = $%panels
|
|
|
|
|
energyPercent = $%percent
|
|
|
|
|
itemCollect = $%itemCollect
|
|
|
|
|
skillIconContainer = $%skillContainer
|
|
|
|
|
tips = $%tips
|
2026-01-24 15:54:42 +08:00
|
|
|
items = $%items
|
|
|
|
|
fields = $%fields
|
|
|
|
|
fieldsAnimator = $%fieldsAnimator
|
2026-05-03 16:03:02 +08:00
|
|
|
itemsContainer = $%itemsContainer
|
|
|
|
|
energyContainer = $%energyContainer
|
2026-01-30 11:44:42 +08:00
|
|
|
await get_tree().process_frame
|
|
|
|
|
for panel in ComponentManager.panels:
|
|
|
|
|
panel = ComponentManager.getPanel(panel).instantiate() as FullscreenPanelBase
|
|
|
|
|
panel.hide()
|
|
|
|
|
panels.add_child(panel)
|
2025-09-12 22:08:55 +08:00
|
|
|
setPanel("Starter")
|
2025-08-26 13:56:12 +08:00
|
|
|
func _process(_delta):
|
|
|
|
|
bossbar.visible = !!bossbar.entity
|
2025-08-26 20:46:02 +08:00
|
|
|
func _physics_process(_delta):
|
2026-05-03 16:03:02 +08:00
|
|
|
if is_instance_valid(player) && !StarterPanel.selectingFeed:
|
2025-08-27 11:08:11 +08:00
|
|
|
for i in items.get_children():
|
|
|
|
|
var item = i as ItemShow
|
|
|
|
|
item.count = player.inventory.get(item.type)
|
2026-05-03 16:03:02 +08:00
|
|
|
bossbar.visible = true
|
|
|
|
|
itemsContainer.visible = true
|
|
|
|
|
energyContainer.visible = true
|
2026-05-05 06:54:09 +08:00
|
|
|
if !fieldsAnimator.is_playing():
|
2026-05-05 07:04:32 +08:00
|
|
|
if showingFields:
|
|
|
|
|
if Input.is_action_just_released("showFields") || !(currentPanel is PausePanel):
|
2026-05-05 12:24:45 +08:00
|
|
|
hideFields()
|
2026-05-05 07:04:32 +08:00
|
|
|
else:
|
|
|
|
|
if Input.is_action_just_pressed("showFields") || currentPanel is PausePanel:
|
2026-05-05 12:24:45 +08:00
|
|
|
showFields()
|
2026-05-05 07:04:32 +08:00
|
|
|
|
2026-05-03 16:43:27 +08:00
|
|
|
if Input.is_action_just_pressed("pause"):
|
|
|
|
|
if currentPanel:
|
|
|
|
|
if currentPanel is MakeFeedPanel:
|
|
|
|
|
currentPanel.skipBtn.pressed.emit()
|
|
|
|
|
else:
|
|
|
|
|
closeCurrentPanel()
|
|
|
|
|
else:
|
|
|
|
|
setPanel("Pause")
|
|
|
|
|
if Input.is_action_just_pressed("openWeapon"):
|
|
|
|
|
var canOpen = true
|
|
|
|
|
if currentPanel:
|
|
|
|
|
if currentPanel.name == "Weapon":
|
|
|
|
|
closeCurrentPanel()
|
|
|
|
|
canOpen = false
|
|
|
|
|
elif ["MakeFeed", "GameOver"].has(currentPanel.name):
|
|
|
|
|
canOpen = false
|
|
|
|
|
if canOpen:
|
|
|
|
|
setPanel("Weapon")
|
2026-05-03 16:03:02 +08:00
|
|
|
else:
|
|
|
|
|
bossbar.visible = false
|
|
|
|
|
itemsContainer.visible = false
|
|
|
|
|
energyContainer.visible = false
|
2025-08-26 22:31:28 +08:00
|
|
|
if currentPanel:
|
|
|
|
|
WorldManager.rootNode.process_mode = Node.PROCESS_MODE_DISABLED
|
|
|
|
|
else:
|
|
|
|
|
WorldManager.rootNode.process_mode = Node.PROCESS_MODE_INHERIT
|
|
|
|
|
|
2025-09-07 13:39:50 +08:00
|
|
|
static func setPanel(targetName: String = "", args: Array = []):
|
2025-08-26 22:31:28 +08:00
|
|
|
currentPanel = null
|
|
|
|
|
for panel in panels.get_children():
|
|
|
|
|
if panel is FullscreenPanelBase:
|
|
|
|
|
if panel.name == targetName:
|
|
|
|
|
currentPanel = panel
|
2025-09-07 13:39:50 +08:00
|
|
|
panel.showPanel(args)
|
2025-08-26 22:31:28 +08:00
|
|
|
else:
|
|
|
|
|
panel.hidePanel()
|
2025-08-27 16:33:21 +08:00
|
|
|
static func closeCurrentPanel():
|
|
|
|
|
setPanel()
|
2026-05-05 12:24:45 +08:00
|
|
|
|
2026-01-25 21:40:26 +08:00
|
|
|
static func showTip(text: String, messageType: TipBox.MessageType = TipBox.MessageType.INFO):
|
|
|
|
|
var box = TipBox.create(text, messageType)
|
2026-01-24 15:43:53 +08:00
|
|
|
tips.add_child(box)
|
2026-05-05 07:04:32 +08:00
|
|
|
await box.animator.animation_finished
|
2026-01-25 21:40:26 +08:00
|
|
|
await TickTool.millseconds(500 * len(text))
|
|
|
|
|
box.destroy()
|
2026-05-05 07:04:32 +08:00
|
|
|
static func clearTips():
|
|
|
|
|
for child in tips.get_children():
|
|
|
|
|
if child is TipBox:
|
|
|
|
|
child.destroy()
|
2026-05-05 12:24:45 +08:00
|
|
|
|
|
|
|
|
static func showFields():
|
|
|
|
|
showingFields = true
|
|
|
|
|
for i in fields.get_children():
|
|
|
|
|
fields.remove_child(i)
|
|
|
|
|
for i in player.fields:
|
|
|
|
|
if player.fields[i] == EntityBase.TITLE_FLAG:
|
|
|
|
|
fields.add_child(QuickUI.graySmallText(i))
|
|
|
|
|
else:
|
|
|
|
|
fields.add_child(FieldShow.create(i, player.fields[i], false, player, true))
|
|
|
|
|
fieldsAnimator.play("show")
|
|
|
|
|
static func hideFields():
|
|
|
|
|
showingFields = false
|
|
|
|
|
fieldsAnimator.play("hide")
|