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

411 lines
14 KiB

EquipExamBossView = EquipExamBossView or BaseClass(BaseItem)
local EquipExamBossView = EquipExamBossView
local MODEL_PARAM = {
OFFSET_X = 0,
OFFSET_Y = 130,
SCALE = 100,
}
local SHOW_LEFT_ITEM_COUNT = 4
function EquipExamBossView:__init()
self.base_file = "equipCollect"
self.layout_file = "EquipExamBossView"
self.model = EquipCollectModel:GetInstance()
self.boss_model = BossModel:GetInstance()
self.item_list = {}
self.selfkill_award_item_list = {}
self.firstblood_award_item_list = {}
self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT,14501)
self.content_y = 0
self.ReOpen_callback = function ( )
self:UpdateModelInfo(true)
end
self:Load()
end
function EquipExamBossView:Load_callback()
self.nodes = {
"bg:raw",
"lb_first_kill_tip:tmp", "btn_go:obj:img",
"lb_kill_tip:tmp", "lb_first_kill_title:tmp", "con_model",
"btn_up_arrow:obj:img", "con_kill_award:obj",
"pic_title:obj:img", "lb_first_kill_info:tmp",
"lb_boss_name:tmp", "con_first_kill_award:obj",
"lb_kill_title:tmp", "btn_down_arrow:obj:img",
"btn_red_packet:obj:img", "scroll_boss/Viewport/con_content:obj",
"scroll_boss:scroll", "pic_model_bg:img", "btn_go/lb_btn_go:tmp",
"lb_first_kill_time:tmp",
"btn_up_arrow/btn_up_arrow_red:obj", "btn_down_arrow/btn_down_arrow_red:obj",
}
self:GetChildren(self.nodes)
lua_resM:setOutsideRawImage(self,self.bg_raw, GameResPath.GetViewBigBg("equip_collect_bos_bg"),false)
self.lb_kill_title_tmp.text = "击杀奖励"
self.lb_first_kill_title_tmp.text = "首杀奖励"
self.lb_first_kill_tip_tmp.text = "注:首杀奖励将通过邮件发放"
self.lb_kill_tip_tmp.text = "BOSS为祸四方,快去击杀它!"
self.lb_btn_go_tmp.text = "前往击杀"
SetAnchoredPositionY(self.con_model, -72)
self.SCROLL_BOSS_SHOW_HEIGHT = GetSizeDeltaY(self.scroll_boss)
self:MoveUIToBack(self.pic_model_bg_img)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function EquipExamBossView:AddEvents( )
local on_click = function ( click_obj )
if self.btn_go_obj == click_obj then
local boss_cfg = self.boss_model:GetMoneyBossConf( self.select_boss_id ) -- 赏金配置
if boss_cfg.enter_lv > RoleManager.Instance.mainRoleInfo.level then
Message.show(string.format('%s级解锁', boss_cfg.enter_lv))
return
end
if self.select_boss_id then
self.model:Fire(EquipCollectConst.OPEN_EC_MAIN_VIEW, false)
GlobalEventSystem:Fire(EventName.OPEN_BOSS_VIEW, Config.ConfigBoss.ModuleId.Money, self.select_boss_id)
end
elseif self.btn_red_packet_obj == click_obj then
local boss_first_blood_data = self.model:GetBossData( self.select_boss_id ) -- 首杀后端数据
local can_get = boss_first_blood_data.server_award_status and boss_first_blood_data.server_award_status == 0 and boss_first_blood_data.time > 0 -- 可领未领
self.model:Fire(EquipCollectConst.OPEN_RED_PACKET_VIEW, true, self.select_boss_id, not can_get)
elseif self.btn_up_arrow_obj == click_obj then
self:ScrollDownOrUp()
elseif self.btn_down_arrow_obj == click_obj then
self:ScrollDownOrUp(true)
end
end
AddClickEvent(self.btn_go_obj, on_click)
AddClickEvent(self.btn_red_packet_obj, on_click)
AddClickEvent(self.btn_up_arrow_obj, on_click)
AddClickEvent(self.btn_down_arrow_obj, on_click)
local update_view = function(boss_id)
if self.select_boss_id and boss_id and boss_id ~= self.select_boss_id then
return
end
self:UpdateView()
end
self:BindEvent(self.model, EquipCollectConst.UPDATE_BOSS_VIEW, update_view)
local function clockFun()
self:UpdateTimeInfo()
end
self.close_time_id = self.close_time_id or GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1)
end
function EquipExamBossView:UpdateView( )
self.boss_list_data = self.model:GetBossLeftTabData()
local select_callback = function(boss_id)
if boss_id and boss_id > 0 then
self.select_boss_id = boss_id
self.tab_item_list:IterateItems(function( item, i )
item:SetSelect(self.select_boss_id)
end)
self:UpdateBossInfo(boss_id)
end
end
-- for i,v in ipairs(self.boss_list_data) do
-- self.item_list[i] = self.item_list[i] or EquipExamBossItem.New(self.con_content)
-- local item = self.item_list[i]
-- item:SetData(v.boss_id, i, select_callback)
-- item:SetSelect(self.select_boss_id)
-- end
-- 更新页签红点缓存
self.model:UpdateBossLeftBtnRed( )
local update_arrow = function()
self:UpdateArrowObj()
end
self.tab_item_list = self.tab_item_list or self:AddUIComponent(UI.ItemListCreator)
local data = {
data_list = self.boss_list_data or {},
item_con = self.con_content,
item_class = EquipExamBossItem,
item_width = 100,
item_height = EquipExamBossItem.ITEM_HEIGHT,
space_y = EquipExamBossItem.SPACE_Y,
start_x = 5,
start_y = 0,
scroll_view = self.scroll_boss,
on_scroll = update_arrow,
-- create_frequency = 0.10,
on_update_item = function(item, i, v)
item:SetData(i, v, select_callback)
item:SetSelect(self.select_boss_id)
end,
}
self.tab_item_list:UpdateItems(data)
self.PER_ITEM_HEIGHT = EquipExamBossItem.ITEM_HEIGHT + EquipExamBossItem.SPACE_Y
self.CONTENT_SIZE_Y = #self.boss_list_data * self.PER_ITEM_HEIGHT - EquipExamBossItem.SPACE_Y
self:UpdateArrowObj()
local boss_id, index
if not self.select_boss_id then
boss_id, index = self.model:GetFirstCanKillBossIdAndIndex()
self.select_boss_id = boss_id
end
self:CheckSelectId( )
select_callback(self.select_boss_id)
if index then
self.tab_item_list:ScrollToItem(index)
end
end
function EquipExamBossView:ScrollDownOrUp( is_down )
if not self.tab_item_list then return end
if is_down then
self.tab_item_list:ScrollToItem(#self.model:GetBossLeftTabData())
else
self.tab_item_list:ScrollToItem(1)
end
end
function EquipExamBossView:UpdateBossInfo()
if not self.select_boss_id then return end
local boss_cfg = self.boss_model:GetMoneyBossConf( self.select_boss_id ) -- 赏金配置
local boss_first_blood_cfg = self.model:GetBossFirstBloodCfg( self.select_boss_id ) --首杀配置
local boss_first_blood_data = self.model:GetBossData( self.select_boss_id ) -- 首杀后端数据
self:UpdateModelInfo()
-- print('=======Msh:EquipExamBossView.lua[125] ===TABLE====')
-- PrintTable(boss_first_blood_data)
self.lb_boss_name_tmp.text = string.format('Lv.%s %s', boss_cfg.enter_lv, boss_cfg.boss_name)
if boss_first_blood_data.killer and boss_first_blood_data.killer ~= "" then
self.lb_first_kill_info_tmp.text = boss_first_blood_data.killer
self.lb_first_kill_time_tmp.text = "首杀时间:" .. TimeUtil:timeConversion(boss_first_blood_data.time, 'mm-dd hh:MM:ss')
SetAnchoredPositionY(self.lb_first_kill_info, 15)
else
self.lb_first_kill_info_tmp.text = HtmlColorTxt( "暂无首杀玩家", "#A1C1E1")
self.lb_first_kill_time_tmp.text = ""
SetAnchoredPositionY(self.lb_first_kill_info, 5)
end
local firstkill_reward_list = stringtotable(boss_first_blood_cfg.server_first_award)
local kill_reward_list = stringtotable(boss_first_blood_cfg.self_first_award)
-- 首杀奖励
-- local get_callback = function ( )
-- if boss_first_blood_data.server_award_status and boss_first_blood_data.server_award_status == 0 and boss_first_blood_data.time > 0 then
-- self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14502,self.select_boss_id, 1)
-- end
-- end
local has_get_firstkill_reward = boss_first_blood_data.killer and boss_first_blood_data.time > 0
for i,v in ipairs(firstkill_reward_list) do
self.firstblood_award_item_list[i] = self.firstblood_award_item_list[i] or EquipExamBossAwardItem.New(self.con_first_kill_award)
local get_status = has_get_firstkill_reward and 2 or 0
self.firstblood_award_item_list[i]:SetData(v, nil, get_status)
end
-- 自己的击杀奖励
local get_callback = function ( )
if boss_first_blood_data.self_kill_status == 1 then
self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT, 14502,self.select_boss_id, 2)
end
end
for i,v in ipairs(kill_reward_list) do
self.selfkill_award_item_list[i] = self.selfkill_award_item_list[i] or EquipExamBossAwardItem.New(self.con_kill_award)
self.selfkill_award_item_list[i]:SetData(v, get_callback, boss_first_blood_data.self_kill_status)
end
-- 红包按钮
local can_get = boss_first_blood_data.server_award_status and boss_first_blood_data.server_award_status == 0 and boss_first_blood_data.time > 0 -- 可领未领
local red_btn_show = boss_first_blood_data.time and boss_first_blood_data.time > 0
self.btn_red_packet_obj:SetActive(red_btn_show)
if can_get then
self:SetRedPacketShakeAnim( )
else
self:RemoveAllCCAction()
end
-- 按钮状态
if boss_cfg.enter_lv > RoleManager.Instance.mainRoleInfo.level then
SetImageGray(self.btn_go_img, true)
SetTMPSharedMaterial(self.lb_btn_go_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
self.lb_btn_go_tmp.text = string.format('%s级解锁', boss_cfg.enter_lv)
else
SetImageGray(self.btn_go_img, false)
SetTMPSharedMaterial(self.lb_btn_go_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
self.lb_btn_go_tmp.text = "前往击杀"
end
-- boss存活状态
self:UpdateTimeInfo()
end
function EquipExamBossView:SetRedPacketShakeAnim( )
self:RemoveAllCCAction()
if not self.action9 then
local action1 = cc.RotateTo.New(0.1, 15, 1)
local action2 = cc.RotateTo.New(0.1, -15, 1)
local action3 = cc.RotateTo.New(0.1, 0, 1)
local action7 = cc.DelayTime.New( 1 )
local action8 = cc.Sequence.New( action1,action2,action1,action2,action1,action2,action3,action7)--顺序
self.action9 = cc.RepeatForever.New( action8 )
self:AddAction(self.action9, self.btn_red_packet)
end
end
function EquipExamBossView:RemoveAllCCAction( )
cc.ActionManager:getInstance():removeAction(self.action9)
SetLocalRotation(self.btn_red_packet)
self.action9 = nil
end
function EquipExamBossView:UpdateTimeInfo( )
if not self.is_loaded then return end
local boss_data = self.boss_model:GetMoneyBossInfo()[self.select_boss_id]
if not boss_data then return end
local curTime = TimeUtil:getServerTime()
local is_die = boss_data.reborn_time ~= 0 and boss_data.reborn_time > curTime
if is_die then
local temp = boss_data.reborn_time - curTime
self.lb_kill_tip_tmp.text = string.format( "距离BOSS复活:%s",
HtmlColorTxt( TimeUtil:convertTimeWithoutHour(temp), ColorUtil.GREEN_DARK) )
else
self.lb_kill_tip_tmp.text = "BOSS为祸四方,快去击杀它!"
end
end
function EquipExamBossView:UpdateModelInfo( force )
self:CheckSelectId()
-- if self.first_open then return end--开界面不加载两次动画
if not self.is_loaded then return end
-------------------------
--Boss形象
local monster = ConfigItemMgr.Instance:GetMonsterDataItem(self.select_boss_id)
if not monster then
print('----LZR BossMoneySubView.lua -- 没有找到怪物配置=')
return
end
-------------------------
--BOSS展示的时候的第一次播放的动作
local aciton_list = {"show2","show", idle_name="show",loopList=false}
local pos = EquipCollectConst.ModelPos[self.select_boss_id] or {0,0}
if not self.last_boss_id or self.last_boss_id~=self.select_boss_id or force then
local function delay( )
if self._use_delete_method then return end
local res_data = {
clothe_res_id = monster.icon,
--weapon_res_id = monster.weapon_id,
type = SceneBaseType.Monster,
action_name_list = aciton_list,
layer_name = "UI",
father_node = self,
transform = self.con_model,
rotate = Vector3(0,180,0),
fashion_type = FuncOpenModel.TypeId.Monster,
position = Vector3(pos[1] + MODEL_PARAM.OFFSET_X, pos[2] + MODEL_PARAM.OFFSET_Y, 0),
shadow2_plane_pos = Vector4(0, 10, 0, 1),
scale = MODEL_PARAM.SCALE,
ui_model_type = UIModelCommon.ModelType.BackModel,
show_shadow = false,
use_green_screen = true,
green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
}
FuncOpenModel:getInstance():SetModelRes(res_data)
end
setTimeout(delay,0.05)
end
self.last_boss_id = self.select_boss_id
end
function EquipExamBossView:CheckSelectId( )
--检查选中Id是否符合规范
if (not self.select_boss_id) or (self.select_boss_id == 0) then
--默认选择
self.select_boss_id = self.model:GetBossLeftTabData()[1].boss_id
elseif not self.boss_model:GetMoneyBossConf(self.select_boss_id) then
self.select_boss_id = self.model:GetBossLeftTabData()[1].boss_id
end
end
-- 更新箭头红点
function EquipExamBossView:UpdateArrowObj( )
if self.boss_list_data and #self.boss_list_data > SHOW_LEFT_ITEM_COUNT then
local _, y = GetAnchoredPosition(self.con_content)
local per_height = self.PER_ITEM_HEIGHT
self.btn_down_arrow_obj:SetActive(y < (#self.boss_list_data - SHOW_LEFT_ITEM_COUNT - 0.5) * per_height)
self.btn_up_arrow_obj:SetActive(y > per_height * 0.5)
self:UpdateArrowBtnRedDot(y)
else
self.btn_up_arrow_obj:SetActive(false)
self.btn_down_arrow_obj:SetActive(false)
end
end
-- 更新箭头红点显示
function EquipExamBossView:UpdateArrowBtnRedDot( content_y )
if not self.boss_list_data then return end
local content_y = content_y or self.content_y
self.content_y = content_y
local hide_size_y_down = self.CONTENT_SIZE_Y - content_y - self.SCROLL_BOSS_SHOW_HEIGHT -- 处于下方的隐藏中content的高度
local hide_size_y_up = content_y -- 上方的高度
local hide_count_down = math.floor( hide_size_y_down / self.PER_ITEM_HEIGHT )
local hide_count_up = math.ceil( hide_size_y_up / self.PER_ITEM_HEIGHT )
-- 检查红点 隐藏中的Item的红点
local bool_down, bool_up = false, false
for i = #self.boss_list_data - hide_count_down + 1, #self.boss_list_data do
if self.model:GetBossLeftBtnRed(i) then
bool_down = true
break
end
end
for i = 1, hide_count_up do
if self.model:GetBossLeftBtnRed(i) then
bool_up = true
break
end
end
self.btn_down_arrow_red_obj:SetActive(bool_down)
self.btn_up_arrow_red_obj:SetActive(bool_up)
end
function EquipExamBossView:SetData( data )
self.data = data
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function EquipExamBossView:__delete( )
for k,v in pairs(self.item_list) do
v:DeleteMe()
end
self.item_list = {}
for k,v in pairs(self.firstblood_award_item_list) do
v:DeleteMe()
end
self.firstblood_award_item_list = {}
for k,v in pairs(self.selfkill_award_item_list) do
v:DeleteMe()
end
self.selfkill_award_item_list = {}
self:RemoveAllCCAction()
if self.close_time_id then
GlobalTimerQuest:CancelQuest(self.close_time_id)
self.close_time_id = nil
end
end