miduo_client/Assets/ManagedResources/~Lua/Modules/XiaoYao/XiaoYaoMapPanel.lua

421 lines
16 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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