源战役客户端
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 

565 righe
17 KiB

BossHomeSceneView = BossHomeSceneView or BaseClass(BaseView)
local BossHomeSceneView = BossHomeSceneView
local ShowType = {
Rank = 1,
Team = 2,
}
local ShowSubType = {
Role = 1,
Boss = 2,
}
function BossHomeSceneView:__init()
self.base_file = "boss"
self.layout_file = "BossHomeSceneView"
self.layer_name = "Main"
self.destroy_imm = true
self.use_background = false
self.change_scene_close = false
self.hide_maincancas = false --是否隐藏主界面
self.append_to_ctl_queue = false --是否要添加进界面堆栈
self.model = BossHomeModel:getInstance()
self.show_type = 0
self.show_sub_type = ShowSubType.Boss
self.cur_visible = true
self.force_change_sub_damage = false--幻魔伤害表从无到有,需要切换一次到伤害表,脱战清空
self.rightIcon_tween = {}--右上角缓动动画列表
self.rank_item_list = {}
self.show_rank_num = 10
self.is_empty_rank = true
--根据当前场景id判断是boss之家还是社团之家
self.cur_boss_home_type = self.model:GetBossHomeSceneType()
local target_guild_id = 0
if self.cur_boss_home_type ~= BossHomeConst.BossHomeType.Normal then
target_guild_id = RoleManager.Instance.mainRoleInfo.guild_id
end
self.model:Fire(BossHomeConst.REQUEST_CCMD_EVENT, 46201, self.cur_boss_home_type, self.model:GetBossHomeSceneFloor(), target_guild_id)
self.load_callback = function ()
self:LoadSuccess()
self:AddEvent()
end
self.open_callback = function ( )
self:OpenSuccess()
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
function BossHomeSceneView:Open()
BaseView.Open(self)
end
function BossHomeSceneView:LoadSuccess()
local nodes = {
"con:obj","con/con_rank:obj","con/rank_btn:obj","con/team_btn:obj","con/con_team:obj","con/team_btn_red:obj","con/task_select_bg:obj", "con/team_select_bg:obj", "con/con_rank/rank_bg:img",
"con/con_rank/con_role:obj","con/con_rank/con_role/lb_att:tmp","con/con_rank/con_role/lb_empty:tmp",
"con/con_rank/con_role/scroll","con/con_rank/con_role/lb_name:tmp","con/con_rank/con_role/scroll/Viewport/Content",
"con/con_rank/con_role/lb_rank:tmp","con/con_rank/con_role/img_rank:img:obj",
"rightIconCon/exitBtn:obj","rightIconCon:obj",
"con/con_rank/btn_damage:obj",
"con/task_show_bg:obj","con/team_show_bg:obj","arrow/arrow_click:obj", "arrow",
"con/con_rank/con_boss:obj", "con/con_rank/con_boss/scroll_boss",
"con/con_rank/btn_boss_list:obj",
"con/con_rank/con_boss/scroll_boss/Viewport/Content_boss",
"con/con_rank/lb_rank_name:tmp",
"con/con_rank/lb_no_damage:tmp",
"con/con_rank/con_role/lb_tip:tmp",
}
self:GetChildren(nodes)
for i=1,self.show_rank_num do
--先要做节点补足
self.rank_item_list[i] = self.rank_item_list[i] or self:CreateItem(BossHomeSceneRankItem, self.Content, self.layer_name, "boss_home")
self.rank_item_list[i]:SetVisible(false)
end
self.exitBtn_obj:SetActive(false)
self.transform.anchoredPosition = Vector2(ClientConfig.iphone_x_offset_left - 3,- 60)
SetAnchoredPositionX( self.rightIconCon.transform, ScreenWidth - 349 - ClientConfig.iphone_x_offset_right )
local posX, posY = GetAnchoredPosition(self.con)
self.origin_pos_x = posX + 1
self.origin_pos_y = posY
self.con_width = GetSizeDeltaX(self.con)
self.transform:SetSiblingIndex(1)
lua_resM:setOutsideImageSprite(self, self.rank_bg_img, GameResPath.GetViewBigBg("common_right_top_img2"))
self.lb_tip_tmp.text = "伤害排名<color=#fdffc2>第一名</color>玩家才可获得归属奖励"
if not self.init_exit_btn then
self.init_exit_btn = true
local function call_back( ... )
local function ok( )
SceneManager:getInstance():SetCurrentReqChangeSceneId(0)
BossModel:GetInstance():Fire(BossConst.REQ_QUIT_SCENE)--复用boss模块的退出场景
end
local str = "您正在参与幻魔战斗,确认离开吗?"
Alert.show(str,Alert.Type.Two,ok)
end
local data = {call_back = call_back,pos = {x = 241,y = 278}}
GlobalEventSystem:Fire(EventName.SHOW_EXIT_BTN_STATE,data)
end
end
function BossHomeSceneView:AddEvent()
local on_click = function ( click_obj )
if self.rank_btn_obj == click_obj then
self:SetShowType(ShowType.Rank)
elseif self.team_btn_obj == click_obj then
self:SetShowType(ShowType.Team)
elseif self.arrow_click_obj == click_obj then
self:SwitchVisible(not self.cur_visible)
elseif self.btn_boss_list_obj == click_obj then
self:RefreshSubShow( ShowSubType.Boss )
elseif self.btn_damage_obj == click_obj then
self:RefreshSubShow( ShowSubType.Role )
end
end
AddClickEvent(self.rank_btn_obj, on_click)
AddClickEvent(self.team_btn_obj, on_click)
AddClickEvent(self.arrow_click_obj, on_click)
AddClickEvent(self.btn_boss_list_obj, on_click)
AddClickEvent(self.btn_damage_obj, on_click)
local function activity_icon_changeFunc(is_hide)
self.rightIconCon_obj:SetActive(is_hide)
end
self:BindEvent(GlobalEventSystem, EventName.NOTIFY_ACTIVITY_ICON_HIDE_STATE, activity_icon_changeFunc)
local function onOrientationChange()
self.transform.anchoredPosition = Vector2(ClientConfig.iphone_x_offset_left-3,-60)
SetAnchoredPositionX( self.rightIconCon.transform, ScreenWidth - 349 - ClientConfig.iphone_x_offset_right )
end
self:BindEvent(GlobalEventSystem, EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
local function UpdateRankInfo( )
self:ShowRank()
self:RefreshSubShow( )
end
self:BindEvent(self.model, BossHomeConst.ANS_BOSS_HOME_RANK_INFO, UpdateRankInfo)
local function UPDATE_TEAM_RED_POINT()
self:TeamRedPointShow()
end
self:BindEvent(TeamModel:getInstance(), TeamModel.BE_INVITED, UPDATE_TEAM_RED_POINT)
self:BindEvent(TeamModel:getInstance(), TeamModel.GET_APPLY_JOIN, UPDATE_TEAM_RED_POINT)
local function ANS_BOSS_HOME_INFO( )
self:ShowBossList()
end
self:BindEvent(self.model, BossHomeConst.ANS_BOSS_HOME_INFO, ANS_BOSS_HOME_INFO)
--脱战通知
local function OUT_OF_BOSS_HOME_LIST( boss_id, is_kill_delay)
--脱战后
self.rank_empty = true
self.force_change_sub_damage = false
self:ShowRank()
if is_kill_delay then
self:RefreshSubShow( ShowSubType.Boss )
else
self:RefreshSubShow( )
end
end
self:BindEvent(self.model, BossHomeConst.OUT_OF_BOSS_HOME_LIST, OUT_OF_BOSS_HOME_LIST)
--敌人列表
local function BOARD_ENEMY_ROLE_ID( role_id )
if not role_id then return end
local curTime = TimeUtil:getServerTime()
self.enemy_list = self.enemy_list or {}
-------------------------
for i=1,2 do
--筛选过期信息
if self.enemy_list[i] and (self.enemy_list[i].time + 5 < curTime) then
self.enemy_list[i] = nil
end
end
-------------------------
if TableSize(self.enemy_list) >= 2 then
--最大两个有效信息
return
end
-------------------------
for i=1,2 do
--如果已经有了自己,那就不需要刷新
if self.enemy_list[i] and (self.enemy_list[i].role_id == role_id) then
return
end
end
-------------------------
local new_data = {role_id = role_id,time = curTime}
for i=1,2 do
--加一条数据触发刷新
if not self.enemy_list[i] then
self.enemy_list[i] = new_data
break
end
end
self.model:Fire(BossHomeConst.REFRESH_ENEMY_LIST,self.enemy_list)
end
self:BindEvent(GlobalEventSystem, EventName.BOARD_ENEMY_ROLE_ID, BOARD_ENEMY_ROLE_ID)
end
function BossHomeSceneView:OpenSuccess()
self:SetShowType(ShowType.Rank)
self:UpdateView()
end
function BossHomeSceneView:UpdateView()
self:UpdateBtn()
self:UpdateSubView()
end
function BossHomeSceneView:SwitchVisible( visible, force )
if self.cur_visible == visible and not force then
return
end
self.cur_visible = visible
SetLocalScale(self.arrow, visible and 1 or -1, 1, 1)
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.con)
local targetX = visible and self.origin_pos_x or self.origin_pos_x-(self.con_width+65)
local moveAction = cc.MoveTo.createAnchoredType(0.5, targetX, self.origin_pos_y)
moveAction = cc.EaseExponentialOut.New(moveAction)
local action
if visible then
self.con_obj:SetActive(true)
action = moveAction
else
action = cc.Sequence.New(moveAction, cc.CallFunc.New(function()
self.con_obj:SetActive(false)
end))
end
self:AddAction(action, self.con)
end
function BossHomeSceneView:SetShowType( showType, force )
if self.show_type == showType and not force then
return
end
self.show_type = showType
self:UpdateView()
end
function BossHomeSceneView:RefreshSubShow( show_sub_type )
self.show_sub_type = show_sub_type or self.show_sub_type
if self.force_change_sub_damage then
self.show_sub_type = ShowSubType.Role
self.force_change_sub_damage = false
end
-------------------------
if self.show_sub_type == ShowSubType.Role then
self.lb_rank_name_tmp.text = "伤害列表"
-- self.lb_rank_name_tmp.text = ""
self.con_boss_obj:SetActive(false)
if self.rank_empty then
self.con_role_obj:SetActive(false)
self.lb_no_damage_tmp.text = "暂未对幻魔造成伤害"
else
self.con_role_obj:SetActive(true)
self.lb_no_damage_tmp.text = ""
end
else
--"幻魔列表"
self.lb_no_damage_tmp.text = ""
self.lb_rank_name_tmp.text = "幻魔列表"
-- self.lb_rank_name_tmp.text = ""
self.con_role_obj:SetActive(false)
self.con_boss_obj:SetActive(true)
end
-- self.btn_boss_list_obj:SetActive(self.show_sub_type == ShowSubType.Role)
end
function BossHomeSceneView:UpdateBtn( )
if self.show_type == ShowType.Rank then
self.task_show_bg_obj:SetActive(false)
self.task_select_bg_obj:SetActive(true)
self.team_show_bg_obj:SetActive(true)
self.team_select_bg_obj:SetActive(false)
elseif self.show_type == ShowType.Team then
self.task_show_bg_obj:SetActive(true)
self.task_select_bg_obj:SetActive(false)
self.team_show_bg_obj:SetActive(false)
self.team_select_bg_obj:SetActive(true)
end
end
function BossHomeSceneView:UpdateSubView( )
if self.show_type == ShowType.Rank then
self.con_rank_obj:SetActive(true)
self.con_team_obj:SetActive(false)
self:ShowRank()
self:ShowBossList()
self:RefreshSubShow()
elseif self.show_type == ShowType.Team then
self.con_team_obj:SetActive(true)
self.con_rank_obj:SetActive(false)
if not self.Team then
self.Team = self:CreateItem(TeamView, self.con_team, self.layer_name)
end
self.Team:SetData()
end
end
function BossHomeSceneView:TeamRedPointShow()
-- 2020-08-11,被邀请时组队-加入队伍要有红点
local isShow = TeamModel:getInstance():CheckBeInvitedRedDot()
self.team_btn_red_obj:SetActive(isShow)
end
function BossHomeSceneView:DelayRankCall( )
local sort_list = self.sort_list_info
for k,v in pairs(self.rank_item_list) do
v:SetVisible(false,true)
end
-------------------------
--有个操作要注意,节点列表里面的已有数据如果已经不再有效,那么,需要清除动画
for k,v in pairs(self.rank_item_list) do
local have = false
if v.data then
for kk,vv in pairs(sort_list) do
if vv.role_id == v.data.role_id then
have = true
break
end
end
if not have then
v:CleanAction()
end
end
end
-------------------------
local show_item_list = {}--防错,层级变更之后,item对应的self.rank_item_list没有变k,self.rank_item_list的k值已不可使用
for i,v in ipairs(sort_list) do
local cur_item = false
for k,item in pairs(self.rank_item_list) do
if item.data and item.data.role_id == v.role_id then
cur_item = item
break
end
end
if not cur_item then
--如果存在,就拿那个对应的调整插入
--否则,获取一个队列里面没有的或者空白数据的插入
for k,item in pairs(self.rank_item_list) do
if not item.data then
--空白数据的
cur_item = item
break
else
local using = false
for a,b in pairs(sort_list) do
if b.role_id == item.data.role_id then
using = true
end
end
if not using then
cur_item = item
break
end
end
end
end
cur_item.transform:SetSiblingIndex(i)
cur_item:SetData(i,sort_list[i],"boss_home")
cur_item:SetVisible(true,true)
end
-------------------------
if self.delay_rank_id then
GlobalTimerQuest:CancelQuest(self.delay_rank_id)
self.delay_rank_id = nil
end
end
function BossHomeSceneView:ShowRank( )
if not self.is_loaded then return end
local all_sort_list = {}
local rank_data = self.model:GetBossHomeRankInfo(self.model:GetCurFightBossId()) or {}
local hurt_data = rank_data and rank_data.rank_list or {}
for k,v in pairs(hurt_data) do
all_sort_list[#all_sort_list+1] = DeepCopy(v)
end
-------------------------
local function sort_call( a,b )
--从大到小
return a.hurt > b.hurt
end
table.sort( all_sort_list, sort_call )
-------------------------
local sort_list = {}
for i=1,self.show_rank_num do
sort_list[i] = all_sort_list[i]
end
-------------------------
--要做排序,已有的要复用
-------------------------
self.sort_list_info = sort_list--存起来下一帧用
local function delay_rank_call( )
self:DelayRankCall()
end
self.delay_rank_id = self.delay_rank_id or setTimeout(delay_rank_call,0)
-------------------------
if TableSize(sort_list) > 0 then
if self.rank_empty then
--如果上次是空表来着
self.force_change_sub_damage = true
end
self.lb_empty_tmp.text = ""
self.rank_empty = false
if self.is_empty_rank then
-- self:SwitchVisible(true, true)
self.is_empty_rank = false
end
else
self.lb_empty_tmp.text = "暂无选中幻魔"
self.rank_empty = true
end
-------------------------
local my_info = {
rank = 0,
hurt = 0,
role_id = RoleManager.Instance.mainRoleInfo.role_id,
name = self.model:GetShortNameStr( RoleManager.Instance.mainRoleInfo.name )
}
local team_id = TeamModel:getInstance().in_team_id and TeamModel:getInstance().in_team_id or 0
for k,v in pairs(sort_list) do
if (v.role_id == RoleManager.Instance.mainRoleInfo.role_id) or (v.role_id == team_id) then
my_info = DeepCopy(v)
my_info.rank = k
break
end
end
-------------------------
local only_my_data = self.model:GetMyHurtOnly()
if only_my_data then
if (team_id and team_id > 0) then
--组队中啊,不能直接用队伍数据显示
my_info.role_id = RoleManager.Instance.mainRoleInfo.role_id
my_info.hurt = only_my_data.hurt
my_info.name = self.model:GetShortNameStr( RoleManager.Instance.mainRoleInfo.name )
end
end
-------------------------
if my_info.rank == 0 then
self.lb_att_tmp.text = self.model:GetHurtNumStr( my_info.hurt or 0 )
self.lb_rank_tmp.text = "--"
self.img_rank_obj:SetActive(false)
self.lb_name_tmp.text = self.model:GetShortNameStr( RoleManager.Instance.mainRoleInfo.name )
else
self.lb_att_tmp.text = self.model:GetHurtNumStr( my_info.hurt )
self.img_rank_obj:SetActive(my_info.rank <= 3)
if my_info.rank <= 3 then
self.lb_rank_tmp.text = ""
lua_resM:setImageSprite(self, self.img_rank_img, "common_asset", "com_rank_3_" .. my_info.rank,true)
else
self.lb_rank_tmp.text = my_info.rank
end
if my_info.role_id == RoleManager.Instance.mainRoleInfo.role_id then
self.lb_name_tmp.text = self.model:GetShortNameStr( RoleManager.Instance.mainRoleInfo.name )
else
self.lb_name_tmp.text = self.model:GetShortNameStr( string.format( "%s队", my_info.name ) )
end
end
end
function BossHomeSceneView:ShowBossList( )
all_boss_list = {}
if self.cur_boss_home_type == 1 then
all_boss_list = self.model:GetBossHomeCFG(self.model:GetBossHomeSceneFloor( )) or {}
else
all_boss_list = self.model:GetGuildBossHomeCFG(self.model:GetBossHomeSceneFloor( )) or {}
end
-------------------------
local function select_call( boss_data )
local scene_id = 0
if self.cur_boss_home_type == 1 then
scene_id = self.model:GetBossHomeSceneById(boss_data.boss_id)
else
scene_id = self.model:GetGuildBossHomeSceneById(boss_data.boss_id)
end
local cur_scene_id = SceneManager.Instance:GetSceneId()
if cur_scene_id == scene_id then
local pos = stringtotable(boss_data.born_pos)
local function call_back( ... )
GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
end
local findVo = FindVo.New()
findVo.sceneId = SceneManager.Instance:GetSceneId()
findVo.type = FindVo.POINT
findVo.x = pos[1]/ SceneObj.LogicRealRatio.x
findVo.y = pos[2]/ SceneObj.LogicRealRatio.y
findVo.call_back = call_back
findVo.range = 3
GlobalEventSystem:Fire(EventName.FIND,findVo)
end
-------------------------
self.model.boss_home_scene_boss = boss_data.boss_id
if self.item_list then
self.item_list:IterateItems(
function ( item )
item:SetSelect()
end
)
end
end
self.item_list = self.item_list or self:AddUIComponent(UI.ItemListCreator)
local data = {
data_list = all_boss_list or {},
item_con = self.Content_boss,
item_class = BossHomeSceneBossItem,
item_width = BossHomeSceneBossItem.Width,
item_height = BossHomeSceneBossItem.Height,
space_x = 1,
-- space_y = 0,
start_x = 6,
start_y = -3,
scroll_view = self.scroll_boss,
create_frequency = 0.10,
on_update_item = function(item, i, v)
item:SetData(v,select_call)
end,
}
self.item_list:UpdateItems(data)
end
function BossHomeSceneView:DestroySuccess( )
GlobalEventSystem:Fire(EventName.HIDE_EXIT_BTN_STATE)
if self.delay_rank_id then
GlobalTimerQuest:CancelQuest(self.delay_rank_id)
self.delay_rank_id = nil
end
for k,v in pairs(self.rightIcon_tween) do
TweenLite.Stop(v)
end
CommonController.Instance:Fire(EventName.CLOSE_SPECIALTIPVIEW)
end