源战役客户端
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.
 
 
 
 
 

328 lines
10 KiB

PetCollectionView = PetCollectionView or BaseClass(BaseItem)
local PetCollectionView = PetCollectionView
function PetCollectionView:__init()
self.base_file = "pet"
self.layout_file = "PetCollectionView"
self.model = PetModel:getInstance()
self.full_screen = true
self.ani_right = 400
self.ani_left = -200
self.cur_select_data = nil
self.current_info_panel_tag = false--属性框:true 技能框:false
self.skill_item_list = {}--技能itemlist
self:Load()
end
function PetCollectionView:Load_callback()
self.nodes = {
"left/previewBtn:obj",--预览按钮
"left/storyBtn:obj",--故事按钮
"mid/raceIcon:img",--种族icon
"con_model",--模型容器
"mid/name:tmp",--名字
"right/ScrollViewCollect/Viewport/Content","right/ScrollViewCollect",--图鉴scrollview
"mid/con_info/con_attr/ScrollViewAttr/Viewport/ContentAttr",--属性框容器
"mid/con_info/con_attr/ScrollViewAttr",--属性框scrollview
"mid/con_info/switchBtn:obj",--切换按钮
"mid/con_info/con_skill:obj","mid/con_info/con_attr:obj",--属性框技能框容器
"mid/con_info/fightText:txt",--战力
"right/rareTab2:img:obj", "right/rareTab3:img:obj", "right/rareTab1:img:obj", "right/rareTab4:img:obj",
"right/rareTab2/rareRed2:obj", "right/rareTab3/rareRed3:obj", "right/rareTab1/rareRed1:obj", "right/rareTab4/rareRed4:obj",
"right/rareTab2/tabText2:tmp", "right/rareTab3/tabText3:tmp", "right/rareTab1/tabText1:tmp", "right/rareTab4/tabText4:tmp",
"mid/msgBg:img",
"mid/con_info/fightLabel", "right/scrollBg:img",
"mid/getWayCon:obj", "mid/getWayCon/goGetDes:obj", "mid/getWayCon/getDes:tmp",
}
self:GetChildren(self.nodes)
-- lua_resM:setImageSprite(self,self.msgBg_img,"petExtra_asset","pet_collect_skill_di")
lua_resM:setOutsideImageSprite(self, self.scrollBg_img, GameResPath.GetPetImage("pet_collection_di"))
self:AddEvents()
if self.need_refreshData then
self:SetData(self.data)
end
end
function PetCollectionView:AddEvents( )
local on_click = function ( click_obj )
if self.switchBtn_obj == click_obj then--切换按钮
self.current_info_panel_tag = not self.current_info_panel_tag
self:UpdateAttrPanelSkillPanelSwitch()
elseif self.previewBtn_obj == click_obj then--进化预览
self.model:Fire(PetConst.OPEN_PET_PREVIEW,self.show_pet_id)
elseif self.storyBtn_obj == click_obj then--故事
self.model:Fire(PetConst.OPEN_PET_STORY_VIEW,self.show_pet_id)
elseif self.rareTab1_obj == click_obj then
self:UpdateCollectScrollView(1)
elseif self.rareTab2_obj == click_obj then
self:UpdateCollectScrollView(2)
elseif self.rareTab3_obj == click_obj then
self:UpdateCollectScrollView(3)
elseif self.rareTab4_obj == click_obj then
self:UpdateCollectScrollView(4)
elseif self.goGetDes_obj == click_obj then
self:OpenGetWay()
end
end
AddClickEvent(self.switchBtn_obj, on_click)
AddClickEvent(self.previewBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.storyBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.rareTab1_obj, on_click)
AddClickEvent(self.rareTab2_obj, on_click)
AddClickEvent(self.rareTab3_obj, on_click)
AddClickEvent(self.rareTab4_obj, on_click)
AddClickEvent(self.goGetDes_obj, on_click)
local function on_ans_update_red_dot(tab_id)
if not self.is_loaded then return end
if tab_id == PetConst.RED_DOT_TYPE.Active then
self:RefreshRed()
end
end
self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, on_ans_update_red_dot)
end
function PetCollectionView:OpenGetWay( )
if not self.cur_select_data then return end
local goods_id = stringtotable(self.cur_select_data.cost)[1][2]
UIToolTipMgr:getInstance():AppendGoodsTips(goods_id, nil, nil,nil,nil,nil,nil,true,true)
end
function PetCollectionView:RefreshRed( )
local red_1 = self.model:GetSingleRareActiveRedDot(1)
local red_2 = self.model:GetSingleRareActiveRedDot(2)
local red_3 = self.model:GetSingleRareActiveRedDot(3)
local red_4 = red_1 or red_2 or red_3
self.rareRed1_obj:SetActive(red_1)
self.rareRed2_obj:SetActive(red_2)
self.rareRed3_obj:SetActive(red_3)
self.rareRed4_obj:SetActive(red_4)
end
function PetCollectionView:UpdateView( )
-- self:UpdateCollectScrollView(self.model:GetPetBySort())
self:UpdateCollectScrollView(4)
self:UpdateAttrPanelSkillPanelSwitch()
self:RefreshRed()
end
--刷新图鉴scrollview
function PetCollectionView:UpdateCollectScrollView(index)
for i=1,4 do
if index ~= i then
lua_resM:setImageSprite(self, self["rareTab"..i.."_img"], "uiComponent_asset","com_empty")
self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("9eb3cf")
SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
else
lua_resM:setImageSprite(self, self["rareTab"..i.."_img"], "pet_asset","pet_top_bar_select")
self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("ffffff")
SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab)
end
end
local pet_list = {}
if index == 4 then
pet_list = self.model:GetPetBySort()
else
pet_list = self.model:GetPetRareCfg(index)
end
--图鉴item的点击回调函数
local function select_callback(data)
self.show_pet_id = data.pet_id--记录当前展示中的宠物id
self:UpdatePetInfo(data)
self:UpdateCollectAttrPanel(stringtotable(data.attr_list))--刷新属性框
self:UpdateCollectSkillPanel(data.pet_id)--刷新技能框
end
if not self.item_list_com then
self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
end
self.item_list_com:Reset()
self.model.select_collect_item_id = 0
--找到最前面那个可以解锁的宠物index
local jump_index = 1
for i,v in ipairs(pet_list) do
local can_active = self.model:GetSingleActiveRedDot(v.pet_id)
if can_active then
jump_index = i
break
end
end
local info = {
data_list = pet_list,
item_con = self.Content,
item_class = PetCollectItem,
item_width = 112,
item_height = 112+5,
space_x = 10,
space_y = 12-5,
start_x = 15.5,
start_y = -6.5,
scroll_view = self.ScrollViewCollect,
create_frequency = 0.01,
on_update_item = function(item, i, v)
item:SetData(i,v,select_callback,#pet_list)
-- self.item_list_com:IterateItems(function( item, i )
-- item:OnClick(1)--每次进入scrollview时默认选中第一个
-- end)
end,
final_callback = function()
if jump_index ~= 1 then
self.item_list_com:ScrollToItem(jump_index,0)
end
end,
}
self.item_list_com:UpdateItems(info)
self.item_list_com:IterateItems(function( item, i )
item:OnClick(1)
end)
end
--设置属性框和技能框的切换显示
function PetCollectionView:UpdateAttrPanelSkillPanelSwitch()
if self.current_info_panel_tag then--显示属性框
self.con_attr_obj:SetActive(true)
-- self.con_skill_obj:SetActive(false)
else--显示技能框
self.con_attr_obj:SetActive(false)
-- self.con_skill_obj:SetActive(true)
end
end
--刷新属性框
function PetCollectionView:UpdateCollectAttrPanel(attr_list)
local need_attr_list = {}
for k,v in pairs(attr_list) do
local data = {v[1],v[2]}
table.insert(need_attr_list,data)
end
--刷新战力
self.fightText_txt.text = GetFighting(need_attr_list)
SetAnchoredPositionX(self.fightLabel,52-self.fightText_txt.preferredWidth/2-45)
local is_base_attr = true
if not self.attr_list_com then
self.attr_list_com = self:AddUIComponent(UI.ItemListCreator)
end
local info = {
data_list = attr_list,
item_con = self.ContentAttr,
item_class = PetCollectAttrItem,
-- item_width = 180,
item_height = 47,
-- space_x = -3,
space_y = -3,
start_y = 0,
start_x = 0,
scroll_view = self.ScrollViewAttr,
create_frequency = 0.01,
on_update_item = function(item, i, v)
item:SetData(i,v,is_base_attr)
end,
}
self.attr_list_com:UpdateItems(info)
end
--刷新技能框
function PetCollectionView:UpdateCollectSkillPanel(pet_id)--pet_id
local skill_table = {}
for i=1,4 do
local data = self.model:GetPetSkillCfg(pet_id,i)--通过id和槽位获取技能配置
if data then
table.insert(skill_table,data)
end
end
local pet_data = self.model:GetPetListById(pet_id)
local pet_stage = pet_data and pet_data.pet_stage or 0
local pet_star = pet_data and pet_data.pet_star or 0
for k,v in pairs(self.skill_item_list) do
v:SetVisible(false)
end
for i,v in ipairs(skill_table) do
local item = self.skill_item_list[i]
if not item then
item = PetCollectSkillItem.New(self.con_skill)
self.skill_item_list[i] = item
end
item:SetVisible(true)
item:SetData(v,pet_id,1)
item:SetPosition(17+95*(i-1),-6)
end
end
--刷新形象、名字等的显示
function PetCollectionView:UpdatePetInfo(pet_data)
self.cur_select_data = pet_data and pet_data or nil
lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..pet_data.pet_race,true)
local get_des_cfg = PetConst.PetGetWayDes[pet_data.pet_id]
if get_des_cfg then
self.getWayCon_obj:SetActive(true)
self.getDes_tmp.text = get_des_cfg.des
SetAnchoredPositionX(self.goGetDes,-45+self.getDes_tmp.preferredWidth/2+45)
else
self.getWayCon_obj:SetActive(false)
end
--设置姓名
local pet_stage = 1
local show_figure_id = pet_data.figure_id
--取当前最高表现的资源id
-- local my_pet_data = self.model:GetPetListById(pet_data.pet_id)
-- if my_pet_data then
-- pet_stage = my_pet_data.pet_stage
-- show_figure_id = self.model:GetPetCfg(my_pet_data.pet_id,my_pet_data.pet_star).figure_id
-- end
self.name_tmp.text = Trim(pet_data.pet_name)
SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20)
local res_data = {
father_node = self,
transform = self.con_model,
fashion_type = FuncOpenModel.TypeId.Pet,
figure_id = show_figure_id,
ui_model_type = UIModelCommon.ModelType.BackModel,
use_green_screen = true,
green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
}
local function delay_method( )
FuncOpenModel:getInstance():SetModelRes(res_data)
end
setTimeout(delay_method, 0.02)
end
function PetCollectionView:SetData( data )
self.data = data
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function PetCollectionView:__delete( )
for i, v in ipairs(self.skill_item_list) do
v:DeleteMe()
end
self.skill_item_list = {}
end