|
|
- -- <*
- -- @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("<color=%s>%s</color>/%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
|