403 lines
13 KiB
Lua
403 lines
13 KiB
Lua
TrialMapPanel = {}
|
|
local this = TrialMapPanel
|
|
local istrialMap = false
|
|
local MapPanel
|
|
local bombNum = 0
|
|
local powerValue = 0
|
|
local ctrlView = require("Modules/Map/View/MapControllView")
|
|
local targetPos = Vector2.New(109, 289)
|
|
local orginLayer = 0
|
|
function TrialMapPanel:InitComponent(root, mapPanel)
|
|
Log("TrialMapPanel:InitComponent(root, mapPanel)")
|
|
orginLayer = 0
|
|
MapPanel = mapPanel
|
|
-- 剩余复活次数
|
|
this.leftLife = Util.GetGameObject(root, "leftDown/leftLifeRoot/leftTimes"):GetComponent("Text")
|
|
this.leftLifeRoot = Util.GetGameObject(root, "leftDown/leftLifeRoot")
|
|
|
|
-- 精气
|
|
this.powerRoot = Util.GetGameObject(root, "leftDown/active")
|
|
this.levelNum = Util.GetGameObject(root, "leftUp/curLevel"):GetComponent("Text")
|
|
this.powerPercent = Util.GetGameObject(root, "leftDown/active/value"):GetComponent("Text")
|
|
this.sliderValue = Util.GetGameObject(root, "leftDown/active/progress"):GetComponent("Image")
|
|
-- 显示时间
|
|
this.mapTime = Util.GetGameObject(root, "leftDown/timeRoot/Time"):GetComponent("Text")
|
|
this.DragCtrl = Util.GetGameObject(root, "Ctrl")
|
|
|
|
-- 初始化任务显示
|
|
this.targetRoot = Util.GetGameObject(root, "TargetRoot/textShowRoot/missionRoot/MisPre1")
|
|
this.targetText = Util.GetGameObject(this.targetRoot, "context"):GetComponent("Text")
|
|
-- 炸弹
|
|
this.btnBomb = Util.GetGameObject(root, "rightDown/btnBomb")
|
|
this.bombNum = Util.GetGameObject(this.btnBomb, "num"):GetComponent("Text")
|
|
|
|
-- 试炼副本商店
|
|
this.buffShop = Util.GetGameObject(root, "rightDown/buff")
|
|
this.buffNum = Util.GetGameObject(this.buffShop, "num"):GetComponent("Text")
|
|
this.normalShop = Util.GetGameObject(root, "rightDown/shop")
|
|
this.shopNum = Util.GetGameObject(this.normalShop, "num"):GetComponent("Text")
|
|
|
|
this.effectRoot = Util.GetGameObject(root, "fireRoot")
|
|
this.fire = Util.GetGameObject(this.effectRoot, "UI_effect_shilian_huo")
|
|
this.guiji = Util.GetGameObject(this.effectRoot, "UI_effect_shilian_guiji")
|
|
this.chufa = Util.GetGameObject(this.powerRoot, "UI_effect_shilian_chufa")
|
|
|
|
-- 月卡福利炸弹提示
|
|
this.bombTip = Util.GetGameObject(this.btnBomb, "bombTip")
|
|
|
|
end
|
|
|
|
|
|
function TrialMapPanel:BindEvent()
|
|
Util.AddClick(this.btnBomb, function ()
|
|
if bombNum > 0 then
|
|
if MapTrialManager.isHaveBoss then
|
|
PopupTipPanel.ShowTip("已经召唤了首领!")
|
|
return
|
|
else
|
|
UIManager.OpenPanel(UIName.TrialOpPanel, 2)
|
|
-- 停止自动寻路
|
|
ctrlView.OnRoleDead()
|
|
end
|
|
else
|
|
PopupTipPanel.ShowTip("当前没有炸弹!")
|
|
end
|
|
end)
|
|
|
|
-- 打开补给点
|
|
Util.AddClick(this.buffShop, function()
|
|
-- 判断是否有保存的补给点
|
|
local buffList = MapTrialManager.GetBuffList()
|
|
if not buffList or #buffList <= 0 then
|
|
PopupTipPanel.ShowTip("没有保存的补给点")
|
|
return
|
|
end
|
|
UIManager.OpenPanel(UIName.BuffChoosePanel)
|
|
end)
|
|
|
|
-- 打开商店
|
|
Util.AddClick(this.normalShop, function()
|
|
if not ShopManager.IsActive(SHOP_TYPE.TRIAL_SHOP) then
|
|
PopupTipPanel.ShowTip("尚未发现试炼商店")
|
|
return
|
|
end
|
|
UIManager.OpenPanel(UIName.MapShopPanel, SHOP_TYPE.TRIAL_SHOP)
|
|
end)
|
|
end
|
|
|
|
--添加事件监听(用于子类重写)
|
|
function TrialMapPanel:AddListener()
|
|
Game.GlobalEvent:AddEvent(GameEvent.TrialMap.OnPowerValueChanged, this.OnPowerValueChange)
|
|
Game.GlobalEvent:AddEvent(GameEvent.Bag.OnTempBagChanged, this.OnTempBagChanged)
|
|
Game.GlobalEvent:AddEvent(GameEvent.FoodBuff.OnFoodBuffStateChanged, this.InitBuffInfo)
|
|
Game.GlobalEvent:AddEvent(GameEvent.Bag.BagGold, this.RefreshBombNum)
|
|
|
|
end
|
|
|
|
--移除事件监听(用于子类重写)
|
|
function TrialMapPanel:RemoveListener()
|
|
Game.GlobalEvent:RemoveEvent(GameEvent.TrialMap.OnPowerValueChanged, this.OnPowerValueChange)
|
|
Game.GlobalEvent:RemoveEvent(GameEvent.Bag.OnTempBagChanged, this.OnTempBagChanged)
|
|
Game.GlobalEvent:RemoveEvent(GameEvent.FoodBuff.OnFoodBuffStateChanged, this.InitBuffInfo)
|
|
Game.GlobalEvent:RemoveEvent(GameEvent.Bag.BagGold, this.RefreshBombNum)
|
|
end
|
|
|
|
--界面打开时调用(用于子类重写)
|
|
function TrialMapPanel:OnOpen()
|
|
this.powerRoot:SetActive(CarbonManager.difficulty == 2)
|
|
this.btnBomb:SetActive(CarbonManager.difficulty == 2)
|
|
-- 商店
|
|
this.buffShop:SetActive(CarbonManager.difficulty == CARBON_TYPE.TRIAL)
|
|
this.normalShop:SetActive(CarbonManager.difficulty == CARBON_TYPE.TRIAL)
|
|
|
|
if CarbonManager.difficulty ~= 2 then return end
|
|
|
|
this.InitShowState()
|
|
|
|
-- 检测引导
|
|
GuideManager.CheckCarbonGuild(CARBON_TYPE.TRIAL)
|
|
end
|
|
|
|
function TrialMapPanel:OnShow()
|
|
if CarbonManager.difficulty ~= 2 then return end
|
|
this.InitShowState()
|
|
end
|
|
|
|
function this.InitShowState()
|
|
if CarbonManager.difficulty ~= 2 then return end
|
|
istrialMap = CarbonManager.difficulty == 2
|
|
if istrialMap then this.InitTrial() end
|
|
this.InitTrialMission()
|
|
this.UpdatePowerValue()
|
|
this.UpdateDeadTimes()
|
|
this.RefreshBombNum()
|
|
this.InitShopInfo()
|
|
this.InitBuffInfo()
|
|
this.InitBossInfo()
|
|
this.powerRoot:SetActive(istrialMap)
|
|
this.InitEffect()
|
|
this.InitTip()
|
|
end
|
|
|
|
function this.InitEffect()
|
|
this.guiji:SetActive(false)
|
|
this.chufa:SetActive(false)
|
|
this.fire:SetActive(false)
|
|
end
|
|
|
|
function this.InitTip()
|
|
this.bombTip:SetActive(false)
|
|
if MapTrialManager.firstEnter then
|
|
Log("试炼副本第一次进图!")
|
|
-- 月卡蛋蛋福利
|
|
if MapTrialManager.firstEnter and BagManager.GetTempBagCountById(43) >= 2 then
|
|
this.bombTip:SetActive(true)
|
|
local index = 0
|
|
local timer
|
|
timer = Timer.New(function()
|
|
index = index + 1
|
|
if index == 5 then
|
|
this.bombTip:SetActive(false)
|
|
timer:Stop()
|
|
end
|
|
end, 1, 5, true)
|
|
timer:Start()
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 刷新精气值
|
|
function this.UpdatePowerValue()
|
|
this.levelNum.text = string.format("试炼副本%s层", MapTrialManager.curTowerLevel)
|
|
Log("试炼精气 >>>>>>>>>>>>>>>>>>>> " .. MapTrialManager.powerValue)
|
|
powerValue = MapTrialManager.powerValue
|
|
|
|
|
|
this.SetTargetState(powerValue)
|
|
|
|
powerValue = powerValue <= 0 and 0 or powerValue
|
|
powerValue = powerValue >= 100 and 100 or powerValue
|
|
--Log("更新数值")
|
|
this.powerPercent.text = powerValue
|
|
this.sliderValue.fillAmount = powerValue / 100
|
|
|
|
if powerValue >= 100 then
|
|
-- 停止自动寻路
|
|
ctrlView.OnRoleDead()
|
|
UIManager.OpenPanel(UIName.TrialOpPanel, 1)
|
|
end
|
|
end
|
|
|
|
function this.PlayEffect()
|
|
--Log("击杀小怪!")
|
|
if MapTrialManager.powerValue == -1 or MapTrialManager.powerValue == 0 then
|
|
this.UpdatePowerValue()
|
|
else
|
|
this.fire:SetActive(true)
|
|
this.fire:GetComponent("RectTransform").anchoredPosition = MapTrialManager.rolePos
|
|
this.guiji:GetComponent("RectTransform").anchoredPosition = MapTrialManager.rolePos
|
|
local timer = Timer.New(function ()
|
|
this.fire:SetActive(false)
|
|
this.guiji:SetActive(true)
|
|
|
|
-- 设置动画
|
|
this.guiji:GetComponent("RectTransform"):DOAnchorPos(targetPos, 0.5, false):OnComplete(function ()
|
|
--Log("轨迹完成")
|
|
this.chufa:SetActive(true)
|
|
this.guiji:SetActive(false)
|
|
end)
|
|
end, 0.3):Start()
|
|
|
|
Timer.New(function ()
|
|
this.UpdatePowerValue()
|
|
this.InitEffect()
|
|
end, 1):Start()
|
|
end
|
|
end
|
|
|
|
|
|
function this.OnPowerValueChange()
|
|
if CarbonManager.difficulty ~= 2 then return end
|
|
-- 先放特效在更新数值
|
|
this.PlayEffect()
|
|
end
|
|
|
|
function this.OnSortingOrderChange()
|
|
Util.AddParticleSortLayer(this.chufa, MapPanel.sortingOrder - orginLayer)
|
|
orginLayer = MapPanel.sortingOrder
|
|
|
|
end
|
|
|
|
function this.InitBossInfo()
|
|
if powerValue >= 100 then
|
|
UIManager.OpenPanel(UIName.TrialOpPanel, 1)
|
|
-- 停止自动寻路
|
|
ctrlView.OnRoleDead()
|
|
|
|
end
|
|
end
|
|
|
|
|
|
-- 初始化部buff显示
|
|
function this.InitBuffInfo()
|
|
if CarbonManager.difficulty ~= 2 then return end
|
|
-- 补给点数量显示
|
|
local num = 0
|
|
local buffList = MapTrialManager.GetBuffList()
|
|
if buffList then
|
|
num = #buffList
|
|
end
|
|
this.buffNum.text = num
|
|
end
|
|
-- 初始化部商店显示
|
|
function this.InitShopInfo()
|
|
-- 刷新一遍商店数据
|
|
ShopManager.RequestAllShopData(function()
|
|
local shopData = ShopManager.GetShopDataByType(SHOP_TYPE.TRIAL_SHOP)
|
|
if not shopData or #shopData.storeItem <= 0 then
|
|
this.shopNum.text = "0"
|
|
return
|
|
end
|
|
-- 获取可购买的商品数量
|
|
local itemNum = 0
|
|
for _, item in ipairs(shopData.storeItem) do
|
|
local limitCount = ShopManager.GetShopItemLimitBuyCount(item.id)
|
|
if limitCount == -1 or limitCount - item.buyNum > 0 then
|
|
itemNum = itemNum + 1
|
|
end
|
|
end
|
|
this.shopNum.text = itemNum
|
|
end)
|
|
end
|
|
|
|
-- 试炼副本任务初始化
|
|
function this.InitTrialMission()
|
|
this.leftLifeRoot:SetActive(istrialMap)
|
|
this.powerRoot:SetActive(istrialMap)
|
|
local imgDone = Util.GetGameObject(this.targetRoot, "imgDone")
|
|
local imgDoing = Util.GetGameObject(this.targetRoot, "imgDoing")
|
|
imgDone:SetActive(false)
|
|
imgDoing:SetActive(false)
|
|
this.SetTargetState()
|
|
this.mapTime.text = "00:00"
|
|
|
|
end
|
|
|
|
-- 刷新临时背包数据
|
|
function this.OnTempBagChanged()
|
|
if CarbonManager.difficulty == 2 then
|
|
this.RefreshBombNum()
|
|
end
|
|
end
|
|
|
|
-- 刷新砸炸弹数量
|
|
function this.RefreshBombNum()
|
|
-- 试炼副本才执行
|
|
bombNum = 0
|
|
if CarbonManager.difficulty ~= CARBON_TYPE.TRIAL then return end
|
|
if BagManager.GetTempBagCountById(43) == 0 or not BagManager.GetTempBagCountById(43) then
|
|
bombNum = 0
|
|
else
|
|
bombNum = BagManager.GetTempBagCountById(43)
|
|
end
|
|
this.bombNum.text = bombNum
|
|
|
|
end
|
|
|
|
|
|
-- 设置目标
|
|
function this.SetTargetState(value)
|
|
local showStr = ""
|
|
if value == -1 then
|
|
showStr = "击败地图首领!"
|
|
else
|
|
showStr = "击败所有小怪!"
|
|
end
|
|
this.targetText.text = showStr
|
|
end
|
|
|
|
|
|
-- 试炼副本的初始化
|
|
function this.InitTrial()
|
|
Log("MapManager.isOpen " .. tostring(MapManager.isOpen))
|
|
-- 初始化状态
|
|
this.DragCtrl:SetActive(true)
|
|
MapTrialManager.isChangeLevel = false
|
|
MapTrialManager.canMove = true
|
|
MapManager.isRemoving = false
|
|
MapManager.deadTime = 0
|
|
if not MapManager.isOpen then
|
|
this.TrialMissionStart()
|
|
end
|
|
|
|
end
|
|
|
|
-- 试炼副本进图流程
|
|
function this.TrialMissionStart()
|
|
NetManager.CarbonMissionStartRequest(function(msg)
|
|
Log("服务器返回消息")
|
|
local showStr = "试炼副本" .. MapTrialManager.curTowerLevel .."层"
|
|
UIManager.OpenPanel(UIName.CurlingTipPanel, showStr)
|
|
MapPanel.SetRoleShow(MapManager.mapScale, MapManager.roleInitPos)
|
|
PlayerManager.startTime = PlayerManager.serverTime
|
|
MissionManager.missionTime = 0
|
|
MapManager.isOpen = true
|
|
end)
|
|
end
|
|
|
|
function this.OnMissionTimeChange(time)
|
|
if CarbonManager.difficulty == 2 then this.TrialShowTime(time) end
|
|
end
|
|
|
|
-- 试炼副本显示时间
|
|
function this.TrialShowTime(time)
|
|
if MapTrialManager.IsFinalLevel and MapTrialManager.bossDeadTime ~= 0 then
|
|
time = MapTrialManager.bossDeadTime
|
|
end
|
|
this.mapTime.text = this.FormatTime(time)
|
|
end
|
|
|
|
-- 转换时间
|
|
function this.FormatTime(time)
|
|
local str = ""
|
|
local ten_minute = math.modf(time / 600)
|
|
local minute = math.modf(time / 60) % 10
|
|
local ten_second = math.modf( time / 10) % 6
|
|
local second = time % 10
|
|
str = ten_minute ..minute .. ":" .. ten_second .. second
|
|
return str
|
|
end
|
|
|
|
-- 角色死翘翘
|
|
function this.OnRoleDead()
|
|
if CarbonManager.difficulty ~= 2 then return end
|
|
this.UpdateDeadTimes()
|
|
end
|
|
|
|
--
|
|
function this.UpdateDeadTimes()
|
|
local limitDeadTimes = MapTrialManager.GetRelifeTimes()
|
|
Log("MapManager.deadCount == " .. MapManager.deadCount)
|
|
local leftLife = limitDeadTimes - MapManager.deadCount
|
|
leftLife = leftLife < 0 and 0 or leftLife
|
|
MapTrialManager.leftLife = leftLife
|
|
this.leftLife.text = leftLife
|
|
-- 在试炼副本死亡太多直接出图
|
|
if CarbonManager.difficulty == 2 then
|
|
if MapTrialManager.GetRelifeTimes() - MapManager.deadCount < 0 then -- 次数用完出图
|
|
UIManager.OpenPanel(UIName.MapStatsPanel)
|
|
end
|
|
end
|
|
end
|
|
|
|
--界面关闭时调用(用于子类重写)
|
|
function TrialMapPanel:OnClose()
|
|
|
|
end
|
|
|
|
--界面销毁时调用(用于子类重写)
|
|
function TrialMapPanel:OnDestroy()
|
|
end
|
|
|
|
return TrialMapPanel
|