源战役客户端
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

307 行
9.4 KiB

PetAwakeView = PetAwakeView or BaseClass(BaseItem)
local PetAwakeView = PetAwakeView
function PetAwakeView:__init()
self.base_file = "pet"
self.layout_file = "PetAwakeView"
self.model = PetModel:getInstance()
self.skill_item_list = {}
self.full_screen = true
self.ani_right = 400
self.ani_left = -200
self:Load()
end
function PetAwakeView:Load_callback()
self.nodes = {
"con_model",
"left/ScrollView", "left/ScrollView/Viewport/Content",
"mid/raceIcon:img", "mid/name:tmp", "mid/awakeIcon:obj",
"mid/tip1Before:tmp", "mid/tip1After:tmp", "mid/tip2:tmp",
"right/awakeBtn:obj:img", "right/awakeBtn/awakeText:tmp",
"right/conSkill", "right/conCost",
"right/attrScrollview", "right/attrScrollview/Viewport/attrContent",
"right/fightNum:txt",
"right/costNum:tmp",
"mid/tipStar",
"left/diGray/diArrow:img", "left/topGray/topArrow:img",
"right/rightBg:img",
"right/fightLabel",
"mid/effectCon",
}
self:GetChildren(self.nodes)
lua_resM:setImageSprite(self, self.rightBg_img, "petExtra_asset","pet_awake_right_bg")
self.tip2_tmp.text = "觉醒后技能会强化同时获得<#fdffc2>稀绝</color>百分比<#fdffc2>属性</color>!"
--创建消耗道具
self.cost_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.conCost)
self.cost_item:SetItemSize(78,78)
SetAnchoredPositionY(self.effectCon,-175)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function PetAwakeView:AddEvents( )
local on_click = function ( click_obj )
if self.awakeBtn_obj == click_obj then--觉醒
self.model:Fire(PetConst.REQUEST_CCMD_EVENT,16316,self.pet_id)
end
end
AddClickEvent(self.awakeBtn_obj, on_click)
--刷新觉醒碎片
local update_progress = function(goods_sub_type)
if goods_sub_type == 4 then
self:UpdateCostItems()
end
end
self:BindEvent(self.model, PetConst.UPDATE_PET_GOODS_NUM, update_progress)
local update_view = function()
local no_need_show_model_again = true
self:UpdatePetBaseInfo(no_need_show_model_again)
self:UpdatePetAwakeInfo()
self:AddUIEffect("ui_jinjie", self.effectCon, "UI", nil, 1, false, nil, false)
end
self:BindEvent(self.model, PetConst.PET_AWAKE_SUCCESS, update_view)
local function on_ans_update_red_dot(tab_id)
if not self.data or self.data.pet_id == 0 or not self.is_loaded then return end
if tab_id == PetConst.RED_DOT_TYPE.Awake then
self:UpdateCostItems()
end
end
self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, on_ans_update_red_dot)
end
function PetAwakeView:UpdateView( )
self:UpdatePetList()
end
function PetAwakeView:UpdatePetList( )
local pet_list = self.model:GetPetListAfterSortFight()
local function click_callback(pet_id)
self.pet_id = pet_id
self.pet_data = self.model:GetPetListById(pet_id)
self.pet_cfg = self.model:GetPetCfg(pet_id,self.pet_data.pet_star)
self.pet_awake_cfg = self.model:GetPetAwakeCfg(self.pet_id)
self:UpdatePetBaseInfo()
self:UpdatePetAwakeInfo()
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 = PetAwakeItem,
-- item_width = 125,
item_height = 125,
-- space_x = -5,
space_y = 4,
start_x = 5,
start_y = -2.5,
scroll_view = self.ScrollView,
create_frequency = 0.01,
-- reuse_item_num = 100,
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,
on_scroll = function()
self:SetLeftArrowGray(#pet_list)
end,
}
self.item_list_com:UpdateItems(info)
self.item_list_com:IterateItems(function( item, i )
item:OnClick(1)--选中第一个
end)
self:SetLeftArrowGray(#pet_list)
end
function PetAwakeView:UpdatePetBaseInfo(no_need_show_model_again)
self.name_tmp.text = Trim(self.pet_cfg.pet_name)
lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..self.pet_cfg.pet_race,true)
SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20)
self.awakeIcon_obj:SetActive(self.pet_data.is_awaken == 1)
SetAnchoredPositionX(self.awakeIcon, 15+self.name_tmp.preferredWidth/2+20)
local pokemon_diamond_effect = self.model:GetPokemonDiamondEffectRes(self.pet_id)
if not no_need_show_model_again then
local res_data = {
father_node = self,
transform = self.con_model,
fashion_type = FuncOpenModel.TypeId.Pet,
figure_id = self.pet_cfg.figure_id,
ui_model_type = UIModelCommon.ModelType.BackModel,
pokemon_diamond_effect = pokemon_diamond_effect,
}
FuncOpenModel:getInstance():SetModelRes(res_data)
end
local enough_star = self.pet_data.pet_star >= self.pet_awake_cfg.need_star
if enough_star then
self.tip1Before_tmp.text = string.format("<#A9C1E1>培养至</color> <#fdffc2>%s</color>",self.pet_awake_cfg.need_star)
self.tip1After_tmp.text = "以上宠物可<#fdffc2>觉醒</color>!"
else
self.tip1Before_tmp.text = string.format("<#ff203a>培养至 %s</color>",self.pet_awake_cfg.need_star)
self.tip1After_tmp.text = "<#ff203a>以上宠物可觉醒!</color>"
end
SetAnchoredPositionX(self.tipStar,self.tip1Before_tmp.preferredWidth+89)
SetAnchoredPositionX(self.tip1After,self.tip1Before_tmp.preferredWidth+89+21)
end
function PetAwakeView:UpdatePetAwakeInfo( )
self.fightNum_txt.text = self.model:GetPetFightById(self.pet_id)--改用前端计算战力
SetAnchoredPositionX(self.fightLabel,115-self.fightNum_txt.preferredWidth/2-55)
local attr_cfg = stringtotable(self.pet_awake_cfg.add_attr)
if not self.attr_list_com then
self.attr_list_com = self:AddUIComponent(UI.ItemListCreator)
end
local info = {
data_list = attr_cfg,
item_con = self.attrContent,
item_class = PetAwakeAttrItem,
-- item_width = 125,
item_height = 36,
-- space_x = -5,
-- space_y = 4,
start_x = 17,
start_y = -14,
scroll_view = self.attrScrollview,
create_frequency = 0.01,
on_update_item = function(item, i, v)
item:SetData(v)
end,
}
self.attr_list_com:UpdateItems(info)
local skill_table = {}
local skill_data = stringtotable(self.pet_awake_cfg.skill_list)
for i,v in ipairs(skill_data) do
local origin_data = DeepCopy(self.model:GetPetSkillCfg(self.pet_id,i,true))
origin_data.skill_talent_id = v
-- local temp = {
-- skill_talent_id = v,
-- }
table.insert(skill_table,origin_data)
end
-- for i=1,3 do
-- if data then
-- table.insert(skill_table,data)
-- end
-- end
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.conSkill)
self.skill_item_list[i] = item
end
item:SetVisible(true)
item:SetData(v,self.pet_data.pet_id,2)
item:SetPosition(106*(i-1)+18.5,2)
end
self:UpdateCostItems()
end
function PetAwakeView:SetLeftArrowGray(list_num)
local contentSize = GetSizeDeltaY(self.Content)
local _, contenPos = GetAnchoredPosition(self.Content)
if list_num <= 5 then
SetImageGray(self.topArrow_img, true)
SetImageGray(self.diArrow_img, true)
return
end
if contenPos <= 40 then
SetImageGray(self.topArrow_img, true)
SetImageGray(self.diArrow_img, false)
elseif contenPos > 40 and contenPos < contentSize-544-20 then
SetImageGray(self.topArrow_img, false)
SetImageGray(self.diArrow_img, false)
elseif contenPos >= contentSize-544-20 then
SetImageGray(self.topArrow_img, false)
SetImageGray(self.diArrow_img, true)
end
end
function PetAwakeView:UpdateCostItems( )
local cost_data = stringtotable(self.pet_awake_cfg.cost_material)
local goods_type_id = cost_data[1][2]
self.cost_item:SetData(goods_type_id)
local color = GoodsModel:getInstance():GetGoodsColor(goods_type_id)
-- self.costName_txt.text = HtmlColorTxt(GoodsModel:getInstance():getGoodsName(goods_type_id),color)
local goods_name = GoodsModel:getInstance():getGoodsName(goods_type_id)
if self.pet_data.is_awaken == 1 then
self.costNum_tmp.text = "<#2CF86F>已觉醒</color>"
self.can_awake = false
self.awakeBtn_obj:SetActive(false)
else
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(goods_type_id)
if goods_num < cost_data[1][3] then
self.costNum_tmp.text = string.format("<#fdffc2>%s</color><color=#fa1022>%s</color><color=#f3fcff>/%s</color>",goods_name,goods_num,cost_data[1][3])
else
self.costNum_tmp.text = string.format("<#fdffc2>%s</color><color=#04bd27>%s</color><color=#f3fcff>/%s</color>",goods_name,goods_num,cost_data[1][3])
end
local enough_star = self.pet_data.pet_star >= self.pet_awake_cfg.need_star
self.can_awake = goods_num >= cost_data[1][3] and enough_star
SetImageGray(self.awakeBtn_img, not self.can_awake)
if self.can_awake then
SetTMPSharedMaterial(self.awakeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
else
SetTMPSharedMaterial(self.awakeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
end
self.awakeBtn_obj:SetActive(true)
end
end
function PetAwakeView:SetData( data )
self.data = data
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function PetAwakeView:__delete( )
for i, v in ipairs(self.skill_item_list) do
v:DeleteMe()
end
self.skill_item_list = {}
if self.cost_item then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem,self.cost_item)
self.cost_item = nil
end
self:ClearUIEffect(self.effectCon)
end