|
|
- -- <*
- -- @Author: Saber
- -- @Description: 成就子类节点item
- -- *>
- AchieveItem = AchieveItem or BaseClass(BaseItem)
- local AchieveItem = AchieveItem
-
- AchieveItem.HEIGHT = 100
- AchieveItem.WIDTH = 701
- AchieveItem.START_Y = -1
- AchieveItem.SPACE_Y = 2
-
-
- function AchieveItem:__init(parent_wnd,prefab_asset,layer_name)
- self.base_file = "achievement"
- self.layout_file = "AchieveItem"
- self.parent_wnd = parent_wnd
- self.layer_name = layer_name
- self.awardItem_list = {}
- self.model = AchieveModel:getInstance()
- self:Load()
- end
-
- function AchieveItem:Load_callback()
- local nodes = {
- "icon:img", "finished:obj", -- 展示小图片相关
- "award_con", -- 奖励容器
- "fill:img", "progress:tmp", -- 成就进度相关
- "name:tmp", -- 成就名
- "achi_exp:tmp", -- 成就经验
- "goto_btn:obj", "receive_btn:obj", -- 按钮相关
- }
- self:GetChildren(nodes)
-
- self:AddEvents()
- if self.need_refreshData then
- self:UpdateView()
- end
- end
-
- function AchieveItem:AddEvents( )
- local function click_event(target)
- if self.model:AchieveItemIsAniming() then
- return
- end
- if self.model:GetSCMDWaitFlag() then -- 刚发过协议在等协议返回
- return
- end
- if target == self.goto_btn_obj then -- 前往成就任务
- self:OnClickGotoBtnFunc()
- elseif target == self.receive_btn_obj then -- 领取成就奖励
- if self.data and self.data.type and self.data.sub_type and self.data.id then
- self.model:SetSCMDWaitFlag(true)
- self.model:Fire(AchieveModel.REQUEST_CCMD_EVENT, 40903, self.data.type, self.data.sub_type, self.data.id)
- end
- end
- end
- AddClickEvent(self.goto_btn_obj, click_event, nil, false)
- AddClickEvent(self.receive_btn_obj, click_event, nil, false)
- end
-
- function AchieveItem:SetData( data, index )
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
- self.data = data
- self.index = index or self.index
- if self.is_loaded then
- self.need_refreshData = false
- self:UpdateView()
- else
- self.need_refreshData = true
- end
- end
-
- function AchieveItem:UpdateView( )
- self:UpdateAchieveBasicData()
- self:UpdateAchieveProgressData()
- end
-
- -- 更新成就基础信息(只调用一次)
- function AchieveItem:UpdateAchieveBasicData( )
- local str = string.gsub(Trim(self.data.desc), "\n", "")
-
- self.name_tmp.text = LimitTextByCharNum(str, 14)
-
- self.achi_exp_tmp.text = string.format("成就经验<color=%s>+%s</color>", ColorUtil.GREEN_DARK, self.data.exp)
- lua_resM:setImageSprite(self, self.icon_img, "achievement_asset", "achi_item_icon" .. self.data.type, true)
- -- 加载奖励
- local reward = stringtotable(self.data.reward)
- for k, v in ipairs(reward) do
- local item = self.awardItem_list[k]
- if not item then
- item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.award_con)
- self.awardItem_list[k] = item
- end
- item:SetItemSize(59, 59)
- item:SetPosition(self.award_con.sizeDelta.x/2 +((k-1) - #reward/2) * 78 + 2, -2)
- item:SetVisible(true)
- local typeId, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
- item:SetData(typeId, v[3], nil, nil, lock)
- end
- if #reward < #self.awardItem_list then
- for i = #reward+1, #self.awardItem_list do
- self.awardItem_list[i]:SetVisible(false)
- end
- end
- end
-
- -- 更新成就进度信息
- function AchieveItem:UpdateAchieveProgressData( )
- if not self.data or not self.data.type or not self.data.sub_type then return end
- local achieve_cfg = Config.Achievementid[self.data.type.."@"..self.data.sub_type.."@"..self.data.id]
- -- local progress_data = self.model:GetTargetAchieveData(self.data.type, self.data.sub_type)
- -- progress_data.progress = progress_data.progress or 0
- -- progress_data.status = progress_data.status or 0
- -- progress_data.id = progress_data.id or 1
- local progress_data = self.data -- self.data里面有
- if achieve_cfg then
- local condition = stringtotable(achieve_cfg.condition)[1] -- 将成就的需求总数固定存在条件的第一个中
- local percentage = 0
- if condition[1] == "arena_rank" then -- 竞技联赛不显示进度,改为追加显示当前排行
- percentage = progress_data.status == 0 and 0 or 1
- local my_info = PkRankModel:getInstance().my_info
- if progress_data.status ~= 0 then
- self.progress_tmp.text = ""
- elseif not my_info or not my_info.rank or my_info.rank == 0 then
- self.progress_tmp.text = "当前名次:未上榜"
- else
- self.progress_tmp.text = string.format("当前名次:%s", tostring(my_info.rank))
- end
- elseif condition[1] == "uranium_skill" or condition[1] == "dun_visus" then -- 技能激活/幻光副本
- percentage = progress_data.progress / condition[3]
- self.progress_tmp.text = progress_data.progress .. "/" .. condition[3]
- elseif condition[1] == "stage" then -- 进阶
- percentage = progress_data.progress / 1
- self.progress_tmp.text = progress_data.progress .. "/1"
- else
- percentage = progress_data.progress / condition[2]
- self.progress_tmp.text = progress_data.progress .. "/" .. condition[2]
- end
- self.fill_img.fillAmount = percentage
- self.goto_btn_obj:SetActive(progress_data.status == 0)
- self.receive_btn_obj:SetActive(progress_data.status == 1)
- self.finished_obj:SetActive(progress_data.status == 2)
- end
- end
-
- function AchieveItem:OnClickGotoBtnFunc( )
- local jump_tb = stringtotable(self.data.client_skip)[1]
- -- 不管怎样先关界面
- if IsTableEmpty(jump_tb) then -- 没有跳转则直接关闭角色系统界面
- -- GlobalEventSystem:Fire(EventName.CLOSE_NEW_MAIN_ROLE_VIEW)
- -- self.model:Fire(AchieveModel.OPEN_ACHIEVE_MAIN_VIEW)
- else
- if jump_tb[1] == 500 then -- 500 护送任务要关闭成就界面
- -- GlobalEventSystem:Fire(EventName.CLOSE_NEW_MAIN_ROLE_VIEW)
- -- self.model:Fire(AchieveModel.OPEN_ACHIEVE_MAIN_VIEW)
- DailyModel:getInstance():Fire(DailyModel.CLOSE_DAILY_BASE_VIEW)
- OpenFun.Open(jump_tb[1], jump_tb[2])
- elseif jump_tb[3] then
- GlobalEventSystem:Fire(EventName.OPEN_ACITVITY_TIP, jump_tb[1], jump_tb[2], true)
- else
- OpenFun.Open(jump_tb[1], jump_tb[2])
- end
- end
- end
-
- -- 移动到新索引的位置
- function AchieveItem:MoveNewIndexPosAnimAndUpdate( old_index, new_index, new_data, anim_call_back )
- local origin_pos = self:GetIndexPos(old_index)
- local move_one_index_time = 0.15
- -- logWarn('=======Msh:AchieveItem.lua[161]=======', self.index, new_index)
- local old_index = old_index
- local anim_call_back = anim_call_back or nil
- self.index = new_index -- 存一下新索引
- -- 动画完成后更新索引
- local last_func = function( )
- if anim_call_back then
- anim_call_back()
- end
- -- self.index = self.new_index
- -- self.new_index = nil
- -- self:UpdateView()
- -- print('Msh:AchieveItem.lua[166] data', self.data.type * 10000 + self.data.sub_type, self.index)
- end
- if new_index > old_index then -- 位置下移
- --print('Msh:AchieveItem.lua[177] 位置下移', data)
- -- 从目标索引位置右边 移动到目标索引位置
- local move_func1 = function( )
- self:SetData( new_data) -- 消失后 刷新
- self:PlayLineAnim(self:GetIndexPos(new_index, AchieveItem.WIDTH - 100),
- self:GetIndexPos(new_index),
- move_one_index_time,
- last_func)
- end
- -- 先往右移
- self:PlayLineAnim(origin_pos, self:GetIndexPos(old_index, AchieveItem.WIDTH - 100),
- move_one_index_time, move_func1)
- elseif old_index - new_index == 1 then -- 上移一格
- --print('Msh:AchieveItem.lua[190] 上移一格', data)
- self:SetData( new_data) -- 直接刷
- self:PlayLineAnim(origin_pos, self:GetIndexPos(new_index), move_one_index_time ,last_func, move_one_index_time)
- elseif old_index == new_index then -- 位置不变
- if self.data and self.data.id ~= new_data.id and
- self.data.sub_type == new_data.sub_type and
- self.data.type == new_data.type
- then -- 数据变更了 原地刷新
- --print('Msh:AchieveItem.lua[194] 位置不变 动画', data)
- -- 从目标索引位置右边 移动到目标索引位置
- local move_func1 = function( )
- self:SetData( new_data) -- 消失后 刷新
- -- 从左边 回来
- self:PlayLineAnim(
- self:GetIndexPos(new_index, - (AchieveItem.WIDTH + 100)),
- self:GetIndexPos(new_index),
- move_one_index_time,
- last_func)
- end
- -- 先往右移
- self:PlayLineAnim(origin_pos, self:GetIndexPos(old_index, AchieveItem.WIDTH - 100),
- move_one_index_time, move_func1)
- else
- --print('Msh:AchieveItem.lua[194] 位置不变 只刷新', data)
- last_func()
- self:SetData( new_data) -- 直接刷新
- end
- else
- self:SetData( new_data, new_index)
- last_func()
- -- logWarn('=======Msh:AchieveItem.lua[167]==MOVE POS IS ERROR=====')
- end
- end
-
- -- 移动到目标位置
- function AchieveItem:PlayLineAnim( start_pos, end_pos, anim_time, end_func, delay_time )
- self:SetPosition(start_pos.x, start_pos.y, start_pos.z)
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
- local anim_time = anim_time or 0.2
- local delay_time = delay_time or 0
-
- -- 延迟
- local action1 = cc.DelayTime.New( delay_time )
-
- -- 位移
- local function move_func( percent )
- SetLocalPosition(self.transform, start_pos.x + (end_pos.x - start_pos.x) * percent,
- start_pos.y + (end_pos.y - start_pos.y) * percent, 0)
- end
- local action2 = cc.CustomUpdate.New(anim_time, move_func)
-
- -- 回调
- local function callback_1()
- if end_func then
- end_func()
- end
- end
- local call_func_1 = cc.CallFunc.New(callback_1)
-
- local action10 = cc.Sequence.New( action1, action2, call_func_1 )
- self:AddAction(action10, self.transform)
- end
-
- function AchieveItem:GetIndexPos( index, offset_x )
- local offset_x = offset_x or 0
- return Vector3(offset_x, AchieveItem.START_Y - (index-1) * (AchieveItem.HEIGHT + AchieveItem.SPACE_Y), 0)
- end
-
- function AchieveItem:SetIndexPos( index )
- local pos = self:GetIndexPos( index )
- self:SetPosition(pos.x, pos.y, pos.z)
- end
-
- -- 停止当前动画
- function AchieveItem:StopAnim( )
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
- if self.index then
- local pos = self:GetIndexPos(self.index)
- self:SetPosition(pos.x, pos.y)
- end
- end
-
- function AchieveItem:__delete( )
- for i,item in pairs(self.awardItem_list) do
- UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, item)
- end
- self.awardItem_list = {}
-
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.transform)
- end
|