-- <* -- @Author: Saber -- @Description: 主界面舞姿选择界面 -- *> DanceMainUISelectPoseView = DanceMainUISelectPoseView or BaseClass(BaseView) local DanceMainUISelectPoseView = DanceMainUISelectPoseView local table_insert = table.insert function DanceMainUISelectPoseView:__init() self.base_file = "dance" self.layout_file = "DanceMainUISelectPoseView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.background_alpha = 0 -- 特殊处理,全透明的背景蒙版 self.click_bg_toClose = true self.model = DanceModel:getInstance() self.random_dance_flag = self.model:GetIsRandomPose() self.main_role = RoleManager.Instance.mainRoleInfo self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end function DanceMainUISelectPoseView:Open(pos) self.pos = pos or Vector3(0, 0, 0) BaseView.Open(self) end function DanceMainUISelectPoseView:LoadSuccess() local nodes = { "bg", "pose_scroll", "pose_scroll/Viewport/pose_con", "random_tog:obj:tog", } self:GetChildren(nodes) SetAnchoredPosition(self.transform, self.pos.x + 137, self.pos.y + 125) self.random_tog_tog.isOn = self.random_dance_flag end function DanceMainUISelectPoseView:AddEvent() local function click_event(target) if target == self.random_tog_obj then self.random_dance_flag = self.random_tog_tog.isOn end end AddClickEvent(self.random_tog_obj, click_event) local function on_dance_pose_change() self:UpdateDanceSelected() end self.on_dance_pose_change_id = self.main_role:BindOne("dance_status", on_dance_pose_change) local function update_dance_data() self:UpdateView() end self:BindEvent(self.model, DanceModel.UPDATE_DANCE_POSES_DATA, update_dance_data) end -- 根据规则初始化节点高度 function DanceMainUISelectPoseView:InitScrollRectHeight(item_num) -- 舞姿节点少于4个时,只显示一行内容,其他情况显示两行内容 if item_num <= 4 then SetSizeDeltaY(self.bg, 120) SetSizeDeltaY(self.pose_scroll, 84) else SetSizeDeltaY(self.bg, 206) SetSizeDeltaY(self.pose_scroll, 170) end end function DanceMainUISelectPoseView:UpdateView() -- 由于需要插入第一个特殊节点,还需要剔除未激活的舞姿,所以这边需要重新提取出数据 local data = self.model:GetDancePoseDataList() local activated_dance_data = {} -- 插入特殊节点 local special_first_data = { is_special_data = true } table_insert(activated_dance_data, special_first_data) -- 提取出已激活的舞姿 for k, v in pairs(data) do if v.activated then table_insert(activated_dance_data, v) end end self:InitScrollRectHeight(#activated_dance_data) self.pose_item_creator = self.pose_item_creator or self:AddUIComponent(UI.ItemListCreator) local cur_dance_id = self.main_role.dance_status local info = { data_list = activated_dance_data, scroll_view = self.pose_scroll, item_con = self.pose_con, item_class = DanceMainUISelectPoseItem, item_height = 78, item_width = 78, start_x = 2, start_y = -3.5, space_x = 8, space_y = 8, create_frequency = 0.01, is_scroll_back_on_update = true, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(v) item:SetSelected(cur_dance_id) end, } self.pose_item_creator:UpdateItems(info) end function DanceMainUISelectPoseView:UpdateDanceSelected() local dance_id = self.main_role.dance_status -- print("Saber:DanceMainUISelectPoseView [114] dance_id: ",dance_id) if self.pose_item_creator then self.pose_item_creator:IterateItems(function(item, i) item:SetSelected(dance_id) end) end -- 切换舞姿后,在更新完选中框之后关闭舞姿界面 if self.model._need_pose_select_view_close then self:Close() end end function DanceMainUISelectPoseView:DestroySuccess( ) -- 关闭界面时,切换随机舞姿状态 self.model:Fire(DanceModel.REQUEST_CCMD_EVENT, 42503, self.random_dance_flag and 1 or 0) if self.on_dance_pose_change_id then self.main_role:UnBind(self.on_dance_pose_change_id) self.on_dance_pose_change_id = nil end -- 重置自动关闭舞姿界面的标志量 self.model._need_pose_select_view_close = false end