SkillConfigView = SkillConfigView or BaseClass(BaseView) SkillConfigView.POS_MAX = 8 function SkillConfigView:__init() self.base_file = "skillUI" self.layout_file = "SkillConfigView" self.layer_name = "Activity" self.model = SkillManager:getInstance() self.skillui_model = SkillUIModel:getInstance() self.use_background = true self.click_bg_toClose = true self.change_scene_close = true self.destroy_imm = true self.is_set_zdepth = true self.blur_activity_bg = true self.use_show_anim = true self.use_hide_anim = true self.skill_item_list = {} self.config_skill_item_list = {} self.skill_tabs = false self.pos_table = {} self.select_plan = 1 self.skill_plan_id_list = {} self.select_skill_id = false self.select_slot_pos = false self.drag_skill_id = false self.target_change_pos = false self.drag_view_mrg = DragViewMgr.New() self.slot_pos_unlock_table = Config.ConfigSkillUI.SlotPosUnLockTurn self.load_callback = function () self:LoadSuccess() self:InitEvent() self:UpdateSkillPlanInfo() if self.need_refreshData == true then self:SetData(self.select_skill_id) self:UpdataSkillInfo(self.select_skill_id) end end self.open_callback = function () end self.close_callback = function () self:Remove() end end function SkillConfigView:Remove() for i,v in ipairs(self.skill_item_list) do v:DeleteMe() end self.skill_item_list = {} for i,v in ipairs(self.config_skill_item_list) do v:DeleteMe() end self.config_skill_item_list = {} if self.drag_view_mrg then self.drag_view_mrg:DeleteMe() end end function SkillConfigView:LoadSuccess() local nodes = { "mid/icon:img","mid/cd:tmp","mid/des:tmp","mid/power:txt","right/skill_config_con/bg:raw", "right/skill_config_con/skil_list_con", "mid/close:obj", "mid/ScrollView/Viewport/skill_con", } self:GetChildren(nodes) self.pos_table = {} for i=1,SkillConfigView.POS_MAX do self.pos_table[i] = self:GetChild("right/skill_config_con/skil_list_con/pos_"..i) end self.mScroll = self:GetChild("mid/ScrollView"):GetComponent("ScrollRect") self.skill_tabs = {} for i=1, 3 do self.skill_tabs[i] = {} self.skill_tabs[i].trans = self:GetChild("mid/ScrollView/Viewport/skill_con/tltle_"..i) self.skill_tabs[i].obj = self:GetChild("mid/ScrollView/Viewport/skill_con/tltle_"..i).gameObject self.skill_tabs[i].text = self:GetChild("mid/ScrollView/Viewport/skill_con/tltle_"..i.."/text"):GetComponent("TextMeshProUGUI") self.skill_tabs[i].title_bg = self:GetChild("mid/ScrollView/Viewport/skill_con/tltle_"..i.."/title_bg"):GetComponent("Image") end end function SkillConfigView:InitEvent() local function onBtnClickHandler(target) if target == self.close_obj then self:Close() end end AddClickEvent(self.close_obj, onBtnClickHandler) local function onClickSkillItem(view_index, skill_id, pos) if view_index == SkillUIModel.Click_SkillItem.ConfigList then self:UpdataSkillInfo(skill_id) elseif view_index == SkillUIModel.Click_SkillItem.ConfigSolt then self:SelectIdxSlot(pos, self.select_slot_pos, self.select_skill_id) end end self:BindEvent(self.skillui_model,SkillUIModel.CLICK_SKILL_ITEM, onClickSkillItem) local function onUpdateSkillList() self:UpdateSkillPlanInfo() self:UpdataSkillInfo(self.select_skill_id) --self:AddEffect() end self:BindEvent(self.model,SkillManager.UPDATE_SKILL_LIST, onUpdateSkillList) local function OnDragSkillItemEnd(item,skill_id, pos, ui_type) local pos = self.skil_list_con.transform:InverseTransformPoint(item.transform.position) local index = self:CheckDragSelectIndex(pos) if index then local my_turn = RoleManager:getInstance():GetMainRoleVo().turn if self.slot_pos_unlock_table[index] > my_turn then local career = RoleManager:getInstance():GetMainRoleVo().career local cfg = Config.Transfercareer local career_name = "" for k,v in pairs(cfg) do if v.career == career and v.transfer_id == self.slot_pos_unlock_table[index] then career_name = Trim(v.name) break end end Message.show(string.format("转职为%s后可解", HtmlColorTxt(career_name, "#2cf86f"))) else local select_slot_pos = false for i,v in ipairs(self.skill_item_list) do local b = skill_id == v:GetSkillId() if b then select_slot_pos = i break end end if index ~= select_slot_pos then self:SelectIdxSlot(index, select_slot_pos, skill_id) end end end self.drag_skill_id = false self:UpdateDragTips(self.select_skill_id) end self:BindEvent(self.skillui_model,SkillUIModel.DRAG_SKILL_ITEM_END,OnDragSkillItemEnd) local function begin_callback(item) local skill_vo = self.model:getSkill(self.drag_skill_id) item:SetUseFor("SkillDrag") item:SetData(skill_vo,nil,nil,true) item:SetSelect(false) item:ShowRedDot(false) item:SetLock(false) end local function end_callback(item) self.skillui_model:Fire(SkillUIModel.DRAG_SKILL_ITEM_END, item, self.drag_skill_id, self.drag_skill_pos, 1) end local info = { item_class = SkillUIItem, begin_callback = begin_callback, end_callback = end_callback, } self.drag_view_mrg:Init(info) local function OnDragSkillItemBegin(skill_id, pos, ui_type) self.drag_skill_id = skill_id self.drag_skill_pos = pos self.drag_view_mrg:Start() self:UpdateDragTips(self.drag_skill_id) end self:BindEvent(self.skillui_model,SkillUIModel.DRAG_SKILL_ITEM_BEGIN,OnDragSkillItemBegin) end function SkillConfigView:SwitchPlan(plan) if plan == self.select_plan then return end self.select_plan = plan self:UpdateSkillPlanInfo() self:UpdataSkillInfo(self.select_skill_id) end function SkillConfigView:UpdateSkillPlanInfo() self.skill_plan_id_list = self.skillui_model:GetSkillPlan(self.select_plan) local my_turn = RoleManager:getInstance():GetMainRoleVo().turn for i=1,SkillConfigView.POS_MAX do local id = self.skill_plan_id_list[i] local item = self.skill_item_list[i] if not item then item = SkillUIItem.New(self.pos_table[i],nil, "SkillConfigView") self.skill_item_list[i] = item item:SetUseFor("SkillConfigViewSlot") end item:SetVisible(true) if self.slot_pos_unlock_table[i] > my_turn then item:SetLock(true) item:SetNil(i,SkillUIModel.Click_SkillItem.ConfigSolt) item:CanDrag(false) item:SetNeedTurnHandle(self.slot_pos_unlock_table[i]) else item:SetNeedTurnHandle(false) if id == 0 then item:SetNil(i,SkillUIModel.Click_SkillItem.ConfigSolt) item:CanDrag(false) else local skill_vo = self.model:getSkill(id) item:SetData(skill_vo, i, SkillUIModel.Click_SkillItem.ConfigSolt, true, false) item:SetLockInfo(false) item:CanDrag(true) end end end self:UpdateSkillList() end --点击技能槽位 function SkillConfigView:SelectIdxSlot(pos, select_slot_pos, select_skill_id) if select_slot_pos == false or self.skill_plan_id_list[pos] == 0 then --print(">>>>>>>>>>>>> 上阵技能: 位置 类型 方案 选中技能 方式",pos, SkillUIModel.Skill_Type.Skill, self.select_plan, self.select_skill_id, SkillUIModel.Hook_Type.Auto ) GlobalEventSystem:Fire(EventName.SAVE_SKILL_SHORTCUT, pos, SkillUIModel.Skill_Type.Skill, self.select_plan, select_skill_id, SkillUIModel.Hook_Type.Auto) else --print(">>>>>>>>>>>>> 替换技能: 位置1 位置2 方案 ", self.select_slot_pos, pos, self.select_plan) GlobalEventSystem:Fire(EventName.REPLACE_SKILL_SHORTCUT, select_slot_pos, pos, self.select_plan) end self.target_change_pos = pos end function SkillConfigView:UpdataSkillInfo(skill_id) if not skill_id then return end self.select_skill_id = skill_id if self.is_loaded then local skill_vo = self.model:getSkill(skill_id) local cd = skill_vo:getCd() self.cd_tmp.text = cd == 0 and "" or string.format("冷却:%s", HtmlColorTxt((cd / 1000) .. "s", "#2cf86f")) self.des_tmp.text = skill_vo:GetDesc(1) self.power_txt.text = "f" .. skill_vo:GetPower() lua_resM:setOutsideImageSprite(self,self.icon_img,GameResPath.GetSkillIcon(skill_id), false) else self.need_refreshData = true end self.select_slot_pos = false for i,v in ipairs(self.skill_item_list) do local b = skill_id == v:GetSkillId() v:SetSelect(b) if b then self.select_slot_pos = i end end for i,v in ipairs(self.config_skill_item_list) do local b = skill_id == v:GetSkillId() v:SetSelect(b) end self:UpdateDragTips(self.select_skill_id) end function SkillConfigView:SetData(skill_id) self.select_skill_id = skill_id or self.select_skill_id if self.is_loaded then self.skill_plan_id_list = self.skillui_model:GetSkillPlan(self.select_plan) local list = self.skillui_model:GetMyInitiativeSkillList() local pos = false local t_pos = 0 for i,v in ipairs(list) do for ii,id in ipairs(v) do t_pos = t_pos + 1 if id == skill_id then pos = t_pos break end end end if pos then self.skillui_model:Fire(SkillUIModel.CLICK_SKILL_ITEM, SkillUIModel.Click_SkillItem.ConfigList, self.select_skill_id, pos) end else self.need_refreshData = true end end function SkillConfigView:CheckDragSelectIndex(pos) local index = nil local function IsContain(i_pos_x, i_pos_y, i_w, i_h, in_pos) if in_pos.x > i_pos_x - i_w / 2 and in_pos.x < i_pos_x + i_w /2 and in_pos.y > i_pos_y - i_h / 2 and in_pos.y < i_pos_y + i_h / 2 then return true end end for i,v in ipairs(self.pos_table) do local item_pos_x,item_pos_y = GetAnchoredPosition(v) local item_w, item_h = GetSizeDeltaXY(v) if IsContain(item_pos_x, item_pos_y, item_w, item_h, pos) then index = i break end end return index end function SkillConfigView:UpdateSkillList() self.skill_id_table = self.skillui_model:GetMyInitiativeSkillList() if not self.skill_id_table then return end self.skill_id_list = {} for i=1,#self.skill_tabs do self.skill_tabs[i].obj:SetActive(false) end for i,v in ipairs(self.config_skill_item_list) do v:SetVisible(false, true) end local select_skill_id = self.select_skill_id local height = 0 local tab_heigt = 162 local item_start_x = 78 local item_start_y = -80 local item_width = 122 local item_height = 120 local idx = 1 for i,v in ipairs(self.skill_id_table) do self.skill_tabs[i].obj:SetActive(true) SetAnchoredPosition(self.skill_tabs[i].trans, 19.5 , - height) self.skill_tabs[i].text.text = self.skillui_model:GetTurnName(i - 1) for ii,vv in ipairs(v) do local row , col = self.skillui_model:GetRowCol(ii, 4) local skill_vo = self.model:getSkill(vv) self.skill_id_list[idx] = skill_vo local item = self.config_skill_item_list[idx] if not item then item = SkillUIItem.New(self.skill_con,nil,self.maskID, self.mScroll) self.config_skill_item_list[idx] = item end item:SetVisible(true, true) item:SetUseFor("SkillConfigViewList") item:SetData(skill_vo, idx, SkillUIModel.Click_SkillItem.ConfigList, false) item:SetSelect(skill_vo.id == self.select_id) item:CanDrag(skill_vo.level > 0) item:ShowRedDot(false) item:SetLockInfo(false) local x = item_start_x + (col - 1) * item_width local y = item_start_y - (row - 1) * item_height - height item:SetAnchoredPosition(x, y) if not select_skill_id then select_skill_id = skill_vo.id end idx = idx + 1 end height = height + tab_heigt local row , col = self.skillui_model:GetRowCol(#v, 4) height = height + (row - 1) * item_height end SetSizeDeltaY(self.skill_con, height) self:UpdataSkillInfo(select_skill_id) end function SkillConfigView:UpdateDragTips(select_skill_id) if select_skill_id then local skill_vo = self.model:getSkill(select_skill_id) if skill_vo and skill_vo.level > 0 then for i,v in ipairs(self.skill_item_list) do local my_turn = RoleManager:getInstance():GetMainRoleVo().turn if my_turn >= self.slot_pos_unlock_table[i] then if v:IsNil() then v:SetHandle(SkillUIItem.HANDLE_TYPE.config) elseif v:GetSkillId() == select_skill_id then v:SetHandle(SkillUIItem.HANDLE_TYPE.default) else v:SetHandle(SkillUIItem.HANDLE_TYPE.change) end end end else for i,v in ipairs(self.skill_item_list) do v:SetHandle(SkillUIItem.HANDLE_TYPE.default) end end end end function SkillConfigView:AddEffect() if self.target_change_pos then if self.target_change_pos and self.skill_item_list[self.target_change_pos] then self.skill_item_list[self.target_change_pos]:WillShowEffect(true) self.target_change_pos = false end end end