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