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

351 lines
13 KiB

PetTrainingView = PetTrainingView or BaseClass(BaseItem)
local PetTrainingView = PetTrainingView
function PetTrainingView:__init()
self.base_file = "pet"
self.layout_file = "PetTrainingView"
self.model = PetModel:getInstance()
self.full_screen = true
self.ani_right = 400
self.ani_left = -200
self.old_model_effct_play_time = 0
self.current_panel_tag = 0--当前选中的操作栏页签
self:Load()
end
function PetTrainingView:Load_callback()
self.nodes = {
"left/storyBtn:obj","left/previewBtn:obj","left/shareBtn:obj",--故事、预览、分享
"right/topBarCon/feedBtn:obj:img","right/topBarCon/skillBtn:obj:img","right/topBarCon/evolveBtn:obj:img",--操作栏页签按钮
"right/topBarCon/skillBtn/skillTxt:tmp", "right/topBarCon/feedBtn/feedTxt:tmp", "right/topBarCon/evolveBtn/evolveTxt:tmp", --操作栏页签按钮文字
"mid/raceIcon:img",--种族
"con_model",--模型容器
"mid/name:tmp",--名字
"mid/ScrollView","mid/ScrollView/Viewport/Content",--scrollview
"right/raceTxt:tmp","right/dateTxt:tmp",--种族 获取日期
"right/fightTxt:txt",--战力
"right/con_panel",--操作栏容器
"right/msgBg:img",
"right/topBarCon/skillBtn/skillRed:obj", "right/topBarCon/feedBtn/feedRed:obj", "right/topBarCon/evolveBtn/evolveRed:obj", --红点
"right/fightLabel",
"mid/effectCon",
}
self:GetChildren(self.nodes)
lua_resM:setImageSprite(self, self.msgBg_img, "petExtra_asset","pet_msg_bg")
--操作栏背景图
self.panel_img_list = {
[1] = self.feedBtn_img,
[2] = self.evolveBtn_img,
[3] = self.skillBtn_img,
}
--操作栏按钮
self.panel_btn_list = {
[1] = self.feedBtn_obj,
[2] = self.evolveBtn_obj,
[3] = self.skillBtn_obj,
}
--操作栏文本
self.panel_txt_list = {
[1] = self.feedTxt_tmp,
[2] = self.evolveTxt_tmp,
[3] = self.skillTxt_tmp,
}
self:CreatPanelTopBar()--先把操作栏给创建出来
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function PetTrainingView:AddEvents( )
local on_click = function ( click_obj )
if 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.shareBtn_obj == click_obj then--分享
local color = PetConst.stage_message[self.show_pet_cfg_data.rare_degree].color_str
local herf_content = string.format("<a@Pet@%s@%s>",
tostring(RoleManager.Instance.mainRoleInfo.role_id),
tostring(self.show_pet_data.pet_id))
local content = string.format("%s%s%s%s%s%s","我分享了我的宠物 ",
color,self.show_pet_cfg_data.pet_name,"</color> 哦!",herf_content,"<color=#2cf89a>[前往查看]</color></a>")
ChatModel:getInstance():Fire(ChatModel.SEND_MSG,ChatModel.CHANNEL_WORLD,content,nil,nil,ChatModel.CHAT_COMMON_TYPE.SYSTEM)
Message.show("已分享宠物至世界聊天!","success")
elseif self.panel_btn_list[1] == click_obj then--喂养页签按钮
self:UpdatePanelTopBar(1)
elseif self.panel_btn_list[2] == click_obj then--进化页签按钮
self:UpdatePanelTopBar(2)
elseif self.panel_btn_list[3] == click_obj then--技能宝石页签按钮
self:UpdatePanelTopBar(3)
end
end
AddClickEvent(self.previewBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.storyBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.shareBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
AddClickEvent(self.panel_btn_list[1], on_click,LuaSoundManager.SOUND_UI.SWITCH)
AddClickEvent(self.panel_btn_list[2], on_click,LuaSoundManager.SOUND_UI.SWITCH)
AddClickEvent(self.panel_btn_list[3], on_click,LuaSoundManager.SOUND_UI.SWITCH)
local function update_pet_training_view()
self:UpdateView()
end
self:BindEvent(self.model, PetConst.UPDATE_PET_TRAINING_VIEW, update_pet_training_view)
--更新战力显示
local function update_pet_fight(power)
if not self.is_loaded then return end
--设置战力文本
-- self.fightTxt_txt.text = power
self.fightTxt_txt.text = self.model:GetPetFightById(self.show_pet_id)--改用前端计算战力
SetAnchoredPositionX(self.fightLabel,51-self.fightTxt_txt.preferredWidth/2-55)
end
self:BindEvent(self.model, PetConst.UPDATE_PET_FIGHT, update_pet_fight)
--宠物进化之后刷新有阶段显示的地方
local pet_evolve = function(pet_id)
if not self.is_loaded then return end
if pet_id == self.show_pet_id then
local data = self.model:GetPetListById(pet_id)
local cfg_data = self.model:GetPetCfg(data.pet_id, data.pet_star)
self:UpdatePetInfo(data,cfg_data)--刷新宠物信息
end
end
self:BindEvent(self.model, PetConst.PET_EVOLVE, pet_evolve)
--装宝石之后刷新模型展示
local function on_pet_diamond_effect_update(pet_id)
if not self.is_loaded then return end
if pet_id == self.show_pet_id then
local data = self.model:GetPetListById(pet_id)
local cfg_data = self.model:GetPetCfg(data.pet_id, data.pet_star)
self:UpdatePetInfo(data,cfg_data)--刷新宠物信息
end
end
self:BindEvent(self.model, PetConst.UPDATE_PET_DIAMOND_EFFECT, on_pet_diamond_effect_update)
-- local function refresh_feed_red(bool,pet_id)
-- if pet_id ~= self.show_pet_id then return end
-- self.feedRed_obj:SetActive(bool)
-- end
-- self:BindEvent(self.model, PetConst.REFRESH_PET_TRAINING_FEED_RED, refresh_feed_red)
-- local function refresh_evolve_red(bool,pet_id)
-- if pet_id ~= self.show_pet_id then return end
-- self.evolveRed_obj:SetActive(bool)
-- end
-- self:BindEvent(self.model, PetConst.REFRESH_PET_TRAINING_EVOLVE_RED, refresh_evolve_red)
-- local function refresh_diamond_red(bool,pet_id)
-- if pet_id ~= self.show_pet_id then return end
-- self.skillRed_obj:SetActive(bool)
-- end
-- self:BindEvent(self.model, PetConst.REFRESH_PET_DIAMOND_DIAMOND_RED, refresh_diamond_red)
local function onRefreshRed(red_type)
if not self.is_loaded then return end
if not self.show_pet_id or self.show_pet_id == 0 then return end
if red_type == PetConst.RED_DOT_TYPE.Feed then
local feed_red = self.model:GetSingleFeedRedDot(self.show_pet_id)
self.feedRed_obj:SetActive(feed_red)
elseif red_type == PetConst.RED_DOT_TYPE.Evolve then
local evolve_red = self.model:GetSingleEvolveRedDot(self.show_pet_id)
self.evolveRed_obj:SetActive(evolve_red)
elseif red_type == PetConst.RED_DOT_TYPE.Diamond or red_type == PetConst.RED_DOT_TYPE.DiamondCompose then
local skill_red = self.model:GetSingleDiamondRedDot(self.show_pet_id)
local diamond_compose_red = self.model:GetPetRedDotByType(PetConst.RED_DOT_TYPE.DiamondCompose)
self.skillRed_obj:SetActive(skill_red or diamond_compose_red)
end
end
self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, onRefreshRed)
--宠物喂养后要刷特效
local function play_lv_up_effect_handler()
if not self.is_loaded then return end
--播放属性特效有cd,必须等播完才能再播
local need_play_model_effect = true
if TimeUtil:getServerTimeMs()/1000-self.old_model_effct_play_time <= 1.2 then
need_play_model_effect = false
end
if need_play_model_effect then
self.old_model_effct_play_time = TimeUtil:getServerTimeMs()/1000
self:AddUIEffect("ui_jinjie", self.effectCon, "UI", nil, 1, false, nil, false)
end
end
self:BindEvent(self.model, PetConst.PLAY_PET_LV_UP_EFFECT, play_lv_up_effect_handler)
end
function PetTrainingView:UpdateView( )
self:UpdatePanelTopBar(self.right_tab_index)
self:UpdatePetScrollView()
end
--刷新下方宠物栏
function PetTrainingView:UpdatePetScrollView()
local pet_list = self.model:GetPetListAfterSortByDegreeAndLv()
local empty_data = {pet_id = 0}--加一个空数据用作点击跳转获取宠物使用
if #pet_list < 7 then
for i=1,7-#pet_list do
table.insert(pet_list,empty_data)
end
else
table.insert(pet_list,empty_data)
end
--petitem的点击回调函数 --data追溯至16301协议
local function click_callback(data,cfg_data)
self.feedRed_obj:SetActive(self.model:GetSingleFeedRedDot(data.pet_id))
self.evolveRed_obj:SetActive(self.model:GetSingleEvolveRedDot(data.pet_id))
self.skillRed_obj:SetActive(self.model:GetSingleDiamondRedDot(data.pet_id) or self.model:GetPetRedDotByType(PetConst.RED_DOT_TYPE.DiamondCompose))
self.show_pet_cfg_data = cfg_data
self.show_pet_data = data
self.show_pet_id = data.pet_id--记录当前展示中的宠物id
self:UpdatePetInfo(data,cfg_data)--刷新宠物信息
self.feed_panel:SetData(data,cfg_data)--刷新升级栏
self.evolve_panel:SetData(data,cfg_data)--刷新进化栏
self.skill_panel:SetData(data)
end
if not self.item_list_com then
self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
end
local info = {
data_list = pet_list,
item_con = self.Content,
item_class = PetItem,
item_width = 135,
-- item_height = 175,
space_x = 27,
start_x = 11,
start_y = -17,
scroll_view = self.ScrollView,
-- create_frequency = 0.01,
-- reuse_item_num = 100,
is_scroll_back_on_update = true,
on_update_item = function(item, i, v)
item:SetData(i,v,click_callback)
-- self.item_list_com:IterateItems(function( item, i )
-- item:OnClick(1)--选中第一个
-- end)
end,
}
self.item_list_com:UpdateItems(info)
self.item_list_com:IterateItems(function( item, i )
item:OnClick(1)
end)
end
--创建操作栏topbar
function PetTrainingView:CreatPanelTopBar()
if not self.feed_panel then
self.feed_panel = PetFeedPanel.New(self.con_panel)
end
self.feed_panel:SetVisible(false,true)
if not self.evolve_panel then
self.evolve_panel = PetEvolvePanel.New(self.con_panel)
end
self.evolve_panel:SetVisible(false,true)
if not self.skill_panel then
self.skill_panel = PetSkillPanel.New(self.con_panel)
end
self.skill_panel:SetVisible(false,true)
end
--刷新操作栏topbar
function PetTrainingView:UpdatePanelTopBar(panel_type)
if self.current_panel_tag == panel_type or panel_type < 1 or panel_type > 3 then
return
end
self.current_panel_tag = panel_type
self.right_tab_index = panel_type
for i=1,3 do
--设置按钮的图片样式和按钮文字的颜色样式
if panel_type ~= i then
lua_resM:setImageSprite(self, self.panel_img_list[i], "uiComponent_asset","com_empty")
self.panel_txt_list[i].color = ColorUtil:ConvertHexToRGBColor("9eb3cf")
SetTMPSharedMaterial(self.panel_txt_list[i], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
else
lua_resM:setImageSprite(self, self.panel_img_list[i], "pet_asset", "pet_top_bar_select")
self.panel_txt_list[i].color = ColorUtil:ConvertHexToRGBColor("ffffff")
SetTMPSharedMaterial(self.panel_txt_list[i], ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab)
end
end
self.feed_panel:SetVisible(panel_type == 1,true)
self.evolve_panel:SetVisible(panel_type == 2,true)
self.skill_panel:SetVisible(panel_type == 3,true)
end
--刷新宠物的各类信息 data追溯至16301协议数据
function PetTrainingView:UpdatePetInfo(data,cfg_data)
--设置姓名
self.name_tmp.text = Trim(cfg_data.pet_name)
SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20)
--设置种族icon
lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..cfg_data.pet_race,true)
--设置战力文本
self.fightTxt_txt.text = self.model:GetPetFightById(self.show_pet_id)--改用前端计算战力
SetAnchoredPositionX(self.fightLabel,51-self.fightTxt_txt.preferredWidth/2-55)
--设置获取时间文本
self.dateTxt_tmp.text = string.format("获得日期:<%s>%s</color>", "#ffffff", TimeUtil:timeConversion(data.collect_time,"yyyy年mm月dd日"))
--设置种族文本
self.raceTxt_tmp.text = string.format("种族:<%s>%s</color>", PetConst.PetRace[cfg_data.pet_race].color, PetConst.PetRace[cfg_data.pet_race].str1)
local pokemon_diamond_effect = self.model:GetPokemonDiamondEffectRes(self.show_pet_id)
local res_data = {
father_node = self,
transform = self.con_model,
fashion_type = FuncOpenModel.TypeId.Pet,
figure_id = cfg_data.figure_id,
ui_model_type = UIModelCommon.ModelType.BackModel,
use_green_screen = true,
green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
pokemon_diamond_effect = pokemon_diamond_effect
}
FuncOpenModel:getInstance():SetModelRes(res_data)
end
function PetTrainingView:SetData(right_tab_index)
self.right_tab_index = right_tab_index
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function PetTrainingView:__delete( )
if self.feed_panel then
self.feed_panel:DeleteMe()
self.feed_panel = nil
end
if self.evolve_panel then
self.evolve_panel:DeleteMe()
self.evolve_panel = nil
end
if self.skill_panel then
self.skill_panel:DeleteMe()
self.skill_panel = nil
end
self:ClearUIEffect(self.effectCon)
end