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

293 lines
11 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 curGridIndex=1
local allGridData={}
local isAuto=false
--初始化组件(用于子类重写)
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.rouleBtn = Util.GetGameObject(self.gameObject, "btnGrid/rouleBtn")
this.bossBtn = Util.GetGameObject(self.gameObject, "btnGrid/bossBtn")
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.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)
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].event~=nil then
this.EventTrigger(_data)
end
if curGridIndex>=#allGridData then
this.StopAuto()
MsgPanel.ShowTwo("已到达终点,是否重新云游!", nil, function()
XiaoYaoManager.OpenMapList()
end)
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)
Log("触发事件类型为:".._data.pathType)
if _data.pathType==0 then --普通节点
elseif _data.pathType==1 then --宝箱
PopupTipPanel.ShowTip("获得一个宝箱!")
elseif _data.pathType==2 then --双倍节点
PopupTipPanel.ShowTip("奖励翻倍!")
elseif _data.pathType==3 then --额外骰子节点
PopupTipPanel.ShowTip("骰子x2")
elseif _data.pathType==4 then --招募英雄节点
local temp = XiaoYaoManager.GetHeroDatas()()
if temp and #temp > 0 then
this.shopBtn:SetActive(true)
else
this.shopBtn:SetActive(false)
end
elseif _data.pathType==5 then --怪物节点
local temp = XiaoYaoManager.GetMonsterDatas()
if temp and #temp > 0 then
this.bossBtn:SetActive(true)
else
this.bossBtn:SetActive(false)
end
elseif _data.pathType==6 then --转盘
if XiaoYaoManager.luckyluckyTurnTableRemainTime - PlayerManager.serverTime > 0 then
this.rouleBtn:SetActive(true)
else
this.rouleBtn:SetActive(false)
end
end
if _data.drop.itemlist ~= nil and #_data.drop.itemlist > 0 then
local content = {}
for i = 1, #_data.drop.itemlist do
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
end
--界面打开时调用(用于子类重写)
function this:OnOpen(...)
curGridIndex=XiaoYaoManager.curMapData.location
Log("当前位置索引:"..curGridIndex)
for i = 1, #XiaoYaoManager.curMapData.cell do
local x, y=Map_Pos2UV(XiaoYaoManager.curMapData.cell[i].cellId)
allGridData[i]={}
allGridData[i].x=x*128-64
allGridData[i].y=-y*128+64
if XiaoYaoManager.curMapData.cell[i].pointId>0 then
allGridData[i].event = ConfigManager.GetConfigData(ConfigName.MapPointConfig,XiaoYaoManager.curMapData.cell[i].pointId).Icon
end
end
Log("当前数量"..this.gridParent.transform.childCount)
if this.gridParent.transform.childCount<=0 then
for i = 1, #allGridData do
local obj= newObjToParent(this.grid, this.gridParent.transform)
if allGridData[i].event~=nil then
if not isEffect[allGridData[i].event] then
poolManager:LoadLive(MapFloatingConfig[allGridData[i].event].name, obj.transform,
MapFloatingConfig[allGridData[i].event].scale, MapFloatingConfig[allGridData[i].event].position)
else
self.effectLive=poolManager:LoadAsset(MapFloatingConfig[allGridData[i].event].name, PoolManager.AssetType.GameObject)
self.effectLive.transform:SetParent(obj.transform)
self.effectLive.transform.localScale = MapFloatingConfig[allGridData[i].event].scale
self.effectLive.transform.localPosition = MapFloatingConfig[allGridData[i].event].position
end
end
obj.transform:DOAnchorPos(Vector3(allGridData[i].x,allGridData[i].y,0),0)
end
end
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.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: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
end
--界面销毁时调用(用于子类重写)
function this:OnDestroy()
end
return XiaoYaoMapPanel