Files
mtgodot-poc/project/intro_loading_phase.gd
T
shenandshen 66d217b313 feat(client): 完成40250客户端核心功能1:1对齐与桥梁高度采样修复
- 桥梁与静态物体高度采样修复:
  - 严格对齐 40250 CMapOutdoor::GetHeight 与 CAttributeInstance::GetHeight
  - 解析 .mdatr 中的 AttributeHeight 网格,使用 is_in_triangle_2d 准确计算桥面多边形平面方程
  - sample_height 查询邻近区块并返回 fMAX(fObjectHeight, fTerrainHeight),彻底解决走上桥面穿透掉入水底/河床的问题
  - 新增 test_bridge_height_parity.gd 自动化对拍测试
- 40250 怪物击杀经验动效:
  - 1:1 实现 FLY_EXP(0) / FLY_HP / FLY_SP 粒子轨迹与爆炸吸附
- 40250 客户端全系统功能对齐(Batches 1-31):
  - 包含公会、交易、骑乘、变身、钓鱼、采矿、商城、信件、结婚、地牢等 134 套对拍系统与自动化回归测试
- 文档沉淀:
  - 新增 docs/CLIENT-PARITY-AUDIT-AND-FIX-GUIDE.md 客户端对拍缺陷发现与修复工程指南
2026-09-19 08:51:25 -07:00

98 lines
3.7 KiB
GDScript

# 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