|
GuildEventBossView = GuildEventBossView or BaseClass(BaseItem)
|
|
local GuildEventBossView = GuildEventBossView
|
|
|
|
function GuildEventBossView:__init(parent_wnd,prefab_asset,layer_name)
|
|
self.base_file = "guild"
|
|
self.layout_file = "GuildEventBossView"
|
|
self.parent_wnd = parent_wnd
|
|
self.layer_name = layer_name
|
|
self.evt_key = nil -- 活动红点键值
|
|
self.guild_boss_type = nil -- 社团boss类型
|
|
self.sub_rank_item = nil
|
|
self.tab_index = 1 -- 页签index 1社团排行,2输出排行
|
|
self.rank_type = false -- 当前查看排行榜的类型
|
|
self.has_loaded_boss = false -- 是否已经创建过boss模型
|
|
self.model = GuildModel:getInstance()
|
|
self:Load()
|
|
end
|
|
|
|
function GuildEventBossView:Load_callback()
|
|
self.nodes = {
|
|
-- 背景 boss模型容器 红点
|
|
"bg:raw", "enter_btn/reddot:obj", "title_des_ad:img",
|
|
-- tab按钮
|
|
"selected_tab:img", "tab_1:obj:tmp", "tab_2:obj:tmp",
|
|
-- 排行容器
|
|
"rank_scroll:obj", "rank_scroll/Viewport/rank_con", "rank_subbg:obj",
|
|
-- 活动奖励容器
|
|
"reward_scroll", "reward_scroll/Viewport/reward_con",
|
|
-- 入口按钮
|
|
"enter_btn:obj",
|
|
-- 其余文本信息
|
|
"event_time:tmp", "event_desc:tmp", "no_rank:tmp",
|
|
"help_btn:obj",
|
|
}
|
|
self:GetChildren(self.nodes)
|
|
lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("guild_event_nightboss_bg"), false)
|
|
lua_resM:setOutsideImageSprite(self,self.title_des_ad_img,GameResPath.GetGuildImage("guild_event_boss_ad_pointfilter"))
|
|
self.event_desc_tmp.text = "参与社团Boss不仅可获得<color=#fdffc2>个人奖励</color>,还能通过社团拍卖享有<color=#fdffc2>交易券</color>分红~"
|
|
|
|
self:AddEvents()
|
|
if self.need_refresh_data then
|
|
self:UpdateEventTime()
|
|
self:UpdateView()
|
|
end
|
|
end
|
|
|
|
-- 这里只传入活动日历中的活动时间相关数据,活动协议内容界面自己获取
|
|
function GuildEventBossView:SetEventAcData( evt_ac_data )
|
|
self.evt_ac_data = evt_ac_data
|
|
self.evt_key = self.evt_ac_data.module_id .. "@" .. self.evt_ac_data.ac_sub
|
|
self.guild_boss_type = tonumber(self.evt_ac_data.module_id .. self.evt_ac_data.ac_sub)
|
|
if self.is_loaded then
|
|
self.need_refresh_data = false
|
|
self:UpdateEventTime()
|
|
self:UpdateView()
|
|
else
|
|
self.need_refresh_data = true
|
|
end
|
|
end
|
|
-- 设置活动的开始时间
|
|
function GuildEventBossView:UpdateEventTime( )
|
|
self.event_time_tmp.text = self.model:GetGuildEventOpenTime(self.evt_ac_data.module_id, self.evt_ac_data.module_sub,self.evt_ac_data.ac_sub)
|
|
end
|
|
-- 设置界面红点
|
|
function GuildEventBossView:UpdateNightBossRed( )
|
|
if self.evt_key then
|
|
-- self.reddot_obj:SetActive(self.model:GetGuildEventTabRed(self.evt_key))
|
|
-- 2021.3.23 优化需求:社团活动页签不再给红点
|
|
self.reddot_obj:SetActive(false)
|
|
end
|
|
end
|
|
|
|
function GuildEventBossView:AddEvents( )
|
|
local function click_event(target)
|
|
if target == self.tab_1_obj then
|
|
self:ChangeTab(1)
|
|
elseif target == self.tab_2_obj then
|
|
self:ChangeTab(2)
|
|
elseif target == self.enter_btn_obj then -- 参与活动
|
|
self.model:Fire(GuildModel.ENTER_GUILD_BASE)
|
|
elseif target == self.help_btn_obj then
|
|
EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 40602)
|
|
end
|
|
end
|
|
AddClickEvent(self.tab_1_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
|
|
AddClickEvent(self.tab_2_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
|
|
AddClickEvent(self.enter_btn_obj, click_event)
|
|
AddClickEvent(self.help_btn_obj,click_event, LuaSoundManager.SOUND_UI.NONE)
|
|
|
|
local function update_rank_data(type)
|
|
if self.rank_type == type then
|
|
self:UpdateRankItem()
|
|
end
|
|
end
|
|
self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_RANK, update_rank_data)
|
|
|
|
local function update_personal_rank_data(type)
|
|
if self.rank_type == type then
|
|
self:UpdatePersonalRankData()
|
|
end
|
|
end
|
|
self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_PERSONAL_RANK, update_personal_rank_data)
|
|
|
|
local function update_nightboss_red(type)
|
|
if type == Config.ConfigGuild.TabId.Event then
|
|
self:UpdateNightBossRed()
|
|
end
|
|
end
|
|
self:BindEvent(self.model, GuildModel.UPDATE_RED_DOT_BY_TYPE, update_nightboss_red)
|
|
end
|
|
|
|
function GuildEventBossView:UpdateView( )
|
|
self:ChangeTab(self.tab_index)
|
|
self:UpdateRewardItem()
|
|
self:UpdateNightBossRed()
|
|
self:CreateBossModel()
|
|
end
|
|
|
|
-- 打开界面后要重新加载一次boss形象
|
|
function GuildEventBossView:SetVisible(state)
|
|
if state then
|
|
self:CreateBossModel(true)
|
|
end
|
|
BaseItem.SetVisible(self, state)
|
|
end
|
|
|
|
function GuildEventBossView:ChangeTab(index)
|
|
self.tab_index = index
|
|
self.rank_type = self.tab_index == 2 and GuildBossRankType.Personal or GuildBossRankType.Guild
|
|
-- 请求两个榜单,请求后后端会根据类型推送40604
|
|
if self.rank_type == GuildBossRankType.Guild then
|
|
self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40603, self.evt_ac_data.ac_sub)
|
|
elseif self.rank_type == GuildBossRankType.Personal then
|
|
self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40602, self.evt_ac_data.ac_sub)
|
|
end
|
|
local color_selected, color_unselected = ColorUtil:ConvertHexToRGBColor("ffffff"), ColorUtil:ConvertHexToRGBColor("9eb3cf")
|
|
self.tab_1_tmp.color = index == 1 and color_selected or color_unselected
|
|
self.tab_2_tmp.color = index == 2 and color_selected or color_unselected
|
|
SetTMPSharedMaterial(self.tab_1_tmp, index == 1 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
|
|
SetTMPSharedMaterial(self.tab_2_tmp, index == 2 and ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBrightBlueTitle or ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
|
|
self.selected_tab.anchoredPosition = self["tab_"..index].anchoredPosition
|
|
|
|
self:UpdateRankItem()
|
|
self:UpdatePersonalRankData()
|
|
end
|
|
|
|
function GuildEventBossView:UpdateRankItem( )
|
|
local data = self.model:GetGuildBossRank(self.guild_boss_type, self.rank_type)
|
|
self.rank_item_creator = self.rank_item_creator or self:AddUIComponent(UI.ItemListCreator)
|
|
local info = {
|
|
data_list = data,
|
|
scroll_view = self.rank_scroll,
|
|
item_con = self.rank_con,
|
|
item_class = GuildEventBossRankItem,
|
|
item_height = 30,
|
|
start_y = -1,
|
|
space_y = 0,
|
|
create_frequency = 0.01,
|
|
alignment = UnityEngine.TextAnchor.UpperLeft,
|
|
on_update_item = function(item, i, v)
|
|
item:SetData(v, true)
|
|
end,
|
|
}
|
|
self.rank_item_creator:UpdateItems(info)
|
|
self.no_rank_tmp.text = TableSize(data) == 0 and "暂无排名" or ""
|
|
end
|
|
|
|
function GuildEventBossView:UpdatePersonalRankData( )
|
|
-- 更新额外的排行信息
|
|
local all_data = self.model:GetGuildBossRank(self.guild_boss_type, self.rank_type)
|
|
local sub_data = self.model:GetGuildBossPersonalRank(self.guild_boss_type, self.rank_type)
|
|
self.rank_subbg_obj:SetActive(sub_data and #all_data~=0 and true or false)
|
|
if not self.sub_rank_item then
|
|
self.sub_rank_item = GuildEventBossRankItem.New(self.rank_subbg)
|
|
end
|
|
local mainVo = RoleManager.Instance.mainRoleInfo
|
|
local data = {
|
|
rank = sub_data and sub_data.rank or false,
|
|
name = self.rank_type == GuildBossRankType.Personal and mainVo.name or mainVo.guild_name,
|
|
hurt = sub_data and sub_data.hp or 0,
|
|
}
|
|
self.sub_rank_item:SetData(data, false,true)
|
|
self.sub_rank_item:SetAnchoredPosition(0, 5)
|
|
end
|
|
|
|
function GuildEventBossView:UpdateRewardItem( )
|
|
local reward_data = DailyModel:getInstance():GetRewardList(self.evt_ac_data.module_id, self.evt_ac_data.module_sub, self.evt_ac_data.ac_sub)
|
|
self.reward_item_creator = self.reward_item_creator or self:AddUIComponent(UI.ItemListCreator)
|
|
local info = {
|
|
data_list = reward_data,
|
|
item_con = self.reward_con,
|
|
scroll_view = self.reward_scroll,
|
|
obj_pool_type = UIObjPool.UIType.AwardItem,
|
|
item_width = 78,
|
|
start_x = 5,
|
|
start_y = -6,
|
|
space_x = 9,
|
|
create_frequency = 0.01,
|
|
alignment = UnityEngine.TextAnchor.UpperLeft,
|
|
on_update_item = function(item, i, v)
|
|
local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v[1], v[2])
|
|
local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id)
|
|
if goodVo then
|
|
item:SetData(goodVo.type_id, v.count , goodVo.color, nil, lock)
|
|
end
|
|
end,
|
|
}
|
|
self.reward_item_creator:UpdateItems(info)
|
|
end
|
|
|
|
-- 创建boss模型
|
|
function GuildEventBossView:CreateBossModel(force)
|
|
local evt_data = self.model:GetGuildEventByType(self.guild_boss_type)
|
|
local boss_id = evt_data and evt_data.mon ~= 0 and evt_data.mon or GuildModel.GuildBossId
|
|
local mon_data = ConfigItemMgr.Instance:GetMonsterDataItem(tonumber(boss_id))
|
|
if not self.is_loaded then return end
|
|
if mon_data then
|
|
if not self.has_loaded_boss or force then
|
|
--Boss形象
|
|
--BOSS展示的时候的第一次播放的动作
|
|
local aciton_list = {"casual","idle", idle_name="idle",loopList=false}
|
|
-------------------------
|
|
-- local data = {
|
|
-- clothe_res_id = mon_data.icon,
|
|
-- weapon_res_id = mon_data.weapon_id,
|
|
-- type = SceneBaseType.Monster,
|
|
-- action_name_list = aciton_list,
|
|
-- layer_name = self.layer_name,
|
|
-- can_rotate = true,
|
|
-- scale = mon_data.icon_scale*30,
|
|
-- rotate = Vector3(0,180,0),
|
|
-- layout_file = self.layout_file,
|
|
-- -- size = Vector2(266,410),
|
|
-- position = Vector3(0, 230, 0),
|
|
-- size = Vector2(1200,720),
|
|
-- raycast_size = Vector2(456,432),
|
|
-- show_shadow = true,
|
|
-- }
|
|
-- lua_resM:SetRoleModelByRT(self, self.boss_con, data)
|
|
|
|
-- local res_data = {
|
|
-- father_node = self,
|
|
-- transform = self.boss_con,
|
|
-- fashion_type = FuncOpenModel.TypeId.Monster,
|
|
-- figure_id = tonumber(boss_id),
|
|
-- action_name_list = aciton_list,
|
|
-- position = Vector3(0, 230, 0),
|
|
-- rotate = Vector3(0,180,0),
|
|
-- }
|
|
-- FuncOpenModel:getInstance():SetModelRes(res_data)
|
|
local role_vo = RoleManager.Instance.mainRoleInfo
|
|
-- self.boss_name_tmp.text = string.format("%s <size=24>Lv.%s</size>", Trim(mon_data.name), role_vo.worldLv)
|
|
self.has_loaded_boss = true
|
|
end
|
|
end
|
|
end
|
|
|
|
function GuildEventBossView:__delete( )
|
|
if self.sub_rank_item then
|
|
self.sub_rank_item:DeleteMe()
|
|
self.sub_rank_item = nil
|
|
end
|
|
end
|