PGRData/Script/matrix/xui/xuiguilddorm/main/XUiGuildDormMain.lua

410 lines
No EOL
16 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiGuildDormPanelOperation = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelOperation")
local XUiGuildDormPanelChannel = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelChannel")
local XUiGuildDormPanelAction = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelAction")
local XUiGuildDormPanelUiSetting = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelUiSetting")
--=================
--公会宿舍主页面
--=================
local XUiGuildDormMain = XLuaUiManager.Register(XLuaUi, "UiGuildDormMain")
function XUiGuildDormMain:OnAwake()
self.TopController = XUiHelper.NewPanelTopControl(self, self.TopControl, self.OnClickBackBtn, self.OnClickMainUiBtn)
-- self:BindHelpBtn(self.BtnHelp, "GuildDorm")
self:InitButtons()
self:InitChildPanels()
self:AddEventListeners()
self.UiPanelChannel:ConnectSignal("OnSwitchChannelSuccess", self, self.OnSwitchChannelSuccess)
self.UiPanelChannel:ConnectSignal("OpenBlackScreen", self, self.OpenBlackScreen)
self.UiPanelChannel:ConnectSignal("CloseBlackScreen", self, self.CloseBlackScreen)
self.UiPanelChannel:ConnectSignal("ClosePanelChannel", self, function()
self.UiPanelOperation:SetIsCanMove(true)
end)
end
function XUiGuildDormMain:OnStart()
local scene = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene()
local room = scene:GetCurrentRoom()
self:OnEnterRoom(room)
for _, component in pairs(self.ChildComponents or {}) do
if component["OnStart"] then
component:OnStart()
end
end
end
function XUiGuildDormMain:OnEnable()
XUiGuildDormMain.Super.OnEnable(self)
local currentScene = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene()
--重置天空盒
currentScene:ResetSkyBox()
currentScene:GetCurrentRoom():SetIsShow(true)
local camera = currentScene:GetCamera()
if camera then
camera.gameObject:SetActiveEx(true)
end
for _, component in pairs(self.ChildComponents or {}) do
if component["OnEnable"] then
component:OnEnable()
end
end
--当从其他界面返回到此界面时,需要重新设置光照
CS.XGlobalIllumination.SetSceneType(CS.XSceneType.Dormitory)
--这里需要手动把XSceneSetting打开刷新脚本初始化
local XSceneSetting = currentScene.GameObject:GetComponent("XSceneSetting")
if XSceneSetting then
XSceneSetting.enabled = true
end
--现在场景是烘焙的,不需要设置全局光照
--XDataCenter.GuildDormManager.SceneManager.GetCurrentScene():SetGlobalIllumSO()
--显示时刷新一下拟真围剿的蓝点
self:RefreshChallengeRed()
end
function XUiGuildDormMain:OnDisable()
XUiGuildDormMain.Super.OnDisable(self)
for _, component in pairs(self.ChildComponents or {}) do
if component["OnDisable"] then
component:OnDisable()
end
end
CS.XGlobalIllumination.SetSceneType(CS.XSceneType.Ui)
local currentScene = XDataCenter.GuildDormManager.SceneManager.GetCurrentScene()
currentScene:GetCurrentRoom():SetIsShow(false)
local camera = currentScene:GetCamera()
if camera then
camera.gameObject:SetActiveEx(false)
end
--这里需要手动把XSceneSetting关闭返回时打开刷新脚本初始化
local XSceneSetting = currentScene.GameObject:GetComponent("XSceneSetting")
if XSceneSetting then
XSceneSetting.enabled = false
end
--退出公会宿舍界面时主动GC一次
LuaGC()
end
--============
--在ui释放时在堆栈中把这个界面移除避免战斗重开Ui时直接打开这个界面导致错误
--============
function XUiGuildDormMain:OnRelease()
XUiGuildDormMain.Super.OnRelease(self)
XLuaUiManager.Remove("UiGuildDormCommon")
XLuaUiManager.Remove("UiGuildDormMain")
end
function XUiGuildDormMain:OnDestroy()
for _, component in pairs(self.ChildComponents or {}) do
if component["OnDestroy"] then
component:OnDestroy()
end
end
self:RemoveEventListeners()
self:DisposeChildComponents()
XDataCenter.GuildDormManager.RequestExitRoom()
XDataCenter.GuildDormManager.ExitGuildDorm()
end
--============
--添加界面事件监听
--============
function XUiGuildDormMain:AddEventListeners()
XEventManager.AddEventListener(XEventId.EVENT_GUILD_DORM_ON_ENTER_ROOM, self.OnEnterRoom, self)
XEventManager.AddEventListener(XEventId.EVENT_GUILD_DORM_PLAY_ACTION, self.OnPlayAction, self)
XEventManager.AddEventListener(XEventId.EVENT_GUILD_DORM_UI_SETTING, self.SetComponentsClose, self)
XRedPointManager.AddRedPointEvent(self.BtnGift, self.SetBtnGiftRed, self, { XRedPointConditions.Types.CONDITION_GUILD_ACTIVEGIFT })
XRedPointManager.AddRedPointEvent(self.BtnInformation, self.SetBtnInformationRed, self, { XRedPointConditions.Types.CONDITION_GUILD_APPLYLIST })
end
--============
--移除界面事件监听
--============
function XUiGuildDormMain:RemoveEventListeners()
XEventManager.RemoveEventListener(XEventId.EVENT_GUILD_DORM_ON_ENTER_ROOM, self.OnEnterRoom, self)
XEventManager.RemoveEventListener(XEventId.EVENT_GUILD_DORM_PLAY_ACTION, self.OnPlayAction, self)
XEventManager.RemoveEventListener(XEventId.EVENT_GUILD_DORM_UI_SETTING, self.SetComponentsClose, self)
XRedPointManager.RemoveRedPointEvent(self.BtnGift, self.SetBtnGiftRed, self, { XRedPointConditions.Types.CONDITION_GUILD_ACTIVEGIFT })
XRedPointManager.RemoveRedPointEvent(self.BtnInformation, self.SetBtnInformationRed, self, { XRedPointConditions.Types.CONDITION_GUILD_APPLYLIST })
end
--=====================================按钮相关方法Start=========================================
function XUiGuildDormMain:InitButtons()
self.BtnTabMember.CallBack = function() self:OnClickBtnTabMember() end
self.BtnTabChallenge.CallBack = function() self:OnClickBtnTabChallenge() end
self.BtnTabGift.CallBack = function() self:OnClickBtnTabGift() end
self.BtnUI.CallBack = function() self:OnClickBtnUI() end
self.BtnPeople.CallBack = function() self:OnClickBtnPeople() end
self.BtnAct.CallBack = function() self:OnClickBtnAct() end
self.BtnInformation.CallBack = function() self:OnClickInformation() end
self.BtnGift.CallBack = function() self:OnClickGift() end
XUiHelper.RegisterClickEvent(self, self.BtnChannel, self.OnBtnChannelClicked)
if self.SwitchGuildDorm then
local btn = require("XUi/XUiGuildDorm/XUiGuildSwitchBtn")
self.BtnSwitchGuild = btn.New(self, self.SwitchGuildDorm, true)
end
XUiHelper.RegisterClickEvent(self, self.BtnHelp, function()
self.UiPanelOperation:SetIsCanMove(false)
XUiManager.ShowHelpTip("GuildDorm", function()
self.UiPanelOperation:SetIsCanMove(true)
end)
end)
end
--============
--返回按钮点击
--============
function XUiGuildDormMain:OnClickBackBtn()
XDataCenter.GuildDormManager.RequestExitRoom(function()
XLuaUiManager.RunMain()
end)
end
--============
--主菜单按钮点击
--============
function XUiGuildDormMain:OnClickMainUiBtn()
XDataCenter.GuildDormManager.RequestExitRoom(function()
XLuaUiManager.RunMain()
end)
end
--============
--成员按钮点击
--============
function XUiGuildDormMain:OnClickBtnTabMember()
local guildId = XDataCenter.GuildManager.GetGuildId()
local now = XTime.GetServerNowTimestamp()
if now - self.Data.LastRequestMember >= XGuildDormConfig.RequestMemberGap then
self.Data.LastRequestMember = now
XDataCenter.GuildManager.GetGuildMembers(guildId, function()
XLuaUiManager.Open("UiGuildRongyu")
end)
else
XLuaUiManager.Open("UiGuildRongyu")
end
end
--============
--挑战按钮点击
--============
function XUiGuildDormMain:OnClickBtnTabChallenge()
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.GuildBoss) then
return
end
XDataCenter.GuildBossManager.OpenGuildBossHall()
end
--============
--奖励按钮点击
--============
function XUiGuildDormMain:OnClickBtnTabGift()
XLuaUiManager.Open("UiGuildPanelWelfare")
end
--============
--UI设置按钮点击
--============
function XUiGuildDormMain:OnClickBtnUI()
self.UiPanelOperation:SetIsCanMove(false)
self.UiPanelUiSetting:Open(function()
self.UiPanelOperation:SetIsCanMove(true)
end)
end
--============
--人员按钮点击
--============
function XUiGuildDormMain:OnClickBtnPeople()
self.UiPanelOperation:SetIsCanMove(false)
RunAsyn(function ()
XLuaUiManager.Open("UiGuildDormPerson")
local signalCode = XLuaUiManager.AwaitSignal("UiGuildDormPerson", "_", self)
if signalCode ~= XSignalCode.RELEASE then return end
self.UiPanelOperation:SetIsCanMove(true)
end)
end
--============
--表情动作按钮点击
--============
function XUiGuildDormMain:OnClickBtnAct()
if self.PanelActionCD.gameObject.activeSelf then
XUiManager.TipErrorWithKey("GuildDormActionCDTip")
return
end
self.UiPanelOperation:SetIsCanMove(false)
self.UiPanelAction:Open(function()
self.UiPanelOperation:SetIsCanMove(true)
end)
end
--============
--公会信息按钮点击
--============
function XUiGuildDormMain:OnClickInformation()
self.UiPanelOperation:SetIsCanMove(false)
self.UiPanelGuildInformation:Show(function()
self.UiPanelOperation:SetIsCanMove(true)
end)
end
--============
--旧公会入口按钮点击
--============
function XUiGuildDormMain:OnClickOldGuild()
XDataCenter.GuildManager.EnterGuild()
end
--============
--频道按钮点击
--============
function XUiGuildDormMain:OnBtnChannelClicked()
XDataCenter.GuildDormManager.RequestRoomChannelData(function()
self.UiPanelChannel:Open()
self.UiPanelOperation:SetIsCanMove(false)
end)
end
--============
--奖励按钮点击
--============
function XUiGuildDormMain:OnClickGift()
self.UiPanelOperation:SetIsCanMove(false)
RunAsyn(function ()
XLuaUiManager.Open("UiGuildDormGiftInfo")
local signalCode = XLuaUiManager.AwaitSignal("UiGuildDormGiftInfo", "_", self)
if signalCode ~= XSignalCode.RELEASE then return end
self.UiPanelOperation:SetIsCanMove(true)
end)
end
--============
--奖励按钮红点
--============
function XUiGuildDormMain:SetBtnGiftRed(count)
local giftContribute = XDataCenter.GuildManager.GetGiftContribute()
local canReceive = count >= 0
self.BtnGift:SetName(XUiHelper.GetText(canReceive and "GuildDormGiftButtonCanReceive" or "GuildDormGiftButtonNormal", giftContribute))
self.BtnGift:ShowReddot(count >= 0)
end
--============
--公会面板按钮红点
--============
function XUiGuildDormMain:SetBtnInformationRed(count)
self.BtnInformation:ShowReddot(count >= 0)
end
--============
--刷新挑战按钮
--============
function XUiGuildDormMain:RefreshChallengeRed()
if XDataCenter.GuildBossManager.IsReward() then
self.BtnInformation:ShowReddot(true)
else
XRedPointManager.CheckOnceByButton(self.BtnInformation, { XRedPointConditions.Types.CONDITION_GUILD_APPLYLIST })
end
end
--=====================================按钮相关方法End=========================================
--=====================================子控件相关方法Start=========================================
local ChildComponentsData = {
PanelGuildInformation = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelGuildInformation"),
DormTopName = require("XUi/XUiGuildDorm/Main/Panels/XUiGuildDormMainTopName"),
BtnInformation = require("XUi/XUiGuildDorm/Main/Panels/XUiGuildDormMainBtnInfo"),
PanelOperation = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelOperation"),
PanelChannel = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelChannel"),
PanelAction = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelAction"),
PanelUiSetting = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelUiSetting"),
DormTopChannel = require("XUi/XUiGuildDorm/Main/Panels/XUiGuildDormMainTopChannel"),
PanelChat = require("XUi/XUiGuildDorm/Main/XUiGuildDormPanelChat")
}
--==============
--初始化子面板
--==============
function XUiGuildDormMain:InitChildPanels()
self.ChildComponents = {}
local uiClassIns
for name, script in pairs(ChildComponentsData) do
uiClassIns = script.New(self[name])
self["Ui" .. name] = uiClassIns
table.insert(self.ChildComponents, uiClassIns)
if CheckClassSuper(uiClassIns, XSignalData) then
uiClassIns:ConnectSignal("SetRoleIsCanMove", self, self.SetRoleIsCanMove)
end
end
end
function XUiGuildDormMain:SetRoleIsCanMove(value)
self.UiPanelOperation:SetIsCanMove(value)
end
function XUiGuildDormMain:DisposeChildComponents()
for _, component in pairs(self.ChildComponents) do
if component["Dispose"] then
component:Dispose()
end
end
end
function XUiGuildDormMain:SetComponentsClose(value)
if value then
self.TopController:ShowUi()
self.BtnTabMember.gameObject:SetActiveEx(true)
self.BtnTabChallenge.gameObject:SetActiveEx(true)
self.BtnTabGift.gameObject:SetActiveEx(true)
self.BtnPeople.gameObject:SetActiveEx(true)
self.BtnAct.gameObject:SetActiveEx(true)
self.BtnHelp.gameObject:SetActiveEx(true)
self.BtnSwitchGuild.GameObject:SetActiveEx(true)
self.BtnGift.gameObject:SetActiveEx(true)
else
self.TopController:HideUi()
self.BtnTabMember.gameObject:SetActiveEx(false)
self.BtnTabChallenge.gameObject:SetActiveEx(false)
self.BtnTabGift.gameObject:SetActiveEx(false)
self.BtnPeople.gameObject:SetActiveEx(false)
self.BtnAct.gameObject:SetActiveEx(false)
self.BtnHelp.gameObject:SetActiveEx(false)
self.BtnSwitchGuild.GameObject:SetActiveEx(false)
self.BtnGift.gameObject:SetActiveEx(false)
end
for _, component in pairs(self.ChildComponents) do
if value and component.SetShow then
component:SetShow()
elseif not value and component.SetHide then
component:SetHide()
end
end
end
--=====================================子控件相关方法End=========================================
--=============
--进入房间时
--=============
function XUiGuildDormMain:OnEnterRoom(room)
if not room then return end
self.Data = room:GetRoomData() --房间数据
end
--=============
--打开黑屏
--=============
function XUiGuildDormMain:OpenBlackScreen()
self.BlackScreen.alpha = 1
self.BlackScreen.gameObject:SetActiveEx(true)
end
--=============
--关闭黑屏
--=============
function XUiGuildDormMain:CloseBlackScreen()
self:PlayAnimation("ChannelQieHuan", function()
self.BlackScreen.gameObject:SetActiveEx(false)
end, nil, CS.UnityEngine.Playables.DirectorWrapMode.None)
end
--=============
--切换频道成功后的处理
--=============
function XUiGuildDormMain:OnSwitchChannelSuccess(index)
self.UiPanelOperation:SetData()
end
function XUiGuildDormMain:OnPlayAction(playerId, actionId)
if XPlayer.Id ~= playerId or actionId <= 0 then return end
if self.__CDTimer then
XScheduleManager.UnSchedule(self.__CDTimer)
end
local config = XGuildDormConfig.GetCfgByIdKey(XGuildDormConfig.TableKey.GuildDormPlayAction, actionId)
self.PanelActionCD.gameObject:SetActiveEx(true)
self.ImgCD.fillAmount = 1
self.TxtCDTime.text = config.CoolDown .. XUiHelper.GetText("Second")
self.__CDTimer = XUiHelper.Tween(config.CoolDown, function(t)
if XTool.UObjIsNil(self.GameObject) then
XScheduleManager.UnSchedule(self.__CDTimer)
return
end
self.ImgCD.fillAmount = 1 - t
self.TxtCDTime.text = getRoundingValue(config.CoolDown - config.CoolDown * t, 1) .. XUiHelper.GetText("Second")
end, function(a)
self.PanelActionCD.gameObject:SetActiveEx(false)
end)
end