核心数据流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌─────────────────────────────────────────────────────────────────────┐
│ ① 大厅点击"热购"按钮 │
│ ↓ │
│ ② MallModel:OpenMallView() → UIManager:OpenWindow(UI_NewMall_MainView) │
│ ↓ │
│ ③ UI_NewMall_MainView:OnOpen() → 创建 ShopTagTree 页签树 │
│ ↓ │
│ ④ 用户点击"首充"一级页签 │
│ ↓ │
│ ⑤ OnMallShopTagSelected → GetSubViewName → "FirstCharge_SubView" │
│ ↓ │
│ ⑥ AddWidget("FirstCharge_SubView", w_nameSlot_Content, OpenData) │
│ ↓ │
│ ⑦ FirstCharge_SubView:OnOpen(Data) → InitUI → SwitchSubView │
│ ↓ │
│ ⑧ AddWidget("FirstCharge_MainView", w_nameSlot_SubView, CurTabInfo) │
│ ↓ │
│ ⑨ FirstCharge_MainView:OnOpen() → InitUI → InitItemUI → 3D预览 │
│ ↓ │
│ ⑩ 用户点击充值按钮 → OnClickedBtnRecharge → PayModel:OnProcBuyRMB │
└─────────────────────────────────────────────────────────────────────┘

SubView调用链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
OnOpen
→ InitData
→ InitEvent
→ InitUI
→ FirstChargeModel:ReqFirstChargeTaskInfo()
→ RefreshFirstChargeUI()

首次打开:
ReqFirstChargeTaskInfo 发送协议
→ GET_FIRST_CHARGE_INFO
→ OnFirstChargeInfoReady
→ RefreshFirstChargeUI()
→ InitSecondTabUI()
→ OnUpdateTabData()
→ SetSelectedSecondId()
→ ListSetDatas()
→ SwitchSubView()

领奖后:
GET_TASK_REWARD
→ OnReqNewData()
→ RefreshFirstChargeUI(selectedId)
→ InitSecondTabUI(selectedId)
→ SetSelectedSecondId(selectedId)
→ 保留当前页签
→ SwitchSubView()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
OnOpen(Data)
→ OnInitializedEvent()
→ InitData()
→ InitEvent()
→ InitUI()
→ InitTaskData()
→ InitItemUI()
→ InitListUI()
→ SetRechargeBtnVisibility()
→ InitModelUI()

打开界面:
SubView AddWidget 挂载本界面
→ OnOpen(Data)
→ OnInitializedEvent() 绑定3个按钮(直购/跳转商城/切换充值)
→ InitData() IsShowRechargeBtn=true, 防连点时间戳=nil
→ InitEvent() 注册4个事件监听
→ InitUI()
→ InitTaskData() 从 Data 提取 firstChargeData/firstChargeConfigData/previewActor
→ InitItemUI() 价格 w_txt_Price + 货币图标 w_img_Icon(配置在则展示)
→ InitListUI()
→ InitListData() 奖励数>7 → 七日列表(Switcher下标1),否则普通列表(下标0)
→ 遍历任务,有已完成 → IsShowRechargeBtn=false
→ ListSetDatasByFrame() 分帧创建奖励Item
→ SetRechargeBtnVisibility() 0=去充值 / 1=已领取
→ InitModelUI()
→ SetModelAnim()
→ RefreshPreviewUI()
→ Copy(suitIds) 防污染配置表,不足补 DEFAULT_FACE_ID
→ DispatchEvent(CommonModel_PreviewPlayerSuit)
→ PreviewActor:ChangePreviewCameraPos("Camera_Recharge")
→ isCycle==AutoCycle → DispatchEvent(CommonModel_ChangeIdleAnimation) 一次性
→ isCycle==InterCycle → DispatchEvent(PreviewAvatar) + BindTimer(interval) 循环重播

点击直购:
w_btn_RechargeBtn 点击
→ OnClickedBtnRechargeBtn()
→ 防连点校验(与上次点击<1s → 弹 Common_ClickFast 并 return)
→ PayModel:OnProcBuyRMB({count=rechargeCount})
→ MSDKTDMUtil.ReportClick(UI_Recharge_FirstChargeMain, 133001)

点击跳转商城:
UI_CommonBtn_Recharge / w_btn_SwitchRecharge 点击
→ OnClickedBtnRecharge() / OnClickedBtnSwitchRecharge()
→ MallModel:OpenSubViewTagByUIName(UI_Recharge_Recharge)

等值领奖(事件触发):
FirstChargeModel_ReceiveSameValueRewards
→ OnReceiveSameValueRewards(TaskValue)
→ 遍历 FirstChargeDataMap,取 m_taskId → TaskSystemModel:GetTaskInfoById()
→ 筛选 GetTaskConditionTargetValue()==TaskValue 且 GetTaskIsCompleted()
→ TaskSystemModel:ReqGetTaskRewards(TaskIdList)

奖励刷新(事件触发):
FirstChargeModel_RefreshReward
→ RefreshRechargeBtnVisibility()
→ IsShowRechargeBtn=false
→ SetRechargeBtnVisibility()
→ Switcher 切到"已领取"页签

任务变更刷红点(事件触发):
TASK_INFO_MAP_UPDATE_NOTICE
→ OnUpdateTaskInfo(changeTask, isChangeStatus, taskMap)
→ 遍历任务 → CheckTaskIsChangeByTaskId(m_taskId, taskMap)
→ 有变更 → RedDotModel:UpdateRedDotByType(FirstCharge_Tab)
→ RedDotModel:UpdateRedDotByType(Recharge_FirstCharge_Tab)

头像弹窗关闭恢复动画(事件触发):
ON_CLOSE_WINDOW_IMMEDIATELY
→ OnCloseWindowImmediately(WndName)
→ WndName 是 UI_Common_PopAvatarView / UI_Common_PopNewAvatarView
→ SetModelAnim() 重新派发套装预览 + 重绑动画定时器

关闭界面:
PreClose() → return 0 允许关闭
→ OnClose()
→ 清空 Data/PreviewActor/FirstChargeDataMap 等成员引用
→ ClearAnimTimer() → UnBindTimer(AnimTimer)



本文从 LearnByCompany 原始文档 自动同步。