# intro_loading_phase.gd —— 40250 官方插画过场加载与 Tip 轮播系统 1:1 # 严格对照: # Client/Eternexus/root/introloading.py (LoadingWindow) # Client/Eternexus/root/locale/en/locale_game.txt (LOADING_TIP_*) extends RefCounted # 官方预设背景插画壁纸 const OFFICIAL_LOADING_WALLPAPERS := [ "d:/ymir work/ui/intro/loading/loading_01.sub", "d:/ymir work/ui/intro/loading/loading_02.sub", "d:/ymir work/ui/intro/loading/loading_03.sub", "d:/ymir work/ui/intro/loading/loading_04.sub" ] # 40250 官方新手锦囊提示语库 (Tip Shower) const OFFICIAL_LOADING_TIPS := [ "提示:组队状态下开启平等分配模式,全队均可获得丰厚的经验奖励。", "提示:强化高等级装备时,使用祈愿卷轴或战神卷轴可有效避免装备碎毁风险。", "提示:生物学家采吉拉布对奇珍异宝极感兴趣,完成研究任务可获得永久性属性加成。", "提示:善恶值过低将沦为恶徒,死亡时身上的装备与道具将存在掉落风险。", "提示:研读大师技能书前使用隐士之药,可将顿悟成功率提升至 100%。", "提示:使用快捷键 Alt+M 可随时呼出好友面板与同伴展开即时私聊。", "提示:按键盘 M 键可展开全景大地图,点击 NPC 索引即可激活方位指引光标。" ] # 资源加载阶段划分 (1:1 introloading.py: loadStepList) const STEP_INIT := 0 const STEP_PROPERTY := 1 # 载入 Property 属性模板 (25%) const STEP_TERRAIN := 2 # 载入 PRTerrain 地貌与 Zone 建筑 (50%) const STEP_ENTITIES := 3 # 载入角色怪物实体与 NPC (75%) const STEP_UI_AUDIO := 4 # 载入界面控件与音频音效 (100%) const STEP_FINISHED := 5 # 加载完毕,进入视口 var current_wallpaper: String = "" var current_tip: String = "" var current_step: int = STEP_INIT var progress_percent: float = 0.0 func _init() -> void: reset_loading_phase() func reset_loading_phase() -> void: current_step = STEP_INIT progress_percent = 0.0 current_wallpaper = OFFICIAL_LOADING_WALLPAPERS[0] current_tip = OFFICIAL_LOADING_TIPS[0] # 1. 开启过场加载并随机挑选壁纸与 Tip func start_loading(wallpaper_index: int = -1, tip_index: int = -1) -> void: reset_loading_phase() if wallpaper_index >= 0 and wallpaper_index < OFFICIAL_LOADING_WALLPAPERS.size(): current_wallpaper = OFFICIAL_LOADING_WALLPAPERS[wallpaper_index] else: current_wallpaper = OFFICIAL_LOADING_WALLPAPERS[randi() % OFFICIAL_LOADING_WALLPAPERS.size()] if tip_index >= 0 and tip_index < OFFICIAL_LOADING_TIPS.size(): current_tip = OFFICIAL_LOADING_TIPS[tip_index] else: current_tip = OFFICIAL_LOADING_TIPS[randi() % OFFICIAL_LOADING_TIPS.size()] # 2. 推进加载阶段进度 func advance_loading_step() -> Dictionary: current_step = mini(current_step + 1, STEP_FINISHED) match current_step: STEP_PROPERTY: progress_percent = 0.25 STEP_TERRAIN: progress_percent = 0.50 STEP_ENTITIES: progress_percent = 0.75 STEP_UI_AUDIO, STEP_FINISHED: progress_percent = 1.0 var done: bool = (current_step >= STEP_FINISHED) return { "step": current_step, "progress": progress_percent, "is_complete": done, "status_text": _get_step_status_text(current_step) } func _get_step_status_text(step: int) -> String: match step: STEP_PROPERTY: return "正在载入地图环境与属性配置 (25%)..." STEP_TERRAIN: return "正在构建 3D 地形与场景建筑 (50%)..." STEP_ENTITIES: return "正在同步世界生物与 NPC 实体 (75%)..." STEP_UI_AUDIO, STEP_FINISHED: return "正在初始化界面与音效资产 (100%)..." _: return "准备进入世界..." func is_completed() -> bool: return current_step >= STEP_FINISHED and progress_percent >= 1.0