SkillUIDetailItem = SkillUIDetailItem or BaseClass(BaseItem) SkillUIDetailItem.UIType = { PreViewMode = 1, NonePreView = 2, } function SkillUIDetailItem:__init(parent_wnd, prefab_asset, layer_name) self.base_file = "skillUI" self.layout_file = "SkillUIDetailItem" self.model = SkillManager:getInstance() self.skillui_model = SkillUIModel:getInstance() self.mainVo = RoleManager.Instance.mainRoleInfo self.skill_vo = false self.is_pre_view = false self.ui_type = SkillUIDetailItem.UIType.PreViewMode self.attr_one_item_list = {} self.need_goods_id = false self.showing_effect = false self.show_skill_preview = false self.select_level = false self.show_item_list = {} self:Load() end --清除界面 function SkillUIDetailItem:__delete() self:Remove() end function SkillUIDetailItem:Load_callback() self:LoadSuccess() self:InitEvent() end function SkillUIDetailItem:Remove() if self.base_item then UIObjPool:PushItem(UIObjPool.UIType.AwardItem, self.base_item) end self:ClearUIEffect(self.effect_con) self:ClearUIEffect(self.effect_con2) for i,v in ipairs(self.show_item_list) do v:DeleteMe() end end function SkillUIDetailItem:LoadSuccess() local nodes = { "priview_btn:obj:img", "base_con_one/power:txt", "base_con_one/name:tmp", "base_con_one/cd:tmp", "base_con_one/effect_con", "base_con_one:obj", "base_con_one/level:tmp", "base_con_one/des_group/des:tmp", "base_con_one/des_group/cur_level:obj", "base_con_one/des_group:obj", "attrlist_group/can_not_up:obj", "base_con_one/ScrollViewSkill:obj", "base_con_one/ScrollViewSkill/Viewport/skill_level_list_con", "base_con_two:obj", "base_con_two/power2:txt", "base_con_two/name2:tmp", "base_con_two/des_group2:obj", "base_con_two/des_group2/des2:tmp", "base_con_two/icon2:img", "base_con_two/effect_con2", "priview_group:obj", "level_max:obj", "attrlist_group:obj", "learn_group/daily_light_learn:obj", "learn_group/pre_condition:obj", "learn_group/item_learn:obj", "learn_group/vip_condition:obj", "attrlist_group/ScrollViewTwo/Viewport/attr_two_con", "attrlist_group/ScrollViewTwo:obj", "priview_group/play_btn:obj", "priview_group/skill_role_con:raw", "learn_group/daily_light_learn/daily_light_des:tmp", "learn_group/daily_light_learn/dialy_light_btn:obj", "learn_group/item_learn/item_name:tmp", "learn_group/vip_condition/vip_btn:obj", "learn_group/vip_condition/vip_btn/vip_des:tmp", "learn_group/pre_condition/pre_condition_text:tmp", "learn_group/item_learn/go_way_btn:obj", "learn_group/item_learn/go_way_btn/go_way_btn_text:tmp", "learn_group/item_learn/item_con", "learn_group/item_learn/learn_btn:obj", "learn_group/item_learn/learn_btn/learn_btn_txt:tmp", "priview_group/priew_text:obj", "auto_change_daily_btn/auto_change_daily_select:obj", "auto_change_daily_btn:obj", "learn_group/daily_light_learn/dialy_light_btn/daily:obj", } self:GetChildren(nodes) self:UpdateAutoChangeDailySkillState() self.daily_obj:SetActive(false) if self.need_refreshData then self:SetData(self.skill_vo, self.ui_type, self.is_pre_view) end end function SkillUIDetailItem:InitEvent() local function onBtnClickHandler(target) if self.priview_btn_obj == target then --self.is_pre_view = not self.is_pre_view -- self:SwitchViewModel() -- if self.click_callback then -- self.click_callback(self.is_pre_view) -- end elseif self.play_btn_obj == target then elseif self.up_preview_btn_obj == target then --self.skillui_model:Fire(SkillUIModel.OPEN_SKILL_UPLEVEL_PREVIEW, self.skill_vo) elseif self.learn_btn_obj == target then if self.skill_vo and self.skill_vo.id then self.model:Fire(SkillManager.REQUEST_CCMD_EVENT,21001, self.skill_vo.id ) end elseif self.dialy_light_btn_obj == target then self.skillui_model:Fire(SkillUIModel.CLOSE_SKILL_UPLEVEL_PREVIEW) OpenFun.Open(147, 0) elseif self.vip_btn_obj == target then self.skillui_model:Fire(SkillUIModel.CLOSE_SKILL_UPLEVEL_PREVIEW) OpenFun.Open(158, 0) elseif self.go_way_btn_obj == target then if self.need_goods_id then --商店获取途径 local goods = self.skill_vo:GetNextConditionByKey("goods") if goods and goods[1][1] and goods[1][2] then local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods[1][1]) local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(goods[1][1]) or 0 local get_str = HtmlColorTxt(goods_num, goods_num < goods[1][2] and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK).."/".. goods[1][2] local cfg = ShopModel:getInstance():GetShopTypeIdBuyCFG(basic.type_id) if cfg and TableSize(cfg) > 0 and string.find(get_str, ColorUtil.RED_DARK) then ShopModel:getInstance():Fire(ShopModel.OPEN_SHOP_BUY_TIP_VIEW,basic.type_id) else Message.show("参与各项活动概率获得哦!") end else Message.show("参与各项活动概率获得哦!") end end elseif self.pre_condition_obj == target then if self.skill_vo and self.skill_vo:IsSpecialSkill() then self.skillui_model:Fire(SkillUIModel.CLOSE_SKILL_UPLEVEL_PREVIEW) OpenFun.Open(144, 0) elseif self.skill_vo and SevenDayTargetModel:GetInstance():IsSevenDayTargetSkill(self.skill_vo.id) then self.skillui_model:Fire(SkillUIModel.CLOSE_SKILL_UPLEVEL_PREVIEW) SevenDayTargetModel:getInstance():Fire(SevenDayTargetModel.OPEN_SEVEN_DAY_TARGET_MAIN_VIEW) elseif self.skill_vo and self.skill_vo:IsForbidJumpSkill() then if not SupremeVipModel:getInstance():IsForeverSupremeVip() then self.skillui_model:Fire(SkillUIModel.CLOSE_SKILL_UPLEVEL_PREVIEW) if SupremeVipModel:getInstance():IsMomentSupremeVip() then OpenFun.Open(451,6) else OpenFun.Open(451,5) end end end elseif self.auto_change_daily_btn_obj == target then local b = self.skillui_model:IsAutoChangeDailySkillid() b = not b self.skillui_model:SetAutoChangeDailyState(b) self:UpdateAutoChangeDailySkillState() end end AddClickEvent(self.play_btn_obj,onBtnClickHandler) AddClickEvent(self.up_preview_btn_obj,onBtnClickHandler) AddClickEvent(self.priview_btn_obj,onBtnClickHandler) AddClickEvent(self.learn_btn_obj, onBtnClickHandler) AddClickEvent(self.dialy_light_btn_obj, onBtnClickHandler) AddClickEvent(self.go_way_btn_obj, onBtnClickHandler) AddClickEvent(self.vip_btn_obj, onBtnClickHandler) AddClickEvent(self.pre_condition_obj, onBtnClickHandler) AddClickEvent(self.auto_change_daily_btn_obj, onBtnClickHandler) local function onUpdateSkillList() if self.skill_vo then local id = self.skill_vo.id self.skill_vo = self.model:getSkill(id) self:UpdateSkillInfo(self.skillui_model.is_level_up) --如果当前是1级,则播放升级特效 if self.skill_vo.level == 1 and self.skillui_model.is_level_up then self:AddEffect() end self.skillui_model.is_level_up = false end end self:BindEvent(self.model,SkillManager.UPDATE_SKILL_LIST, onUpdateSkillList) local function onChangeBagListHandler() self:UpdateLearnGroup() end self:BindEvent(GoodsModel:getInstance(),GoodsModel.CHANGE_BAGLIST,onChangeBagListHandler) local function onClickSkillItem(view_index, skill_id, pos) if view_index == SkillUIModel.Click_SkillItem.SkillLevelShow then if self.show_item_list[pos] then self.select_level = self.show_item_list[pos]:GetSkillLevel() self:UpdateAttr(false, true) for i,v in ipairs(self.show_item_list) do v:SetSelect(v:GetSkillLevel() == self.select_level) end end end end self:BindEvent(self.skillui_model,SkillUIModel.CLICK_SKILL_ITEM, onClickSkillItem) end function SkillUIDetailItem:SetData(vo, ui_type, is_pre_view) self.skill_vo = vo self.ui_type = ui_type or self.ui_type self.is_pre_view = is_pre_view or self.is_pre_view self.select_level = false if self.is_loaded then self:UpdateSkillInfo() else self.need_refreshData = true end end function SkillUIDetailItem:UpdateSkillInfo(is_up) local skill_vo = self.skill_vo local cd = skill_vo:getCd() local ui_type = self.ui_type if not self:CanPreview(self.skill_vo) then ui_type = SkillUIDetailItem.UIType.NonePreView end local show_special = self.model:IsShowSpecialSkill(self.skill_vo.id) self.base_con_two_obj:SetActive(show_special) self.base_con_one_obj:SetActive(not show_special) self.cd_tmp.text = cd == 0 and " " or string.format("冷却:%s", HtmlColorTxt((cd / 1000) .. "s", "#fdffc2")) self.des_tmp.text = skill_vo:GetDesc(1) self.power_txt.text = skill_vo:GetPower() self.name_tmp.text = skill_vo:getName() self.level_tmp.text = "" self.power2_txt.text = "f" .. skill_vo:GetPower() self.name2_tmp.text = skill_vo:getName() self.des2_tmp.text = skill_vo:GetDesc(1) lua_resM:setOutsideImageSprite(self,self.icon2_img,GameResPath.GetSkillIcon(skill_vo.id), false) lua_resM:setOutsideImageSprite(self,self.icon_img,GameResPath.GetSkillIcon(skill_vo.id), false) --self.priview_btn_obj:SetActive(ui_type == SkillUIDetailItem.UIType.PreViewMode) self.priview_btn_obj:SetActive(false) --self:SwitchViewModel() self:UpdateAttr(is_up) self:UpdateLearnGroup() end function SkillUIDetailItem:UpdateAttr(is_up, update_select) local skill_vo = self.skill_vo local attrs = skill_vo:GetSkillAttrList(nil, true) local level = skill_vo.level if self.ui_type == SkillUIDetailItem.UIType.PreViewMode and not self.is_pre_view then self.attrlist_group_obj:SetActive(true) self.des_group_obj:SetActive(true) else self.attrlist_group_obj:SetActive(false) self.des_group_obj:SetActive(false) end --self.cur_level_obj:SetActive(level == 1) self.cur_level_obj:SetActive(false) local attr_temp = false local attr_temp_show = false if #attrs > 10 then attr_temp = {} attr_temp_show = {} if level >= #attrs - 4 then for i= #attrs - 4, #attrs do table.insert(attr_temp, attrs[i]) table.insert(attr_temp_show, attrs[i]) end else if level <= 1 then table.insert(attr_temp_show, {level = 1,}) end local start = level > 1 and level or 2 for i= start, start + 4 do table.insert(attr_temp, attrs[i]) table.insert(attr_temp_show, attrs[i]) end end else attr_temp = {} attr_temp_show = {} for i,v in ipairs(attrs) do if v.level ~= 1 then table.insert(attr_temp, v) end table.insert(attr_temp_show, v) end end for i,v in ipairs(self.attr_one_item_list) do v:ClearAllUIEffect() v:SetVisible(false) end if not self.select_level then self.select_level = self.skill_vo.level ~= 0 and self.skill_vo.level or 1 end self.ScrollViewTwo_obj:SetActive(false) self.can_not_up_obj:SetActive(#attr_temp == 0) for i,v in ipairs(attr_temp) do local item = self.attr_one_item_list[i] if not item then item = SkillUIAttrOne.New(self.attr_two_con,nil,self.layer_name) self.attr_one_item_list[i] = item end local lv_str = (v.level) <= level and HtmlColorTxt(string.format("突破%d", v.level), "#ffffff") or HtmlColorTxt(string.format("突破%d", v.level), "#8b8b8b") local text_str = (v.level) <= level and HtmlColorTxt(v.des, "#ffffff") or HtmlColorTxt(v.des, "#8b8b8b") local b_cur = (v.level)== level local b_toggle = (v.level) <= level item:SetVisible(true) item:SetData(lv_str, text_str, b_cur, b_toggle, i) item:WillShowEffect((v.level)== level and is_up) item:SetSelect(v.level == self.select_level) end self.ScrollViewTwo_obj:SetActive(true) if not update_select then self:UpdateShowListItem(attr_temp_show) end end function SkillUIDetailItem:UpdatePreView() local skill_vo = self.skill_vo local model_id, texture_id = self.mainVo:GetRoleClotheTextureId() local weapon_model_id, weapon_texture_id = self.mainVo:GetWeaponClotheId() local head_model_id, head_clothe_id = self.mainVo:GetRoleHeadId() local skill_preview_callback = function (case) if case == 1 then self.play_btn_obj:SetActive(false) elseif case == 2 then self.play_btn_obj:SetActive(true) end end local ab_name = "" local res_name = "" local show_root = false if self.show_skill_preview then ab_name = "icon_skillui_skill_ui_bg_1" res_name = "skill_ui_bg_1.png" show_root = true self.play_btn_obj:SetActive(true) self.priew_text_obj:SetActive(true) else ab_name = "icon_skillui_skill_ui_bg_3" res_name = "skill_ui_bg_3.png" show_root = false self.play_btn_obj:SetActive(false) self.priew_text_obj:SetActive(false) end local data = { career = self.mainVo.career, clothe_res_id = self.mainVo:GetRoleClotheId(), weapon_res_id = weapon_model_id, weapon_clothe_id = weapon_texture_id, type = SceneBaseType.MainRole, fashion_model_id = model_id, texture_id = texture_id, callBack = call_back, wing_id = self.mainVo.wing_id, image_id = self.mainVo.image_id, head_wear_id = head_model_id, head_clothe_id =head_clothe_id, position = Vector3(-100, 100, 45), skill_id = skill_vo.id, size = Vector2(1200 *1.4 * 0.5 ,720*1.4 * 0.5), skill_preview = true, scale = 84, raycast_size = Vector2(100, 100), skill_preview_callback = skill_preview_callback, use_bloom = true, can_rotate = false, action_name_list = {"idle"}, show_root = show_root, camera_args = { orthographic = false, fieldOfView = 90, localPosition = Vector3(0,255,0), localRotation = Vector3(15,0,0), }, rotate = Vector3(0, 45, 0), using_sprite_bg = { ab_name = ab_name, asset_name = res_name, position = Vector3(2, -445, 2000), scale = Vector3(518, 518, 518), rotation = Vector3(15, 0, 0), } } lua_resM:SetRoleModelByRT(self,self.skill_role_con,data) end function SkillUIDetailItem:SwitchViewModel() local skill_vo = self.skill_vo local is_pre_view = self.is_pre_view local ui_type = self.ui_type if not self:CanPreview(self.skill_vo) then ui_type = SkillUIDetailItem.UIType.NonePreView is_pre_view = false end local b = is_pre_view and ui_type == SkillUIDetailItem.UIType.PreViewMode lua_resM:setImageSprite(self, self.priview_btn_img, "skillui_asset",b and "skill_ui_6" or "skill_ui_22", false) --self.self.priview_group_obj:SetActive(b) self.show_skill_preview = b self.attrlist_group_obj:SetActive(not b) self.des_group_obj:SetActive(not b) --self:UpdatePreView( ) end function SkillUIDetailItem:UpdateLearnGroup() local skill_vo = self.skill_vo local is_max = skill_vo:IsMaxLevel() self.level_max_obj:SetActive(false) self.item_learn_obj:SetActive(false) self.pre_condition_obj:SetActive(false) self.daily_light_learn_obj:SetActive(false) self.vip_condition_obj:SetActive(false) self.auto_change_daily_btn_obj:SetActive(self.skill_vo:IsDailyLightSkill()) self.need_goods_id = false if is_max then self.level_max_obj:SetActive(true) else if self.skill_vo:IsSpecialSkill() and not SevenDayTargetModel:GetInstance():IsSevenDayTargetSkill(self.skill_vo.id) then self.pre_condition_obj:SetActive(true) self.pre_condition_text_tmp.text = HtmlColorTxt("魂力突破", "#0ce148") self.pre_condition_text_tmp.text = string.format("提升 %s 可升级 %s", HtmlColorTxt("魂力突破", "#FFE27D"), HtmlColorTxt("前往培养", "#0ce148")) elseif self.skill_vo:IsDailyLightSkill() then self.daily_light_learn_obj:SetActive(true) local item = self.skillui_model:GetDailySkillItem(skill_vo.id, skill_vo.level + 1) local str = skill_vo.level == 0 and "可获得" or "可升级" if item then self.daily_light_des_tmp.text = string.format("激活 %s %s %s", HtmlColorTxt(Trim(item.name), "#9C6CFF"), str, HtmlColorTxt("前往激活", "#2CF86F")) else self.daily_light_des_tmp.text = "暂时无法获取" end elseif SevenDayTargetModel:GetInstance():IsSevenDayTargetSkill(skill_vo.id) then self.pre_condition_obj:SetActive(true) self.pre_condition_text_tmp.text = "七日目标任务获取" elseif self.skill_vo:IsForbidJumpSkill() then self.pre_condition_obj:SetActive(true) self.pre_condition_text_tmp.text = string.format("激活 %s 可获得 %s", HtmlColorTxt("二阶贵族", "#FFE27D"), HtmlColorTxt("前往获得", "#0ce148")) else local vip = skill_vo:GetNextConditionByKey("vip") local turn = skill_vo:GetNextConditionByKey("turn") local level = skill_vo:GetNextConditionByKey("level") local goods = skill_vo:GetNextConditionByKey("goods") if self.base_item then self.base_item:SetVisible(false) end if skill_vo:CanUpButGoods() then self.item_learn_obj:SetActive(true) if not self.base_item then self.base_item = UIObjPool:PopItem(UIObjPool.UIType.AwardItem, self.item_con) self.base_item:SetItemSize(78, 78) end if goods then self.base_item:SetVisible(true) print(">>>>>>>>>>>>>>道具id", goods[1][1], goods[1][2]) local basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods[1][1]) self.need_goods_id = goods[1][1] self.base_item:SetData(goods[1][1], goods[1][2]) self.item_name_tmp.text = Language.substitute("{1}", WordManager.GetGoodsColor(basic.color), Trim(basic.goods_name)) local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(goods[1][1]) or 0 local get_str = HtmlColorTxt(goods_num, goods_num < goods[1][2] and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK).."/".. goods[1][2] self.base_item:SetNumStr("") self.base_item:IsGetGoods(true,get_str,true) self.go_way_btn_obj.gameObject:SetActive(true) local cfg = ShopModel:getInstance():GetShopTypeIdBuyCFG(basic.type_id) local str = "" if cfg and TableSize(cfg) > 0 then local shop_cfg = false for k,v in pairs(cfg) do shop_cfg = v break end str = HtmlColorTxt( string.format("%s", ShopModel:getInstance():GetShopTabName(shop_cfg.shop_type)), "#0ce148") else str = HtmlColorTxt("运营活动", "#0ce148") end self.go_way_btn_text_tmp.text = str else self.base_item:SetVisible(false) self.item_name_tmp.text = "" self.go_way_btn_obj.gameObject:SetActive(false) end else if vip then self.vip_condition_obj:SetActive(true) local str = skill_vo.level == 0 and "可获得" or "可升级" self.vip_des_tmp.text = string.format("达到 %s %s", HtmlColorTxt("VIP"..vip .. "", "#2cf86f"), str) elseif level then local str = skill_vo.level == 0 and "可学习" or "可升级" self.pre_condition_obj:SetActive(true) if turn and turn > 0 then self.pre_condition_text_tmp.text = string.format("达到 %s %s", HtmlColorTxt(turn.."转".. level .. "级", "#2cf86f"), str) else self.pre_condition_text_tmp.text = string.format("达到 %s %s", HtmlColorTxt(level.."级", "#2cf86f"), str) end end end end self.learn_btn_txt_tmp.text = skill_vo.level == 0 and "学习技能" or "升级技能" end end function SkillUIDetailItem:SetClickCallBack(cb) self.click_callback = cb end function SkillUIDetailItem:CanPreview(skill_vo) return skill_vo and skill_vo:GetSkillType()== SkillVo.SkillType.Initiative and Config.CareerFightMovies[skill_vo.id] end function SkillUIDetailItem:AddEffect() if not self.showing_effect then local function call_back( ) self.showing_effect = false end self:ClearUIEffect(self.effect_con) self:ClearUIEffect(self.effect_con2) if self.skill_vo and not self.model:IsShowSpecialSkill(self.skill_vo.id)then self:AddUIEffect("ui_jinjieshuxing", self.effect_con, self.layer_name, Vector3(-170,0,0), 1, false, 0.75, false, call_back) else self:AddUIEffect("ui_jinjieshuxing", self.effect_con2, self.layer_name, Vector3(-170,0,0), 1, false, 0.75, false, call_back) end self.showing_effect = true end end function SkillUIDetailItem:UpdateShowListItem(list) if self.skill_vo and not self.model:IsShowSpecialSkill(self.skill_vo.id)then for i,v in ipairs(self.show_item_list) do v:SetVisible(false) end if not list or #list == 0 or not self.skill_vo then return end local idx = false local is_one = #list == 1 SetAnchoredPositionX(self.ScrollViewSkill, is_one and (140 - 45 ) or -28) SetSizeDeltaX(self.skill_level_list_con, is_one and 300 or (165 * #list - 55) ) for i, v in ipairs(list) do local skill_vo = SkillVo.New(self.skill_vo.id) skill_vo.level = v.level local item = self.show_item_list[i] if not item then item = SkillUIItem.New(self.skill_level_list_con,nil,self.maskID) self.show_item_list[i] = item end item:SetVisible(true) item:SetUseFor("SkillLevelShow") item:SetData(skill_vo, i, SkillUIModel.Click_SkillItem.SkillLevelShow, false) item:CanDrag(false) item:SetLockInfo(true) item:SetAnchoredPosition( is_one and 100 or (55 + 165 * (i - 1)), -45) item:SetSelect(skill_vo.level == self.select_level) item:SetLock(skill_vo.level > self.skill_vo.level) if i == #list then item:ShowNext(false) else item:ShowNext(skill_vo.level <= self.skill_vo.level and 1 or 0) end if not idx and (skill_vo.level == self.skill_vo.level or self.skill_vo.level == 0) then idx = i end end idx = idx or 1 if idx < 2 then idx = 0 elseif idx > #list - 2 then idx = #list - 3 else idx = idx -2 end SetAnchoredPositionX(self.skill_level_list_con, idx * (- 165)) end end function SkillUIDetailItem:UpdateAutoChangeDailySkillState() local b = self.skillui_model:IsAutoChangeDailySkillid() self.auto_change_daily_select_obj:SetActive(b) end