421 lines
16 KiB
Lua
421 lines
16 KiB
Lua
require("Base/BasePanel")
|
||
XiaoYaoMapPanel = Inherit(BasePanel)
|
||
local this = XiaoYaoMapPanel
|
||
local cursortingOrder
|
||
local mapData={}
|
||
local curGridIndex=1
|
||
local allGridData={}
|
||
local isAuto=false
|
||
local priThread = nil
|
||
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
|
||
local saiNum=1 --骰子数量
|
||
local eventTimer
|
||
local shopLeftTime=0
|
||
local rouleLeftTime=0
|
||
local bossLeftTime=0
|
||
|
||
--初始化组件(用于子类重写)
|
||
function this:InitComponent()
|
||
this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform)
|
||
this.mapName=Util.GetGameObject(self.gameObject,"mapTitle/mapName"):GetComponent("Text")
|
||
this.mapProcess=Util.GetGameObject(self.gameObject,"mapTitle/mapProcess"):GetComponent("Text")
|
||
this.btnBack = Util.GetGameObject(self.gameObject, "btnBack")
|
||
this.shopBtn = Util.GetGameObject(self.gameObject, "btnGrid/shopBtn")
|
||
this.shopTime=Util.GetGameObject(self.gameObject, "btnGrid/shopBtn/time"):GetComponent("Text")
|
||
this.rouleBtn = Util.GetGameObject(self.gameObject, "btnGrid/rouleBtn")
|
||
this.rouleTime=Util.GetGameObject(self.gameObject, "btnGrid/rouleBtn/time"):GetComponent("Text")
|
||
this.bossBtn = Util.GetGameObject(self.gameObject, "btnGrid/bossBtn")
|
||
this.bossTime=Util.GetGameObject(self.gameObject, "btnGrid/bossBtn/time"):GetComponent("Text")
|
||
this.previewBtn=Util.GetGameObject(self.gameObject, "previewBtn")
|
||
this.autoBtn=Util.GetGameObject(self.gameObject, "auto")--自动游历按钮
|
||
this.toggle=Util.GetGameObject(self.gameObject, "auto/toggle")--自动游历开关显示
|
||
this.mapParent=Util.GetGameObject(self.gameObject,"mapParent")
|
||
this.gridParent=Util.GetGameObject(self.gameObject,"mapParent/gridParent")
|
||
this.grid=Util.GetGameObject(self.gameObject,"prefab/grid")
|
||
--this.eventPoint=Util.GetGameObject(self.gameObject,"prefab/eventPoint")
|
||
this.startBtn=Util.GetGameObject(self.gameObject,"startBtn")
|
||
this.TT=Util.GetGameObject(self.gameObject,"mapParent/TT")
|
||
this.mapY=this.mapParent.transform.localPosition.y
|
||
|
||
-- 逍遥点刷新倒计时显示
|
||
this.bgTime = Util.GetGameObject(self.gameObject, "costProp/Bgtime")
|
||
this.actCountTime = Util.GetGameObject(this.bgTime, "time"):GetComponent("Text")
|
||
|
||
this.youliTag = Util.GetGameObject(self.gameObject, "mapParent/TT/youli")
|
||
|
||
end
|
||
|
||
--绑定事件(用于子类重写)
|
||
function this:BindEvent()
|
||
Util.AddClick(this.btnBack, function ()
|
||
XiaoYaoManager.OpenMapList()
|
||
self:ClosePanel()
|
||
end)
|
||
--商店点击
|
||
Util.AddClick(this.shopBtn, function ()
|
||
UIManager.OpenPanel(UIName.XiaoyaoHeroGetPopup)
|
||
end)
|
||
--转盘点击
|
||
Util.AddClick(this.rouleBtn, function ()
|
||
-- local grids={{index=3,gName="ccc"},{index=5,gName="eee"},{index=2,gName="bbb"},{index=4,gName="ddd"}}
|
||
-- table.sort(grids,function(a,b)
|
||
-- return a.index < b.index
|
||
-- end)
|
||
-- for i = 1, #grids do
|
||
-- Log(grids[i].gName)
|
||
-- end
|
||
UIManager.OpenPanel(UIName.XiaoYaoLuckyTurnTablePopup)
|
||
end)
|
||
--boss点击事件
|
||
Util.AddClick(this.bossBtn, function ()
|
||
UIManager.OpenPanel(UIName.XiaoYaoLuckyBossPopup)
|
||
end)
|
||
--奖励预览
|
||
Util.AddClick(this.previewBtn, function ()
|
||
UIManager.OpenPanel(UIName.XiaoYaoRewardPreviewPanel)
|
||
end)
|
||
|
||
--自动游历点击
|
||
Util.AddClick(this.autoBtn, function ()
|
||
if isAuto then
|
||
this.StopAuto()
|
||
else
|
||
isAuto=true
|
||
this.toggle.gameObject:SetActive(true)
|
||
end
|
||
|
||
end)
|
||
--开始游历
|
||
Util.AddClick(this.startBtn,function()
|
||
if curGridIndex>=#allGridData then
|
||
MsgPanel.ShowTwo("已到达终点,是否重新云游!", nil, function()
|
||
XiaoYaoManager.OpenMapList()
|
||
end)
|
||
return
|
||
end
|
||
this.youliTag:SetActive(isAuto)
|
||
XiaoYaoManager.StartXiaoYao()
|
||
end)
|
||
|
||
--开始游历
|
||
Util.AddClick(this.succeedObj,function()
|
||
XiaoYaoManager.OpenMapList()
|
||
end)
|
||
end
|
||
|
||
--添加事件监听(用于子类重写)
|
||
function this:AddListener()
|
||
Game.GlobalEvent:AddEvent(GameEvent.XiaoYao.StartXiaoYao, this.RunMap)
|
||
end
|
||
|
||
--移除事件监听(用于子类重写)
|
||
function this:RemoveListener()
|
||
Game.GlobalEvent:RemoveEvent(GameEvent.XiaoYao.StartXiaoYao, this.RunMap)
|
||
end
|
||
|
||
function this.RunMap(_data)
|
||
Log("开始跑图")
|
||
local targetIndex=0
|
||
for i = 1, #_data.pointes do
|
||
targetIndex=targetIndex+_data.pointes[i]
|
||
end
|
||
targetIndex=targetIndex+curGridIndex
|
||
Log("目标格子索引:"..targetIndex)
|
||
if targetIndex>#allGridData then
|
||
targetIndex=#allGridData
|
||
end
|
||
this.turnEffect:Reset(function()
|
||
curGridIndex=curGridIndex+1
|
||
this.TT.transform:DOAnchorPos(Vector3(allGridData[curGridIndex].x,allGridData[curGridIndex].y,0),0.3)
|
||
this.MapMove(allGridData[curGridIndex].x,0.3)
|
||
if curGridIndex==targetIndex then--如果停到对应位置
|
||
this.turnEffect:Stop()--暂停
|
||
this.mapProcess.text=string.format("%d%%",(curGridIndex/#allGridData*100))
|
||
if allGridData[curGridIndex].eventData then
|
||
this.EventTrigger(_data)
|
||
end
|
||
if curGridIndex>=#allGridData then
|
||
this.StopAuto()
|
||
UIManager.OpenPanel(UIName.XiaoYaoEventPanel,0)
|
||
end
|
||
if isAuto then
|
||
XiaoYaoManager.StartXiaoYao()
|
||
end
|
||
end
|
||
end,0.3,-1,true)
|
||
this.turnEffect:Start()
|
||
end
|
||
--取消自动游历
|
||
function this.StopAuto()
|
||
isAuto=false
|
||
this.youliTag:SetActive(false)
|
||
this.toggle.gameObject:SetActive(false)
|
||
end
|
||
--事件触发处理
|
||
function this.EventTrigger(_data)
|
||
Util.GetGameObject(this.gridParent.transform:GetChild(curGridIndex-1).gameObject,"eventPoint"):SetActive(false)
|
||
Log("触发事件类型为:".._data.pathType)
|
||
Log("触发事件时间为:".._data.overTime)
|
||
if _data.pathType==0 then --普通节点
|
||
LogGreen("普通奖励:"..#_data.drop)
|
||
elseif _data.pathType==1 then --宝箱
|
||
PopupTipPanel.ShowTip("获得一个宝箱!")
|
||
elseif _data.pathType==2 then --双倍节点
|
||
PopupTipPanel.ShowTip("奖励翻倍!")
|
||
elseif _data.pathType==3 then --额外骰子节点
|
||
PopupTipPanel.ShowTip("骰子x2")
|
||
saiNum=2
|
||
elseif _data.pathType==4 then --东海寻仙节点
|
||
this.shopBtn:SetActive(true)
|
||
shopLeftTime=_data.overTime
|
||
UIManager.OpenPanel(UIName.XiaoYaoEventPanel,_data.pathType,allGridData[curGridIndex].eventData)
|
||
elseif _data.pathType==5 then --怪物节点
|
||
this.bossBtn:SetActive(true)
|
||
bossLeftTime=_data.overTime
|
||
UIManager.OpenPanel(UIName.XiaoYaoEventPanel,_data.pathType,allGridData[curGridIndex].eventData)
|
||
elseif _data.pathType==6 then --转盘
|
||
this.rouleBtn:SetActive(true)
|
||
rouleLeftTime=_data.overTime
|
||
UIManager.OpenPanel(UIName.XiaoYaoEventPanel,_data.pathType,allGridData[curGridIndex].eventData)
|
||
end
|
||
if _data.drop.itemlist ~= nil and #_data.drop.itemlist > 0 then
|
||
local content = {}
|
||
for i = 1, #_data.drop.itemlist do
|
||
Log("这是基础奖励")
|
||
local itemdata = {}
|
||
itemdata.configData = itemConfig[_data.drop.itemlist[i].itemId]
|
||
itemdata.name = itemdata.configData.Name
|
||
itemdata.icon = Util.LoadSprite(GetResourcePath(itemdata.configData.ResourceID))
|
||
itemdata.num = _data.drop.itemlist[i].itemNum
|
||
table.insert(content, itemdata)
|
||
end
|
||
PopupText(content, 0.5, 2)
|
||
end
|
||
if priThread then
|
||
coroutine.stop(priThread)
|
||
priThread = nil
|
||
end
|
||
priThread = coroutine.start(function()
|
||
coroutine.wait(1)
|
||
|
||
end)
|
||
end
|
||
--界面打开时调用(用于子类重写)
|
||
function this:OnOpen(_mapData)
|
||
mapData=_mapData
|
||
this.InitShowEvent()
|
||
this.LoadTT()
|
||
--初始化地图
|
||
for i = 1, #mapData.cell do
|
||
local x, y=Map_Pos2UV(mapData.cell[i].cellId)
|
||
allGridData[i]={}
|
||
allGridData[i].x=x*128-64
|
||
allGridData[i].y=-y*128+64
|
||
Log("pointid:"..mapData.cell[i].pointId)
|
||
if mapData.cell[i].pointId>0 then
|
||
allGridData[i].eventData = ConfigManager.GetConfigData(ConfigName.MapPointConfig,mapData.cell[i].pointId)
|
||
if allGridData[i].eventData.Icon==30 then
|
||
allGridData[i].rewardId =mapData.cell[i].rewardId
|
||
end
|
||
end
|
||
end
|
||
Log("当前地图格子数量"..this.gridParent.transform.childCount)
|
||
local dataCount=#allGridData
|
||
local createCount=#allGridData-this.gridParent.transform.childCount
|
||
for i = 1,createCount do
|
||
newObjToParent(this.grid, this.gridParent.transform)
|
||
end
|
||
local gridCount=this.gridParent.transform.childCount
|
||
for i = 1, gridCount do
|
||
local obj=this.gridParent.transform:GetChild(i-1)
|
||
if i<dataCount then
|
||
obj.gameObject:SetActive(true)
|
||
obj.transform:DOAnchorPos(Vector3(allGridData[i].x,allGridData[i].y,0),0)
|
||
local eventObj=Util.GetGameObject(obj.gameObject,"eventPoint")
|
||
if allGridData[i].eventData then
|
||
-- local eventObj= newObjToParent(this.eventPoint,obj)
|
||
-- eventObj:GetComponent("RectTransform").localPosition=Vector2.zero
|
||
eventObj:SetActive(true)
|
||
if allGridData[i].rewardId then
|
||
Log("rewardId:"..allGridData[i].rewardId)
|
||
local rewardData=ConfigManager.GetConfigData(ConfigName.RewardGroup,allGridData[i].rewardId)
|
||
local itemConfig=ConfigManager.GetConfigData(ConfigName.ItemConfig,rewardData.ShowItem[1][1])
|
||
Util.GetGameObject(eventObj,"icon"):GetComponent("Image").sprite=Util.LoadSprite(GetResourcePath(itemConfig.ResourceID))
|
||
Util.GetGameObject(eventObj,"name"):GetComponent("Text").text=itemConfig.Name
|
||
else
|
||
Util.GetGameObject(eventObj,"icon"):GetComponent("Image").sprite=Util.LoadSprite(allGridData[i].eventData.EventPointBg)
|
||
Util.GetGameObject(eventObj,"name"):GetComponent("Text").text=allGridData[i].eventData.Desc
|
||
end
|
||
else
|
||
eventObj:SetActive(false)
|
||
end
|
||
else
|
||
obj.gameObject:SetActive(false)
|
||
end
|
||
end
|
||
curGridIndex=mapData.location
|
||
Log("当前位置索引:"..curGridIndex)
|
||
this.TT.transform:DOAnchorPos(Vector3(allGridData[curGridIndex].x,allGridData[curGridIndex].y,0),0)
|
||
this.TT.transform:SetAsLastSibling()
|
||
this.MapMove(allGridData[curGridIndex].x,0)
|
||
local mapConfig=ConfigManager.GetConfigDataByKey(ConfigName.FreeTravel,"MapID",XiaoYaoManager.curMapId)
|
||
this.mapName.text=mapConfig.FreeTravelName
|
||
this.mapProcess.text=string.format("%d%%",(curGridIndex/#allGridData*100))
|
||
local mapBg = mapConfig.MapImage
|
||
Log("当前地图id:"..XiaoYaoManager.curMapId)
|
||
--实例化地图背景
|
||
for i = 1, #mapBg do
|
||
Log(mapBg[i])
|
||
this.mapParent.transform:GetChild(i-1):GetComponent("Image").sprite=Util.LoadSprite(mapBg[i])
|
||
end
|
||
end
|
||
---加载跑图角色
|
||
function this.LoadTT()
|
||
local mapNpc = "live2d_npc_map"
|
||
local mapNpc2 = "live2d_npc_map_nv"
|
||
npc = NameManager.roleSex == ROLE_SEX.BOY and mapNpc or mapNpc2
|
||
scale = NameManager.roleSex == ROLE_SEX.BOY and Vector3.one * 0.25 or Vector3.one * 0.12
|
||
if not this.liveNode then
|
||
this.liveNode = poolManager:LoadLive(npc, this.TT.transform, scale, Vector3.New(0,-42.4,0))
|
||
end
|
||
local SkeletonGraphic = this.liveNode:GetComponent("SkeletonGraphic")
|
||
if SkeletonGraphic then
|
||
SkeletonGraphic.AnimationState:SetAnimation(0, "move2", true)
|
||
SkeletonGraphic.transform.localEulerAngles = Vector3.New(0, 0, 0)
|
||
end
|
||
end
|
||
--初始化地图事件显示
|
||
function this.InitShowEvent()
|
||
|
||
if mapData.diceNum>1 then --骰子x2
|
||
saiNum=mapData.diceNum
|
||
end
|
||
if XiaoYaoManager.luckyluckyTurnTableTimes > 0 and (XiaoYaoManager.luckyluckyTurnTableRemainTime - PlayerManager.serverTime > 0) then
|
||
this.rouleBtn:SetActive(true)
|
||
else
|
||
this.rouleBtn:SetActive(false)
|
||
end
|
||
local temp = XiaoYaoManager.GetMonsterDatas()
|
||
if temp and #temp > 0 then
|
||
this.bossBtn:SetActive(true)
|
||
else
|
||
this.bossBtn:SetActive(false)
|
||
end
|
||
local temp = XiaoYaoManager.GetHeroDatas()
|
||
if temp and #temp > 0 then
|
||
this.shopBtn:SetActive(true)
|
||
else
|
||
this.shopBtn:SetActive(false)
|
||
end
|
||
shopLeftTime=XiaoYaoManager.GetHeroDataTime()
|
||
rouleLeftTime=XiaoYaoManager.luckyluckyTurnTableRemainTime
|
||
bossLeftTime=XiaoYaoManager.GetMonsterDataReMainTimesAndTime()
|
||
if not eventTimer then
|
||
eventTimer=this.DownTime()
|
||
end
|
||
end
|
||
--控制地图移动
|
||
function this.MapMove(curX,moveTime)
|
||
if curX>2700 and this.mapParent:GetComponent("RectTransform").localPosition.x<=-2200 then
|
||
return
|
||
end
|
||
if curX>540 then
|
||
this.mapParent.transform:DOAnchorPos(Vector3(540-curX,this.mapY,0),moveTime)
|
||
else
|
||
this.mapParent.transform:DOAnchorPos(Vector3(0,this.mapY,0),moveTime)
|
||
end
|
||
end
|
||
|
||
-- 逍遥点是否显示倒计时
|
||
function this.ShowCountTime()
|
||
this.bgTime:SetActive(not EndLessMapManager.EnergyEnough())
|
||
if this.timer then
|
||
this.timer:Stop()
|
||
end
|
||
this.timer = nil
|
||
this.actCountTime.text = ""
|
||
|
||
-- 初始化是判断一次
|
||
if not EndLessMapManager.EnergyEnough() then
|
||
-- 启动倒计时
|
||
this.timer = Timer.New(function ()
|
||
local leftTime = AutoRecoverManager.GetRecoverTime(1)
|
||
if EndLessMapManager.EnergyEnough()then
|
||
-- 回复满了,在地图外面可以停止计时器
|
||
this.timer:Stop()
|
||
this.bgTime:SetActive(false)
|
||
else
|
||
this.actCountTime.text = GetTimeMaoHaoStrBySeconds(math.floor(leftTime))
|
||
end
|
||
end, 1, -1, true)
|
||
this.timer:Start()
|
||
end
|
||
end
|
||
|
||
function this.DownTime()
|
||
local _timer
|
||
_timer = Timer.New(function ()
|
||
local couTime =shopLeftTime- PlayerManager.serverTime
|
||
if couTime<=0 then
|
||
-- 倒计时结束
|
||
this.shopBtn:SetActive(false)
|
||
else
|
||
this.shopTime.text = TimeToHMS(math.floor(couTime))
|
||
end
|
||
|
||
|
||
couTime =rouleLeftTime- PlayerManager.serverTime
|
||
if couTime<=0 then
|
||
-- 倒计时结束
|
||
this.rouleBtn:SetActive(false)
|
||
else
|
||
this.rouleTime.text = TimeToHMS(math.floor(couTime))
|
||
end
|
||
|
||
|
||
couTime =bossLeftTime- PlayerManager.serverTime
|
||
if couTime<=0 then
|
||
-- 倒计时结束
|
||
this.bossBtn:SetActive(false)
|
||
else
|
||
this.bossTime.text = TimeToHMS(math.floor(couTime))
|
||
end
|
||
|
||
end, 1, -1, true)
|
||
_timer:Start()
|
||
return _timer
|
||
end
|
||
|
||
function this:OnShow()
|
||
--显示资源条
|
||
this.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.MonsterCamp })
|
||
this.ShowCountTime()
|
||
if not this.turnEffect then
|
||
this.turnEffect=Timer.New(nil,1,-1,true)
|
||
end
|
||
end
|
||
|
||
function this:OnSortingOrderChange(_cursortingOrder)
|
||
cursortingOrder = _cursortingOrder
|
||
end
|
||
|
||
--界面关闭时调用(用于子类重写)
|
||
function this:OnClose()
|
||
if this.turnEffect then
|
||
this.turnEffect:Stop()
|
||
this.turnEffect=nil
|
||
end
|
||
this.rouleBtn:SetActive(false)
|
||
this.bossBtn:SetActive(false)
|
||
this.shopBtn:SetActive(false)
|
||
this.StopAuto()
|
||
end
|
||
|
||
--界面销毁时调用(用于子类重写)
|
||
function this:OnDestroy()
|
||
if eventTimer then
|
||
eventTimer:Stop()
|
||
eventTimer = nil
|
||
end
|
||
end
|
||
return XiaoYaoMapPanel |