创建新工程
This commit is contained in:
113
scripts/LoadingIndicator.gd
Normal file
113
scripts/LoadingIndicator.gd
Normal file
@@ -0,0 +1,113 @@
|
||||
extends Control
|
||||
class_name LoadingIndicator
|
||||
## 加载状态指示器
|
||||
## 显示加载动画和状态文本
|
||||
|
||||
# UI 元素
|
||||
@onready var loading_panel: Panel = $LoadingPanel
|
||||
@onready var loading_label: Label = $LoadingPanel/VBoxContainer/LoadingLabel
|
||||
@onready var spinner: ColorRect = $LoadingPanel/VBoxContainer/Spinner
|
||||
@onready var progress_bar: ProgressBar = $LoadingPanel/VBoxContainer/ProgressBar
|
||||
|
||||
# 加载状态
|
||||
var is_loading: bool = false
|
||||
var rotation_speed: float = 3.0 # 旋转速度(弧度/秒)
|
||||
|
||||
func _ready():
|
||||
"""初始化加载指示器"""
|
||||
# 默认隐藏
|
||||
hide()
|
||||
|
||||
# 设置统一的字体样式
|
||||
_setup_font_style()
|
||||
|
||||
print("LoadingIndicator initialized")
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
"""更新加载动画"""
|
||||
if is_loading and spinner:
|
||||
# 旋转加载图标
|
||||
spinner.rotation += rotation_speed * delta
|
||||
|
||||
## 显示加载状态
|
||||
func show_loading(message: String = "加载中...", show_progress: bool = false) -> void:
|
||||
"""
|
||||
显示加载状态
|
||||
@param message: 加载消息
|
||||
@param show_progress: 是否显示进度条
|
||||
"""
|
||||
is_loading = true
|
||||
|
||||
# 设置消息
|
||||
if loading_label:
|
||||
loading_label.text = message
|
||||
|
||||
# 设置进度条可见性
|
||||
if progress_bar:
|
||||
progress_bar.visible = show_progress
|
||||
if show_progress:
|
||||
progress_bar.value = 0
|
||||
|
||||
# 使用动画显示面板
|
||||
UIAnimationManager.scale_popup(self, 0.3, UIAnimationManager.EaseType.BOUNCE)
|
||||
|
||||
preload("res://scripts/Utils.gd").debug_print("Loading: " + message, "UI")
|
||||
|
||||
## 更新加载进度
|
||||
func update_progress(progress: float, message: String = "") -> void:
|
||||
"""
|
||||
更新加载进度
|
||||
@param progress: 进度值(0-100)
|
||||
@param message: 可选的消息更新
|
||||
"""
|
||||
if progress_bar:
|
||||
progress_bar.value = progress
|
||||
|
||||
if not message.is_empty() and loading_label:
|
||||
loading_label.text = message
|
||||
|
||||
## 隐藏加载状态
|
||||
func hide_loading() -> void:
|
||||
"""隐藏加载状态"""
|
||||
is_loading = false
|
||||
|
||||
# 使用动画隐藏面板
|
||||
UIAnimationManager.fade_out(self, 0.25)
|
||||
|
||||
preload("res://scripts/Utils.gd").debug_print("Loading complete", "UI")
|
||||
|
||||
## 显示连接中状态
|
||||
func show_connecting() -> void:
|
||||
"""显示连接中状态"""
|
||||
show_loading("正在连接服务器...", false)
|
||||
|
||||
## 显示登录中状态
|
||||
func show_logging_in() -> void:
|
||||
"""显示登录中状态"""
|
||||
show_loading("正在登录...", false)
|
||||
|
||||
## 显示加载世界状态
|
||||
func show_loading_world() -> void:
|
||||
"""显示加载世界状态"""
|
||||
show_loading("正在加载游戏世界...", true)
|
||||
|
||||
## 显示创建角色状态
|
||||
func show_creating_character() -> void:
|
||||
"""显示创建角色状态"""
|
||||
show_loading("正在创建角色...", false)
|
||||
|
||||
## 设置字体样式
|
||||
func _setup_font_style() -> void:
|
||||
"""设置统一的字体样式"""
|
||||
if loading_label:
|
||||
# 设置字体大小
|
||||
loading_label.add_theme_font_size_override("font_size", 18)
|
||||
# 设置文字颜色
|
||||
loading_label.add_theme_color_override("font_color", Color.WHITE)
|
||||
# 添加阴影效果使文字更清晰
|
||||
loading_label.add_theme_color_override("font_shadow_color", Color(0, 0, 0, 0.8))
|
||||
loading_label.add_theme_constant_override("shadow_offset_x", 1)
|
||||
loading_label.add_theme_constant_override("shadow_offset_y", 1)
|
||||
# 确保文字居中
|
||||
loading_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
loading_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
|
||||
Reference in New Issue
Block a user