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
|