ro-webgl/Assets/Lua/Managers/LuaDojoMgr.lua
2021-12-21 09:40:39 +08:00

283 lines
13 KiB
Lua

local LuaDojoMgr = class("LuaDojoMgr")
function LuaDojoMgr:ctor()
self.battleSubMode = BattleSubMode.None
self:RegisterNetEvents();
end
function LuaDojoMgr:Destroy()
if tolua.getpeer(self) ~= nil then
tolua.setpeer(self, nil)
end
end
function LuaDojoMgr:RegisterNetEvents()
ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.EID_SHUT_PVPCIMBINGBATTLE, self, self.PvpClimbingShutBattle)
end
function LuaDojoMgr:UnRegisterNetEvents()
ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.EID_SHUT_PVPCIMBINGBATTLE, self, self.PvpClimbingShutBattle)
end
function LuaDojoMgr:Enter(mode)
if mode == nil then
LogError("请设置VersusBattle的战斗类型")
return
end
self.battleSubMode = mode
ManagerContainer.LuaGameMgr:SetGameSpeed(ManagerContainer.LuaGameMgr.GameSpeed)
if self.battleSubMode == BattleSubMode.Voyage then
ManagerContainer.LuaEventMgr:RegisterEvent(UIEventNames.DOJO_CHALLENGE_RESULT_CHANGED, self, self.OnChallengeResultChanged)
end
end
function LuaDojoMgr:Exit()
if self.battleSubMode == BattleSubMode.Voyage then
ManagerContainer.LuaEventMgr:UnregisterEvent(UIEventNames.DOJO_CHALLENGE_RESULT_CHANGED, self, self.OnChallengeResultChanged)
end
end
function LuaDojoMgr:OnChallengeResultChanged()
if self.battleSubMode == BattleSubMode.Voyage then
local win = ManagerContainer.DataMgr.VoyageDataMgr:GetLastBattleWin()
local scores = ManagerContainer.DataMgr.VoyageDataMgr:GetLastBattleScores()
local rewards = ManagerContainer.DataMgr.VoyageDataMgr:GetLastBattleRewards()
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattleResult, {win, scores, rewards, 'VoyageResultTips', self.ShowDojoExit, self})
end
end
function LuaDojoMgr:OnStartingFight()
local data = {}
data[1] = BattleMode.Versus
data[2] = self.battleSubMode
if self.battleSubMode == BattleSubMode.Arena then
data[3] = ManagerContainer.DataMgr.ArenaData:GetMatchFighterName()
data[4] = ManagerContainer.DataMgr.ArenaData:GetOurMembers()
data[5] = ManagerContainer.DataMgr.ArenaData:GetEnemyMembers()
elseif self.battleSubMode == BattleSubMode.PvPClimbinglower then
data[3] = ManagerContainer.DataMgr.PeakTowerDataMgr:GetMatchFighterName()
data[4] = ManagerContainer.DataMgr.PeakTowerDataMgr:GetOurMembers()
data[5] = ManagerContainer.DataMgr.PeakTowerDataMgr:GetEnemyMembers()
data[6] = true
data[7] = ManagerContainer.DataMgr.PeakTowerDataMgr:GetLimitedTime()
elseif self.battleSubMode == BattleSubMode.HundredDojo then
data[3] = ManagerContainer.DataMgr.HundredDojoDataMgr:GetMatchFighterName()
data[4] = ManagerContainer.DataMgr.HundredDojoDataMgr:GetOurMembers()
data[5] = ManagerContainer.DataMgr.HundredDojoDataMgr:GetEnemyMembers()
data[6] = true
data[7] = ManagerContainer.DataMgr.HundredDojoDataMgr:GetLimitedTime()
elseif self.battleSubMode == BattleSubMode.Voyage then
data[3] = ManagerContainer.DataMgr.VoyageDataMgr:GetMatchFighterName()
data[4] = ManagerContainer.DataMgr.VoyageDataMgr:GetOurMembers()
data[5] = ManagerContainer.DataMgr.VoyageDataMgr:GetEnemyMembers()
data[6] = true
data[7] = ManagerContainer.DataMgr.VoyageDataMgr:GetLimitedTime()
elseif self.battleSubMode == BattleSubMode.GvG then
local guildWarDataMgr = ManagerContainer.DataMgr.GuildWarDataMgr
if guildWarDataMgr then
data[3] = guildWarDataMgr:GetMatchFighterName()
data[4] = guildWarDataMgr:GetOurMembers()
data[5] = guildWarDataMgr:GetEnemyMembers()
data[6] = true
data[7] = guildWarDataMgr:GetLimitedTime()
else
data[6] = true
data[7] = 0
end
ManagerContainer.DataMgr.GuildWarDataMgr:StartStayBatting()
end
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoBattle, data)
end
function LuaDojoMgr:OnBattleWin()
ManagerContainer.LuaGameMgr:SetGameSpeed(1)
if self.battleSubMode == BattleSubMode.Arena then
ManagerContainer.DataMgr.ArenaData:BattleEnd(1)
elseif self.battleSubMode == BattleSubMode.HundredDojo then
ManagerContainer.DataMgr.HundredDojoDataMgr:BattleEnd(1)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattleSimpleResult, {1, self.ShowDojoExit, self})
elseif self.battleSubMode == BattleSubMode.Voyage then
ManagerContainer.DataMgr.VoyageDataMgr:BattleEnd(1)
elseif self.battleSubMode == BattleSubMode.GvG then
ManagerContainer.DataMgr.GuildWarDataMgr:BattleEnd(1)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattleSimpleResult, {1, self.ShowDojoExit, self})
elseif self.battleSubMode == BattleSubMode.PvPClimbinglower then
ManagerContainer.DataMgr.PeakTowerDataMgr:BattleEnd(1)
end
end
function LuaDojoMgr:OnBattleFailed()
ManagerContainer.LuaGameMgr:SetGameSpeed(1)
if self.battleSubMode == BattleSubMode.Arena then
ManagerContainer.DataMgr.ArenaData:BattleEnd(0)
elseif self.battleSubMode == BattleSubMode.HundredDojo then
ManagerContainer.DataMgr.HundredDojoDataMgr:BattleEnd(0)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattleSimpleResult, {0, self.ShowDojoExit, self})
elseif self.battleSubMode == BattleSubMode.Voyage then
ManagerContainer.DataMgr.VoyageDataMgr:BattleEnd(0)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattleResult, {0, nil, nil, 'VoyageResultTips', self.ShowDojoExit, self})
elseif self.battleSubMode == BattleSubMode.GvG then
ManagerContainer.DataMgr.GuildWarDataMgr:BattleEnd(0)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIBattleSimpleResult, {0, self.ShowDojoExit, self})
elseif self.battleSubMode == BattleSubMode.PvPClimbinglower then
--ManagerContainer.DataMgr.PeakTowerDataMgr:BattleEnd(0)
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIClimbingTowerBattleFailed,Enum.UIPageName.UIClimbingTower)
end
end
function LuaDojoMgr:OnBattleEnd()
ManagerContainer.LuaGameMgr:SetGameSpeed(1)
end
--关闭结算界面
function LuaDojoMgr:CloseBattlePage()
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIDojoBattle)
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIBattleStatistics)
if self.battleSubMode == BattleSubMode.Arena then
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIDojoBattleFail)
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIDojoBattleWin)
elseif self.battleSubMode == BattleSubMode.HundredDojo then
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIBattleSimpleResult)
elseif self.battleSubMode == BattleSubMode.Voyage then
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIBattleResult)
elseif self.battleSubMode == BattleSubMode.GvG then
ManagerContainer.LuaUIMgr:ClosePage(Enum.UIPageName.UIBattleSimpleResult)
end
end
function LuaDojoMgr:ShowDojoExit()
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojoExit)
end
function LuaDojoMgr:BackDojoMain()
self:CloseBattlePage();
if self.battleSubMode == BattleSubMode.Arena then
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIDojo2D, nil, Enum.UIPageName.UIMainCity1)
elseif self.battleSubMode == BattleSubMode.HundredDojo then
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIHundredDojo, nil, Enum.UIPageName.UIMainCity1)
elseif self.battleSubMode == BattleSubMode.Voyage then
ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UIVoyage, nil, Enum.UIPageName.UIMainCity1)
elseif self.battleSubMode == BattleSubMode.GvG then
local data = require('ExecuteSequenceData'):new()
data:AppendUIListener(Enum.UIPageName.UIMain, UIEventNames.UI_FILLCONTENT_COMPELETED, 5)
data:AppendFuncAfterListener(false, ManagerContainer.LuaUIMgr, ManagerContainer.LuaUIMgr.Open, Enum.UIPageName.UIMain)
data:AppendUIListener(Enum.UIPageName.UIMainCity1, UIEventNames.UI_FILLCONTENT_COMPELETED, 5)
data:AppendUIViewFuncAfterListener(false, Enum.UIPageName.UIMain, 'ChangePageMsg', Enum.MainViewPageType.Town)
data:AppendFunc(false, nil, function (sequenceData)
if ManagerContainer.DataMgr.GuildWarDataMgr:GetOpenState() then
sequenceData:AppendUIListener(Enum.UIPageName.UIGuildWarMatchMap, UIEventNames.UI_PAGE_IN_END_NTF, 5)
sequenceData:AppendFuncAfterListener(false, ManagerContainer.LuaUIMgr, ManagerContainer.LuaUIMgr.Open, Enum.UIPageName.UIGuildWarMatchMap)
sequenceData:AppendFunc(false, nil, function (sequenceData1)
if ManagerContainer.DataMgr.GuildWarDataMgr:GetOpenState() then
local attackBattleIdx = ManagerContainer.DataMgr.GuildWarDataMgr:GetLastAttackBattleIdx()
if attackBattleIdx then
sequenceData1:AppendUIListener(Enum.UIPageName.UIGuildWar, UIEventNames.UI_PAGE_IN_END_NTF, 5)
sequenceData1:AppendFuncAfterListener(false, ManagerContainer.LuaUIMgr, ManagerContainer.LuaUIMgr.Open, Enum.UIPageName.UIGuildWar,attackBattleIdx)
end
end
end, sequenceData)
end
end, data)
ManagerContainer.ExecuteSequenceMgr:Execute(data)
end
self:ShutBattle()
end
function LuaDojoMgr:ShutBattle()
ManagerContainer.LuaGameMgr:ShutDownBattle()
ManagerContainer.FSMMgr:ChangeState(Enum.StateEnum.IdleState.stateId)
end
function LuaDojoMgr:PvpClimbingShutBattle(openPageId,param)
self:CloseBattlePage()
if self.battleSubMode == BattleSubMode.PvPClimbinglower then
self:ShutBattle()
if openPageId ~= nil and openPageId > 0 then
ManagerContainer.LuaUIMgr:Open(openPageId,param, Enum.UIPageName.UIMainCity1)
end
LuaBattleBridge.CloseBgm()
end
end
-- 显示战场结束转场
function LuaDojoMgr:ShowBattleEndInterlude()
end
--pvp压制特效
function LuaDojoMgr:OnShowPvpPressPoint()
if self.chatHideTimer then
ManagerContainer.LuaTimerMgr:RemoveTimer(chatHideTimer)
self.chatHideTimer = nil
end
ManagerContainer.LuaTimerMgr:AddTimer(2000, 1,self,self.OnHidePvpPressPointTimer,nil);
end
function LuaDojoMgr:OnHidePvpPressPointTimer()
self.chatHideTimer = ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_SHOW_PVP_PRESSPOINT,true);
end
function LuaDojoMgr:OnShowBossBuff(teamSide,actorId,isBoss,buffIcon,num)
if isBoss then
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Boss_Buff,buffIcon,num)
else
if teamSide == 0 then --我方
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Player_Buff,actorId, buffIcon,num)
end
end
end
function LuaDojoMgr:OnRemoveBossBuff(teamSide,actorId,isBoss,buffIcon)
if isBoss then
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Boss_Remove_Buff,buffIcon)
else
if teamSide == 0 then --我方
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Remove_Player_Buff, actorId, buffIcon)
end
end
end
function LuaDojoMgr:OnLoadBegin()
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Loading_Begin);
end
function LuaDojoMgr:OnLoadProgress(progress)
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Loading_Progress,progress);
end
function LuaDojoMgr:OnLoadComplete()
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Loading_Complete);
end
function LuaDojoMgr:OnFighterLifeChanged(isBoss,actorId,life,maxLife,teamSide)
if isBoss then
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Boss_Life,life,maxLife)
else
if teamSide == 0 then
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Fighter_Life,actorId,life,maxLife)
else
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Enemy_Fighter_Life,actorId,life,maxLife)
end
end
end
function LuaDojoMgr:OnFighterEnergyChanged(actorId,sp,maxSp,teamSide)
if teamSide == 0 then
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Fighter_Sp,actorId,sp,maxSp)
else
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_Enemy_Fighter_Sp,actorId,sp,maxSp)
end
end
function LuaDojoMgr:OnFighterCastSkill(skillParam)
end
function LuaDojoMgr:RefreshStatistics()
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_Refresh_BattleStatistics)
end
function LuaDojoMgr:OnFightingStart()
ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.EID_FIGHTING_START)
end
return LuaDojoMgr;