-- <* -- @Author: Saber -- @Description: 舞姿激活界面 -- *> DancePoseView = DancePoseView or BaseClass(BaseView) local DancePoseView = DancePoseView local stringtotable = stringtotable function DancePoseView:__init() self.base_file = "dance" self.layout_file = "DancePoseView" self.layer_name = "Activity" self.destroy_imm = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.change_scene_close = true self.is_set_zdepth = true self.model = DanceModel:getInstance() self.goods_model = GoodsModel:getInstance() self.loaded_role_model = nil self.open_dance_id = nil self.open_type_id = nil self.load_callback = function () self:LoadSuccess() self:AddEvent() end self.open_callback = function ( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end -- 可选参数(二选一) -- open_dance_id 定位的舞姿 -- open_type_id 定位的舞姿的物品id function DancePoseView:Open(open_dance_id, open_type_id) self.open_dance_id = open_dance_id self.open_type_id = open_type_id BaseView.Open(self) end function DancePoseView:LoadSuccess() local nodes = { "bg:raw", "role_con", "close_btn:obj", "ques_btn:obj", "pose_scroll", "pose_scroll/Viewport/pose_con", "activated:obj", "activate_con:obj", "activate_con/activate_btn:obj", "activate_con/activate_btn/activate_btn_red:obj", "activate_con/item_con", "activate_con/item_name:tmp", "activate_con/item_neednum:tmp", "pose_desc:tmp", } self:GetChildren(nodes) lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("dance_bg")) self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con) self.award_item:SetItemSize(62, 62) self.award_item:SetAnchoredPosition(0, 0) self.award_item:SetVisible(true) end function DancePoseView:AddEvent() local function click_event(target) if target == self.close_btn_obj then self:Close() elseif target == self.ques_btn_obj then -- 介绍按钮 GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 42500) elseif target == self.activate_btn_obj then -- 激活按钮 if self.item_data then local bool = self.model:GetDanceRedByDanceId(self.item_data.id) if bool then self.model:Fire(DanceModel.REQUEST_CCMD_EVENT, 42501, self.item_data.id) else if self.award_item then self.award_item:ClickCallFun() end end end end end AddClickEvent(self.close_btn_obj, click_event) AddClickEvent(self.ques_btn_obj, click_event) AddClickEvent(self.activate_btn_obj, click_event) local function updateDacneData() self:UpdatePosesItem() end self:BindEvent(self.model, DanceModel.UPDATE_DANCE_POSES_DATA, updateDacneData) self:BindEvent(self.model, DanceModel.ACTIVATED_DANCE_POSE, updateDacneData) end function DancePoseView:UpdateView() self:UpdatePosesItem() end -- 更新姿势节点 function DancePoseView:UpdatePosesItem( ) -- 这个不需要深拷贝 local data = self.model:GetDancePoseDataList() local function dance_callback(item_data) self.pose_item_creator:IterateItems(function(item, i) item:SetSelected(item_data.id) end) self:UpdateRoleDance(item_data.id) self:UpdatePoseCostInfoAndDesc(item_data) end self.pose_item_creator = self.pose_item_creator or self:AddUIComponent(UI.ItemListCreator) local info = { data_list = data, scroll_view = self.pose_scroll, item_con = self.pose_con, item_class = DancePoseItem, item_height = 112, item_width = 112, start_x = 10, start_y = -1, space_x = 13, space_y = 13, create_frequency = 0.01, is_scroll_back_on_update = true, alignment = UnityEngine.TextAnchor.UpperLeft, on_update_item = function(item, i, v) item:SetData(v, dance_callback) end, final_callback = function() -- 初次加载完,定位到默认舞姿或打开界面时要看的舞姿 local default_dance_id = self.open_dance_id or self.model:GetDefaultDancesPoseId() for k, v in ipairs(data) do if self.open_type_id then if v.goods_data and tonumber(v.goods_data[2]) == self.open_type_id then dance_callback(v) break end else if v.id == default_dance_id then dance_callback(v) break end end end self.open_dance_id = nil self.open_type_id = nil end, } self.pose_item_creator:UpdateItems(info) end -- 更新玩家舞姿 function DancePoseView:UpdateRoleDance(dance_id) local dance_pose = "dance" if dance_id > 1 then -- 舞姿1的名称为dance,特殊处理 dance_pose = dance_pose .. dance_id end if not self.loaded_role_model then -- 先清除引用模型 lua_resM:clearRoleMode(self) -- 加载模型 local res_data = { father_node = self, layer_name = self.layer_name, transform = self.role_con, fashion_type = FuncOpenModel.TypeId.Clothes, size = Vector2(720,720), can_rotate = true, -- raycast_size = Vector2(390, 508), load_dance_pose = true, scale = 220, action_name_list = {dance_pose}, position = Vector3(0,0,-500), ui_model_type = UIModelCommon.ModelType.Model, } FuncOpenModel:getInstance():SetModelRes(res_data) self.loaded_role_model = lua_resM:GetPartModel(self, self.role_con) else self.loaded_role_model:PlayActions({dance_pose}) end end -- 更新节点花费信息和描述信息 function DancePoseView:UpdatePoseCostInfoAndDesc(item_data) self.item_data = item_data if item_data then if item_data.activated then -- 已经激活了 self.activated_obj:SetActive(true) self.activate_con_obj:SetActive(false) else self.activated_obj:SetActive(false) self.activate_con_obj:SetActive(true) local cost_cfg = item_data.goods_data local typeId, lock = self.goods_model:GetMappingTypeId(cost_cfg[1], cost_cfg[2]) self.award_item:SetData(typeId, cost_cfg[3], nil, nil, lock) self.item_name_tmp.text = self.goods_model:getGoodsName(typeId, true) local goods_num = self.goods_model:GetTypeGoodsNum(typeId) self.item_neednum_tmp.text = string.format("%s/%s", goods_num >= cost_cfg[3] and ColorUtil.GREEN_DARK or ColorUtil.RED_DARK, goods_num, cost_cfg[3]) -- 获取红点 local bool = self.model:GetDanceRedByDanceId(item_data.id) self.activate_btn_red_obj:SetActive(bool) end -- 姿势描述 self.pose_desc_tmp.text = Trim(item_data.desc) end end function DancePoseView:DestroySuccess( ) if self.award_item then UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item) end self.award_item = nil end