源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

403 lines
12 KiB

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