核心数据流
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 原始文档 自动同步。