forked from endernon/PGRData
539 lines
18 KiB
Lua
539 lines
18 KiB
Lua
|
local CSXTextManagerGetText = CS.XTextManager.GetText
|
|||
|
local StageState = XDoubleTowersConfigs.StageState
|
|||
|
local CHILD_DETAIL_UI_NAME = "UiDoubleTowersDetail"
|
|||
|
local SPECIAL_DOOR_INDEX = 0
|
|||
|
local UI_DOOR_AMOUNT = 8
|
|||
|
local UI_DOOR_BORDER = 50
|
|||
|
local FOCUS_TIME = 0.5
|
|||
|
|
|||
|
---@class XUiDoubleTowers:XLuaUi
|
|||
|
local XUiDoubleTowers = XLuaUiManager.Register(XLuaUi, "UiDoubleTowers")
|
|||
|
|
|||
|
--region init
|
|||
|
function XUiDoubleTowers:Ctor()
|
|||
|
self._Timer = false
|
|||
|
self._PlaceDoorTimer = false
|
|||
|
self._SelectedGroupIndex = false
|
|||
|
self._FocusGroupIndex = false
|
|||
|
---@type XUiDoubleTowersDoor[]
|
|||
|
self._UiDoor = {}
|
|||
|
self._DragAreaComponent = false
|
|||
|
self._FocusOffset = false
|
|||
|
self._CenterOffset = false
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnStart()
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnAwake()
|
|||
|
self:Init()
|
|||
|
self:InitCoinUi()
|
|||
|
-- 禁止玩家操作
|
|||
|
self:SetDragEnabled(false)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnEnable()
|
|||
|
self:StartTimer()
|
|||
|
self:AddListeners()
|
|||
|
self:CheckSlotRedPoint()
|
|||
|
self:CheckTaskRedPoint()
|
|||
|
for i = 1, #self._UiDoor do
|
|||
|
self._UiDoor[i]:OnEnable()
|
|||
|
end
|
|||
|
-- 屏蔽排行榜红点显示
|
|||
|
self.BtnGradient:ShowReddot(false)
|
|||
|
self:OpenNextStageAfterFight()
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnDisable()
|
|||
|
self:StopTimer()
|
|||
|
self:RemoveListeners()
|
|||
|
|
|||
|
for i = 1, #self._UiDoor do
|
|||
|
self._UiDoor[i]:OnDisable()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 通关后打开下一关
|
|||
|
function XUiDoubleTowers:OpenNextStageAfterFight()
|
|||
|
local justPassedStageId = XDataCenter.DoubleTowersManager.GetJustPassedStage()
|
|||
|
if justPassedStageId then
|
|||
|
local nextStageId = XDataCenter.DoubleTowersManager.GetNextStageId(justPassedStageId)
|
|||
|
if nextStageId and XDataCenter.DoubleTowersManager.IsStageCanChallenge(nextStageId) then
|
|||
|
self:OpenStage(nextStageId)
|
|||
|
else
|
|||
|
-- 找不到下一关,重复打开
|
|||
|
self:OpenStage(justPassedStageId)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:Init()
|
|||
|
self:InitViews()
|
|||
|
self:RegisterButtonClick()
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:AddListeners()
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DOUBLE_TOWERS_OPEN_DETAIL, self.OpenStageDetail, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DOUBLE_TOWERS_FOCUS, self.FocusDoor, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DOUBLE_TOWERS_ON_OPENED_ROOM, self.OnRoomOpened, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DOUBLE_TOWERS_UPDATE_GATHER, self.UpdateGather, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DOUBLE_TOWERS_OPEN_STAGE, self.OpenStage, self)
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_DOUBLE_TOWERS_SLOT_UNLOCK, self.CheckSlotRedPoint, self)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:RemoveListeners()
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DOUBLE_TOWERS_OPEN_DETAIL, self.OpenStageDetail, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DOUBLE_TOWERS_FOCUS, self.FocusDoor, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DOUBLE_TOWERS_ON_OPENED_ROOM, self.OnRoomOpened, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DOUBLE_TOWERS_UPDATE_GATHER, self.UpdateGather, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DOUBLE_TOWERS_OPEN_STAGE, self.OpenStage, self)
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_DOUBLE_TOWERS_SLOT_UNLOCK, self.CheckSlotRedPoint, self)
|
|||
|
end
|
|||
|
--endregion
|
|||
|
|
|||
|
--region click
|
|||
|
function XUiDoubleTowers:RegisterButtonClick()
|
|||
|
-- back and main
|
|||
|
self:BindExitBtns(self.BtnBack, self.BtnMainUi)
|
|||
|
|
|||
|
-- 任务
|
|||
|
self:RegisterClickEvent(self.BtnMileage, self.OnClickTaskBtn)
|
|||
|
-- 排行榜
|
|||
|
self:RegisterClickEvent(self.BtnGradient, self.OnClickRankBtn)
|
|||
|
-- 部署成员
|
|||
|
self:RegisterClickEvent(self.BtnDeploy, self.OnClickDeployBtn)
|
|||
|
-- 收菜
|
|||
|
self:RegisterClickEvent(self.BtnTreasure, self.OnClickGatherBtn)
|
|||
|
-- 图文教学界面
|
|||
|
self:BindHelpBtn(self.BtnHelp, XDataCenter.DoubleTowersManager.GetHelpKey())
|
|||
|
-- 关闭detail界面
|
|||
|
self:RegisterClickEvent(self.BtnCloseDetail, self.OnClickBtnCloseDetail)
|
|||
|
|
|||
|
-- 普通关卡
|
|||
|
for groupIndex = 1, UI_DOOR_AMOUNT do
|
|||
|
local uiDoor = self:GetUiDoor(groupIndex)
|
|||
|
local buttonComponent = uiDoor:GetButtonComponent()
|
|||
|
self:RegisterClickEvent(
|
|||
|
uiDoor:GetButtonComponent(),
|
|||
|
function()
|
|||
|
self:onDoorBtnClick(groupIndex)
|
|||
|
end
|
|||
|
)
|
|||
|
end
|
|||
|
-- 特殊关卡
|
|||
|
local uiDoor = self:GetUiDoor(SPECIAL_DOOR_INDEX)
|
|||
|
self:RegisterClickEvent(
|
|||
|
uiDoor:GetButtonComponent(),
|
|||
|
function()
|
|||
|
self:onSpecialDoorBtnClick()
|
|||
|
end
|
|||
|
)
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:onSpecialDoorBtnClick()
|
|||
|
local stageId = XDataCenter.DoubleTowersManager.GetSpecialStageId()
|
|||
|
if not XDataCenter.DoubleTowersManager.IsStageCanChallenge(stageId) then
|
|||
|
XUiManager.TipErrorWithKey("DoubleTowersAllStageNotClear")
|
|||
|
return
|
|||
|
end
|
|||
|
self:OpenStageDetail(stageId)
|
|||
|
self:SetDoorSelected(SPECIAL_DOOR_INDEX)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_DOUBLE_TOWERS_FOCUS, SPECIAL_DOOR_INDEX)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnClickRankBtn()
|
|||
|
if not XDataCenter.DoubleTowersManager.IsSpecialGroupUnlock() then
|
|||
|
XUiManager.TipErrorWithKey("DoubleTowersLockRank")
|
|||
|
-- return 策划要求可以打开,但伴随提示
|
|||
|
end
|
|||
|
XDataCenter.DoubleTowersManager.RequestDoubleTowerGetRank(
|
|||
|
function()
|
|||
|
XLuaUiManager.Open("UiDoubleTowersRank")
|
|||
|
end
|
|||
|
)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:CheckTaskRedPoint()
|
|||
|
self.BtnMileage:ShowReddot(XDataCenter.TaskManager.GetIsRewardForEx(TaskType.DoubleTower))
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnClickTaskBtn()
|
|||
|
XLuaUiManager.Open(
|
|||
|
"UiFubenTaskReward",
|
|||
|
TaskType.DoubleTower,
|
|||
|
nil,
|
|||
|
function()
|
|||
|
self:CheckTaskRedPoint()
|
|||
|
end
|
|||
|
)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnClickDeployBtn()
|
|||
|
XLuaUiManager.Open("UiDoubleTowersDeploy")
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnClickGatherBtn()
|
|||
|
local canGatherCoins = XDataCenter.DoubleTowersManager.GetCanGatherCoins()
|
|||
|
if canGatherCoins <= 0 then
|
|||
|
XUiManager.TipText("DoubleTowersGatherFail")
|
|||
|
return
|
|||
|
end
|
|||
|
-- 请求收菜
|
|||
|
XDataCenter.DoubleTowersManager.RequestGatherCoins()
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnClickBtnCloseDetail()
|
|||
|
self:ClearDoorSelected()
|
|||
|
end
|
|||
|
--endregion
|
|||
|
|
|||
|
--region 收菜 gather
|
|||
|
function XUiDoubleTowers:StartTimer()
|
|||
|
if self._Timer then
|
|||
|
return
|
|||
|
end
|
|||
|
self:UpdateGather()
|
|||
|
self._Timer =
|
|||
|
XScheduleManager.ScheduleForever(
|
|||
|
function()
|
|||
|
self:UpdateGather()
|
|||
|
end,
|
|||
|
XScheduleManager.SECOND
|
|||
|
)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:UpdateGather()
|
|||
|
if not self:UpdateTime() then
|
|||
|
return
|
|||
|
end
|
|||
|
self:UpdateCoin()
|
|||
|
self:CheckRedPoint()
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:StopTimer()
|
|||
|
if not self._Timer then
|
|||
|
return
|
|||
|
end
|
|||
|
XScheduleManager.UnSchedule(self._Timer)
|
|||
|
self._Timer = false
|
|||
|
end
|
|||
|
|
|||
|
-- set coin icon
|
|||
|
function XUiDoubleTowers:InitCoinUi()
|
|||
|
local ImgCoin =
|
|||
|
XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/PanelProgress/PanelTool/RImgTool1", "RawImage")
|
|||
|
local itemId = XDataCenter.DoubleTowersManager.GetCoinItemId()
|
|||
|
local item = XDataCenter.ItemManager.GetItem(itemId)
|
|||
|
ImgCoin:SetRawImage(XDataCenter.ItemManager.GetItemIcon(itemId))
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:UpdateTime()
|
|||
|
local remainTime = XDataCenter.DoubleTowersManager.GetActivityRemainTime()
|
|||
|
if remainTime <= 0 then
|
|||
|
self:Close()
|
|||
|
XUiManager.TipMsg(XUiHelper.GetText("ActivityAlreadyOver"))
|
|||
|
return false
|
|||
|
end
|
|||
|
self.TimeTxt.text = XUiHelper.GetTime(remainTime)
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
-- 收菜时间和币
|
|||
|
function XUiDoubleTowers:UpdateCoin()
|
|||
|
-- 代币
|
|||
|
local canGatherCoins = XDataCenter.DoubleTowersManager.GetCanGatherCoins()
|
|||
|
local maxCoinsAmount = XDataCenter.DoubleTowersManager.GetMaxCoinAmount()
|
|||
|
|
|||
|
local gatherReaminTime, gatherInterval = XDataCenter.DoubleTowersManager.GetGatherRemainTime()
|
|||
|
|
|||
|
-- 时间进度
|
|||
|
self.ImgProgress.fillAmount = (gatherInterval - gatherReaminTime) / gatherInterval
|
|||
|
|
|||
|
-- 收菜时间
|
|||
|
self.GatherTimeTxt.text = XUiHelper.GetTime(gatherReaminTime, XUiHelper.TimeFormatType.DOUBLE_TOWER)
|
|||
|
|
|||
|
if canGatherCoins == maxCoinsAmount then
|
|||
|
self.CoinTxt.text = string.format("<color=#189affFF>%d/%d</color>", canGatherCoins, maxCoinsAmount)
|
|||
|
return
|
|||
|
end
|
|||
|
self.CoinTxt.text = string.format("%d/%d", canGatherCoins, maxCoinsAmount)
|
|||
|
end
|
|||
|
--endregion
|
|||
|
|
|||
|
--region 关卡
|
|||
|
function XUiDoubleTowers:onDoorBtnClick(groupIndex)
|
|||
|
return self:SetDoorSelected(groupIndex)
|
|||
|
end
|
|||
|
-- 折叠 X之门
|
|||
|
function XUiDoubleTowers:FoldDoor(groupIndex)
|
|||
|
if not groupIndex then
|
|||
|
return
|
|||
|
end
|
|||
|
local uiDoor = self:GetUiDoor(groupIndex)
|
|||
|
if uiDoor then
|
|||
|
uiDoor:Fold()
|
|||
|
end
|
|||
|
end
|
|||
|
-- 展开 X之门
|
|||
|
function XUiDoubleTowers:UnfoldDoor(groupIndex)
|
|||
|
if not groupIndex then
|
|||
|
return false
|
|||
|
end
|
|||
|
if not self:CheckGroupOpen(groupIndex) then
|
|||
|
return
|
|||
|
end
|
|||
|
local groupBtn = self:GetUiDoor(groupIndex)
|
|||
|
if groupBtn then
|
|||
|
groupBtn:Unfold()
|
|||
|
-- 只在展开的时候更新
|
|||
|
local groupId = XDataCenter.DoubleTowersManager.GetGroupId(groupIndex)
|
|||
|
groupBtn:UpdateStage(groupId)
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:CheckGroupOpen(groupIndex)
|
|||
|
local groupId = XDataCenter.DoubleTowersManager.GetGroupId(groupIndex)
|
|||
|
local state = XDataCenter.DoubleTowersManager.GetGroupState(groupId)
|
|||
|
|
|||
|
-- 未解锁
|
|||
|
if state == StageState.Lock then
|
|||
|
local reason = XDataCenter.DoubleTowersManager.GetGroupLockReason(groupId)
|
|||
|
if reason == XDoubleTowersConfigs.ReasonOfLockGroup.TimeLimit then
|
|||
|
local groupName = XDoubleTowersConfigs.GetGroupName(groupId)
|
|||
|
XUiManager.TipErrorWithKey("DoubleTowersStageTimeLimit", groupName)
|
|||
|
return false
|
|||
|
end
|
|||
|
if reason == XDoubleTowersConfigs.ReasonOfLockGroup.PreconditionStageNotClear then
|
|||
|
-- tip 请先通过 前置关卡名
|
|||
|
local preconditionStageId = XDoubleTowersConfigs.GetGroupPreconditionStage(groupId)
|
|||
|
if not XDataCenter.DoubleTowersManager.IsStageClear(preconditionStageId) then
|
|||
|
local preconditionStageName = XDoubleTowersConfigs.GetStageName(preconditionStageId)
|
|||
|
XUiManager.TipErrorWithKey("DoubleTowersPreconditionGroupNotClear", preconditionStageName)
|
|||
|
else
|
|||
|
XLog.Debug("[XUiDoubleTowers] other reason to lock group, please fix it")
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
return false
|
|||
|
end
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
-- 可能是普通关卡or特殊关卡
|
|||
|
function XUiDoubleTowers:GetUiDoor(groupIndex)
|
|||
|
local uiDoor = self._UiDoor[groupIndex]
|
|||
|
if not uiDoor then
|
|||
|
if groupIndex == SPECIAL_DOOR_INDEX then
|
|||
|
local uiStage = self.GridMajorTower
|
|||
|
local XUiDoubleTowersSpecialDoor = require("XUi/XUiDoubleTowers/XUiDoubleTowersSpecialDoor")
|
|||
|
uiDoor = XUiDoubleTowersSpecialDoor.New(uiStage)
|
|||
|
else
|
|||
|
local XUiDoubleTowersDoor = require("XUi/XUiDoubleTowers/XUiDoubleTowersDoor")
|
|||
|
local uiStage = self.PanelTower:Find(string.format("Stage%s/GridTower", groupIndex))
|
|||
|
if not uiStage then
|
|||
|
XLog.Warning("[XUiDoubleTowers] 找不到门的ui,门的序号是", groupIndex)
|
|||
|
return false
|
|||
|
end
|
|||
|
uiDoor = XUiDoubleTowersDoor.New(uiStage)
|
|||
|
end
|
|||
|
self._UiDoor[groupIndex] = uiDoor
|
|||
|
end
|
|||
|
return uiDoor
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:InitDoor()
|
|||
|
for groupIndex = 1, UI_DOOR_AMOUNT do
|
|||
|
local uiDoor = self:GetUiDoor(groupIndex)
|
|||
|
if uiDoor then
|
|||
|
local groupId = XDataCenter.DoubleTowersManager.GetGroupId(groupIndex)
|
|||
|
uiDoor:SetGroup(groupId)
|
|||
|
-- 假如美术加了z,强制归0,否则随着每次focus,z值会越来越大
|
|||
|
if uiDoor.Transform.localPosition.z ~= 0 then
|
|||
|
uiDoor.Transform.localPosition =
|
|||
|
Vector3(uiDoor.Transform.localPosition.x, uiDoor.Transform.localPosition.y, 0)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:UpdateSpecialDoor()
|
|||
|
---@type XUiDoubleTowersSpecialDoor
|
|||
|
local uiDoor = self:GetUiDoor(SPECIAL_DOOR_INDEX)
|
|||
|
uiDoor:Refresh()
|
|||
|
end
|
|||
|
|
|||
|
-- 选中关卡
|
|||
|
function XUiDoubleTowers:SetDoorSelected(groupIndex)
|
|||
|
if self._SelectedGroupIndex == groupIndex then
|
|||
|
if groupIndex then
|
|||
|
self:CheckGroupOpen(groupIndex)
|
|||
|
self:SetDoorSelected(false)
|
|||
|
end
|
|||
|
--点击未解锁关卡,重复弹tips
|
|||
|
return false
|
|||
|
end
|
|||
|
-- 特殊关卡ui结构与普通关卡不同,选中时就打开detail,故不关闭
|
|||
|
if groupIndex ~= SPECIAL_DOOR_INDEX then
|
|||
|
self:CloseStageDetail()
|
|||
|
-- local groupId = XDataCenter.DoubleTowersManager.GetGroupId(groupIndex)
|
|||
|
-- 已通关
|
|||
|
-- if XDataCenter.DoubleTowersManager.GetGroupState(groupId) == XDoubleTowersConfigs.StageState.Clear then
|
|||
|
-- XUiManager.TipText("DoubleTowersPassed")
|
|||
|
-- return
|
|||
|
-- end
|
|||
|
end
|
|||
|
self:FoldDoor(self._SelectedGroupIndex)
|
|||
|
self:UnfoldDoor(groupIndex)
|
|||
|
self._SelectedGroupIndex = groupIndex
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:ClearDoorSelected()
|
|||
|
self:SetDoorSelected(false)
|
|||
|
self:CloseStageDetail()
|
|||
|
end
|
|||
|
--endregion
|
|||
|
|
|||
|
--region ui
|
|||
|
function XUiDoubleTowers:InitViews()
|
|||
|
self._DragAreaComponent = self.PanelDrag:GetComponentInChildren(typeof(CS.XDragArea))
|
|||
|
XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.DoubleTowersManager.GetCoinItemId())
|
|||
|
self:InitDoor()
|
|||
|
self:UpdateSpecialDoor()
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OpenStageDetail(stageId)
|
|||
|
if not XLuaUiManager.IsUiShow(CHILD_DETAIL_UI_NAME) then
|
|||
|
self:PlayAnimation("UiDisable")
|
|||
|
self:OpenOneChildUi(CHILD_DETAIL_UI_NAME, self)
|
|||
|
end
|
|||
|
self:FindChildUiObj(CHILD_DETAIL_UI_NAME):SetStage(stageId)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:CloseStageDetail()
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_DOUBLE_TOWERS_ON_DETAIL_CLOSED)
|
|||
|
if XLuaUiManager.IsUiShow(CHILD_DETAIL_UI_NAME) then
|
|||
|
self:PlayAnimation("UiEnable")
|
|||
|
self:FindChildUiObj(CHILD_DETAIL_UI_NAME):CloseDetailWithAnimation()
|
|||
|
self:FocusDoor(false)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnRoomOpened()
|
|||
|
-- self:ClearDoorSelected()
|
|||
|
end
|
|||
|
--endregion
|
|||
|
|
|||
|
--region 伪聚焦
|
|||
|
function XUiDoubleTowers:OpenStage(stageId)
|
|||
|
local groupIndex = XDoubleTowersConfigs.GetGroupIdByStageId(stageId)
|
|||
|
local groupId = XDataCenter.DoubleTowersManager.GetGroupId(groupIndex)
|
|||
|
if XDataCenter.DoubleTowersManager.IsSpecialGroup(groupId) then
|
|||
|
self:onSpecialDoorBtnClick()
|
|||
|
else
|
|||
|
self:onDoorBtnClick(groupIndex)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_DOUBLE_TOWERS_FOCUS, groupIndex)
|
|||
|
XEventManager.DispatchEvent(XEventId.EVENT_DOUBLE_TOWERS_OPEN_DETAIL, stageId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 这是虚假的禁止拖拽,利用EndFocus函数,在awake的时候focus一次,但是不end,后续每次focus前end一次
|
|||
|
function XUiDoubleTowers:SetDragEnabled(value)
|
|||
|
if value then
|
|||
|
self._DragAreaComponent:EndFocus()
|
|||
|
else
|
|||
|
self:FocusCenter()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:FocusDoor(groupIndex)
|
|||
|
if groupIndex == self._FocusGroupIndex then
|
|||
|
return
|
|||
|
end
|
|||
|
self._FocusGroupIndex = groupIndex
|
|||
|
|
|||
|
if groupIndex then
|
|||
|
local door = self:GetUiDoor(groupIndex)
|
|||
|
if door then
|
|||
|
if not self._FocusOffset then
|
|||
|
local screen = CS.UnityEngine.Screen
|
|||
|
local leftPos =
|
|||
|
CS.XUiManager.Instance.UiCamera:ScreenToWorldPoint(
|
|||
|
Vector3(screen.width / 4, screen.height / 2, self.Transform.position.z)
|
|||
|
)
|
|||
|
local centerPos =
|
|||
|
CS.XUiManager.Instance.UiCamera:ScreenToWorldPoint(
|
|||
|
Vector3(screen.width / 2, screen.height / 2, self.Transform.position.z)
|
|||
|
)
|
|||
|
local offsetX = leftPos.x - centerPos.x
|
|||
|
self._FocusOffset = Vector3(offsetX, 0, 0)
|
|||
|
end
|
|||
|
self:SetDragEnabled(true)
|
|||
|
self._DragAreaComponent:StartFocus(
|
|||
|
door.Transform.position,
|
|||
|
self._DragAreaComponent.MaxScale,
|
|||
|
FOCUS_TIME,
|
|||
|
self._FocusOffset,
|
|||
|
false
|
|||
|
)
|
|||
|
return
|
|||
|
end
|
|||
|
end
|
|||
|
self:SetDragEnabled(true)
|
|||
|
self:FocusCenter()
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:FocusCenter()
|
|||
|
if not self._CenterOffset then
|
|||
|
-- 保留美术设置的ui偏移
|
|||
|
local screen = CS.UnityEngine.Screen
|
|||
|
local centerPos =
|
|||
|
CS.XUiManager.Instance.UiCamera:ScreenToWorldPoint(
|
|||
|
Vector3(screen.width / 2, screen.height / 2, self.Transform.position.z)
|
|||
|
)
|
|||
|
local stageCenterTransform = self.PanelTower
|
|||
|
local offsetPosition = stageCenterTransform.position
|
|||
|
self._CenterOffset = centerPos - offsetPosition
|
|||
|
end
|
|||
|
|
|||
|
-- 取一个居中transform的位置,也可以是别的
|
|||
|
local stageCenterTransform = self.PanelTower
|
|||
|
local offset = Vector3.zero
|
|||
|
self._DragAreaComponent:StartFocus(
|
|||
|
stageCenterTransform.position + self._CenterOffset,
|
|||
|
self._DragAreaComponent.MinScale,
|
|||
|
FOCUS_TIME,
|
|||
|
offset,
|
|||
|
false
|
|||
|
)
|
|||
|
end
|
|||
|
--endregion
|
|||
|
|
|||
|
--region red point
|
|||
|
function XUiDoubleTowers:CheckRedPoint()
|
|||
|
XRedPointManager.CheckOnce(self.OnCheckRedPoint, self, {XRedPointConditions.Types.CONDITION_DOUBLE_TOWERS})
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnCheckRedPoint(count)
|
|||
|
--有可收集代币时,仅在内部显示红点
|
|||
|
self.ImgRedPoint.gameObject:SetActive(count > 0 or XDataCenter.DoubleTowersManager.GetCanGatherCoins() > 0)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:CheckSlotRedPoint()
|
|||
|
XRedPointManager.CheckOnce(
|
|||
|
self.OnCheckBtnDeployRedPoint,
|
|||
|
self,
|
|||
|
{XRedPointConditions.Types.CONDITION_DOUBLE_TOWERS_SLOT_UNLOCKED}
|
|||
|
)
|
|||
|
end
|
|||
|
|
|||
|
function XUiDoubleTowers:OnCheckBtnDeployRedPoint(count)
|
|||
|
self.BtnDeploy:ShowReddot(count >= 0)
|
|||
|
end
|
|||
|
--endregion
|
|||
|
|
|||
|
return XUiDoubleTowers
|