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

273 rivejä
8.4 KiB

BossHomeSceneRankItem = BossHomeSceneRankItem or BaseClass(BaseItem)
local BossHomeSceneRankItem = BossHomeSceneRankItem
function BossHomeSceneRankItem:__init(parent_wnd,prefab_asset,layer_name,tag)
self.base_file = "boss"
self.layout_file = "BossHomeSceneRankItem"
self.tag = tag
self.model = BossHomeModel:getInstance()
self.enemy_list = {}
self.show_data = false
self.show_time = 0--显示的时间
self:Load()
end
function BossHomeSceneRankItem:Load_callback()
self.nodes = {
"img_rank:img:obj","lb_rank:tmp","lb_name:tmp","lb_att:tmp",
"con:obj","btn_team:img:obj","btn_att:img:obj","con/con_tip:obj",
}
self:GetChildren(self.nodes)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
if self.tag == "boss_home" then
lua_resM:setImageSprite(self, self.btn_att_img,'boss_asset',"boss_btn_29",true)
lua_resM:setImageSprite(self, self.btn_team_img,'boss_asset',"boss_btn_30",true)
end
end
function BossHomeSceneRankItem:AddEvents( )
local function call_back( target )
if target == self.btn_team_obj then
if not self.data then return end
local my_team_id = RoleManager.Instance.mainRoleInfo.team_id
local other_team_id = 0
if self.data.type == 0 then
--无组队玩家
else
other_team_id = self.data.role_id
end
-------------------------
if my_team_id == 0 and other_team_id ~= 0 then
GlobalEventSystem:Fire(TeamModel.APPLY_JOIN_TEAM,other_team_id)
elseif my_team_id == 0 and other_team_id == 0 then
GlobalEventSystem:Fire(TeamModel.INVITE_PLAYER,{self.data.role_id})
elseif my_team_id ~= 0 and other_team_id == 0 then
GlobalEventSystem:Fire(TeamModel.INVITE_PLAYER,{self.data.role_id})
elseif my_team_id ~= 0 and other_team_id ~= 0 then
Message.show("双方均有队伍! 请退出队伍再操作!")
end
elseif target == self.btn_att_obj then
if not self.data then return end
local support_data = GuildModel:getInstance():GetCurSupportPlayerInfo()
if self.data.type == 1 then
--队伍的时候,先找到活着的队长,然后找到活着的队员,最后找死的队长
local lead_info = false--队长
local team_info = {}--队员信息
local all_other_vo = SceneManager.Instance:GetAllRoleVos( )
for a,vo in pairs(all_other_vo) do
local temp = Scene:getInstance():GetRole(vo.role_id)
if vo.team_id == self.data.role_id then
if vo.team_job == 1 then
lead_info = vo
else
table.insert( team_info, vo )
end
end
end
-------------------------
local role_target = false
if lead_info and lead_info.hp > 0 then
--先找到活着的队长
role_target = Scene.Instance:GetRole(lead_info.role_id)
elseif team_info[1] then
for k,v in pairs(team_info) do
if v.hp > 0 then
--然后找到活着的队员
role_target = Scene.Instance:GetRole(v.role_id)
break
end
end
end
if not role_target then
--如果没有活的就找死的
if lead_info then
role_target = Scene.Instance:GetRole(lead_info.role_id)
elseif team_info[1] then
role_target = Scene.Instance:GetRole(team_info[1].role_id)
end
end
-------------------------
--对协助目标的判断
local is_support = false
if support_data then
if lead_info and lead_info.role_id == support_data.role_id then
is_support = true
end
if not is_support then
for k,v in pairs(team_info) do
if v.role_id == support_data.role_id then
is_support = true
break
end
end
end
end
if is_support then
--点到了协助目标
Message.show("对方正在接收您的协助")
return
end
-------------------------
if role_target then
Scene.Instance:SetClickTarget(role_target)
GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
end
else
if support_data and support_data.role_id == self.data.role_id then
--点到了协助目标
Message.show("对方正在接收您的协助")
return
end
local role = Scene.Instance:GetRole(self.data.role_id)
if role then
Scene.Instance:SetClickTarget(role)
GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
end
end
end
end
AddClickEvent(self.btn_team_obj,call_back,false)
AddClickEvent(self.btn_att_obj,call_back,false)
local function REFRESH_ENEMY_LIST( data )
if not data then return end
if not self.data then return end
-------------------------
local curTime = TimeUtil:getServerTime()
if self.show_data and (curTime - self.show_data.time <= 5) then
--强制闪烁5s,中间跳过过滤
return
end
self.enemy_list = data
self.show_data = false
for k,v in pairs(self.enemy_list) do
if self.data.type == 1 then
--队伍的时候
local all_other_vo = SceneManager.Instance:GetAllRoleVos( )
for a,vo in pairs(all_other_vo) do
local temp = Scene:getInstance():GetRole(vo.role_id)
if vo.role_id == v.role_id and vo.team_id == self.data.role_id then
self.show_data = v
break
end
end
elseif v.role_id == self.data.role_id then
self.show_data = v
break
end
end
if not self.show_data then
self:CleanAction()
else
self:ShowAction()
end
end
self:BindEvent(self.model, BossHomeConst.REFRESH_ENEMY_LIST, REFRESH_ENEMY_LIST)
end
function BossHomeSceneRankItem:UpdateView( )
if not self.data then return end
self.data.server_num = 0
if self.data.server_num ~= 0 then
self.data.name = GetCSLongName(self.data.name, self.data.server_num)
end
if self.data.type == 1 then
self.lb_name_tmp.text = self.model:GetShortNameStr(string.format( "%s队", self.data.name ))
else
self.lb_name_tmp.text = self.model:GetShortNameStr(self.data.name)
end
-------------------------
local boss_id = self.model:GetCurFightBossId()
if not boss_id then return end
local boss_type = self.model:GetBossTypeByBossId( boss_id )
-------------------------
local boss_max_hp = boss_type and self.model:GetSceneBossHp(boss_type) or 0
if boss_max_hp == 0 and boss_type ~= Config.ConfigBoss.ModuleId.BossHome and boss_type ~= Config.ConfigBoss.ModuleId.GuildBossHome then
self.lb_att_tmp.text = "获取中"
else
self.lb_att_tmp.text = self.model:GetHurtNumStr(self.data.hurt)--string.format("%0.2f%%",self.data.hurt / boss_max_hp * 100)
end
self.img_rank_obj:SetActive(self.index <= 3)
if self.index <= 3 then
self.lb_rank_tmp.text = ""
lua_resM:setImageSprite(self, self.img_rank_img, "common_asset", "com_rank_3_" .. self.index,true)
else
self.lb_rank_tmp.text = self.index
end
local is_me = false
if self.data.type == 1 then
is_me = RoleManager.Instance.mainRoleInfo.team_id == self.data.role_id
else
is_me = self.data.role_id == RoleManager.Instance.mainRoleInfo.role_id
end
self.btn_team_obj:SetActive((self.tag_str == "boss_home") and (not is_me))
self.btn_att_obj:SetActive((self.tag_str == "boss_home") and (not is_me))
end
function BossHomeSceneRankItem:ShowAction( )
--5s的闪现
if (not self.is_loaded) or (not self.show_data) then return end
self.show_time = 5
local function clockFun()
if self.show_time <= 0 then
self:CleanAction()
elseif self.show_time <= 2 then
self.con_obj:SetActive(false)
else
self.con_obj:SetActive(true)
self.con_tip.transform:GetComponent("CanvasGroup").alpha = 0
local function right_action_move( percent )
if percent <= 0.5 then
self.con_tip.transform:GetComponent("CanvasGroup").alpha = percent * 2
else
self.con_tip.transform:GetComponent("CanvasGroup").alpha = 1 - ((percent-0.5) * 2)
end
end
local action = cc.CustomUpdate.New(1,right_action_move)
self:AddAction(action, self.con_tip.transform)
self.show_time = self.show_time - 1
end
end
if not self.close_time_id then
clockFun()
end
self.close_time_id = self.close_time_id or GlobalTimerQuest:AddPeriodQuest(clockFun, 1, -1)
end
function BossHomeSceneRankItem:CleanAction( )
self.show_time = 0
self.con_obj:SetActive(false)
self.show_data = false
if self.close_time_id then
GlobalTimerQuest:CancelQuest(self.close_time_id)
self.close_time_id = nil
end
if self.con.transform then
cc.ActionManager:getInstance():removeAllActionsFromTarget( self.con.transform )
end
end
function BossHomeSceneRankItem:SetData( index, data, tag_str )
self.index = index
self.data = data
self.tag_str = tag_str
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function BossHomeSceneRankItem:__delete( )
self:CleanAction()
end