|
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
|