1484 lines
No EOL
58 KiB
Lua
1484 lines
No EOL
58 KiB
Lua
local XGoldenMinerGame = require("XUi/XUiGoldenMiner/Game/XGoldenMinerGame")
|
||
local XGoldenMinerGameData = require("XEntity/XGoldenMiner/Game/XGoldenMinerGameData")
|
||
local XGoldenMinerFaceEmojiDataEntity = require("XEntity/XGoldenMiner/Game/XGoldenMinerFaceEmojiDataEntity")
|
||
local XGoldenMinerBuffTipEntity = require("XEntity/XGoldenMiner/Game/XGoldenMinerBuffTipEntity")
|
||
local XGoldenMinerReportInfo = require("XEntity/XGoldenMiner/Settle/XGoldenMinerReportInfo")
|
||
local XGoldenMinerItemChangeInfo = require("XEntity/XGoldenMiner/Settle/XGoldenMinerItemChangeInfo")
|
||
local XGoldenMinerSettlementInfo = require("XEntity/XGoldenMiner/Settle/XGoldenMinerSettlementInfo")
|
||
local XUiItemPanel = require("XUi/XUiGoldenMiner/Panel/XUiItemPanel")
|
||
local XUiBuffPanel = require("XUi/XUiGoldenMiner/Panel/XUiBuffPanel")
|
||
|
||
---@type UnityEngine.Time
|
||
local UnityTime = CS.UnityEngine.Time
|
||
|
||
local TIME_OFFSET = 0.99 --秒,补足倒计时为0时舍弃的0.9几秒
|
||
local GAME_NEAR_END_TIME = XGoldenMinerConfigs.GetGameNearEndTime() --临近结束的时间(单位:秒)
|
||
--玩法倒计时颜色
|
||
local TxtTimeColor = {
|
||
[true] = CS.UnityEngine.Color.white,
|
||
[false] = CS.UnityEngine.Color.red
|
||
}
|
||
local CurAim = {
|
||
None = 0,
|
||
Left = 1 << 0,
|
||
Right = 1 << 1,
|
||
}
|
||
|
||
---黄金矿工3.0玩法界面
|
||
---@class XUiGoldenMinerGameBattle : XLuaUi
|
||
local XUiGoldenMinerGameBattle = XLuaUiManager.Register(XLuaUi, "UiGoldenMinerBattle")
|
||
|
||
function XUiGoldenMinerGameBattle:OnAwake()
|
||
self:AddBtnClickListener()
|
||
self.OnJoystickChanged = function(evt, _)
|
||
if not self.TxtPC then
|
||
return
|
||
end
|
||
self.TipA:SetSprite(XUiGoldenMinerGameBattle:GetTipIcon("A"));
|
||
self.TipB:SetSprite(XUiGoldenMinerGameBattle:GetTipIcon("B"));
|
||
XScheduleManager.ScheduleOnce(function()
|
||
self.TipA:SetNativeSize();
|
||
self.TipB:SetNativeSize();
|
||
end, 0.1)
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnStart()
|
||
self:InitData()
|
||
self:InitObj()
|
||
self:InitUi()
|
||
self:InitAutoCloseTimer()
|
||
|
||
self:GameStart()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnEnable()
|
||
XUiGoldenMinerGameBattle.Super.OnEnable(self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_ACTIVITY_GAME_ESC, self.OnBtnStopClick, self)
|
||
CS.XGameEventManager.Instance:RegisterEvent(CS.XEventId.EVENT_JOYSTICK_ACTIVE_CHANGED, self.OnJoystickChanged);
|
||
self:AddEventListener()
|
||
self:AddPCListener()
|
||
|
||
self:RefreshUi()
|
||
self:StartGamePauseAnim()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnDisable()
|
||
XUiGoldenMinerGameBattle.Super.OnDisable(self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_ACTIVITY_GAME_ESC, self.OnBtnStopClick, self)
|
||
CS.XGameEventManager.Instance:RemoveEvent(CS.XEventId.EVENT_JOYSTICK_ACTIVE_CHANGED, self.OnJoystickChanged);
|
||
self:RemoveEventListener()
|
||
self:RemovePCListener()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnDestroy()
|
||
if self._Game then
|
||
self._Game:Destroy()
|
||
end
|
||
self._Game = nil
|
||
|
||
for _, resource in pairs(self._EffectResourcePool) do
|
||
resource:Release()
|
||
end
|
||
self._EffectObjDir = {}
|
||
end
|
||
|
||
--region Activity - AutoClose
|
||
function XUiGoldenMinerGameBattle:InitAutoCloseTimer()
|
||
self:SetAutoCloseInfo(XDataCenter.GoldenMinerManager.GetActivityEndTime(), function(isClose)
|
||
if isClose then
|
||
XDataCenter.GoldenMinerManager.HandleActivityEndTime()
|
||
return
|
||
end
|
||
end, nil, 0)
|
||
end
|
||
--endregion
|
||
|
||
--region Init - Data
|
||
function XUiGoldenMinerGameBattle:InitData()
|
||
self._DataDb = XDataCenter.GoldenMinerManager.GetGoldenMinerDataDb()
|
||
self._CurStageId, self._CurStageIndex = self._DataDb:GetCurStageId()
|
||
self._MapId = self._DataDb:GetStageMapId(self._CurStageId)
|
||
self._ScoreTarget = self._DataDb:GetCurStageTargetScore()
|
||
self._AddTimeTipPosition = self.TxtAddTimeTip.transform.position
|
||
|
||
--Game
|
||
self._OwnBuffList = XDataCenter.GoldenMinerManager.GetOwnBuffDic()
|
||
self._HookType = self:_SetDataHookType()
|
||
|
||
--Aim
|
||
self._CurAnim = CurAim.None
|
||
|
||
--Settle
|
||
---@type XGoldenMinerSettlementInfo
|
||
self._SettlementInfo = XGoldenMinerSettlementInfo.New()
|
||
---@type XGoldenMinerReportInfo
|
||
self._ReportInfo = XGoldenMinerReportInfo.New()
|
||
self._IsCloseBattle = false
|
||
self._IsFinishSuccess = false
|
||
self._IsOpenHideStage = false
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_SetDataHookType()
|
||
if XTool.IsTableEmpty(self._OwnBuffList) then
|
||
return XGoldenMinerConfigs.FalculaType.Normal
|
||
end
|
||
local type = XGoldenMinerConfigs.FalculaType.Normal
|
||
for buffType, params in pairs(self._OwnBuffList) do
|
||
if buffType == XGoldenMinerConfigs.BuffType.GoldenMinerCordMode then
|
||
return params[1]
|
||
elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerRoleHook then
|
||
type = params[1]
|
||
end
|
||
end
|
||
return type
|
||
end
|
||
--endregion
|
||
|
||
--region Init - Obj
|
||
function XUiGoldenMinerGameBattle:InitObj()
|
||
--Game
|
||
---@type XGoldenMinerGame
|
||
self._Game = XGoldenMinerGame.New()
|
||
self._GameTimer = nil
|
||
|
||
--Pause
|
||
self._GamePauseAnimTimer = nil
|
||
self._GamePauseTimeAnimTimer = nil
|
||
|
||
--Hook
|
||
---@type UnityEngine.Transform[]
|
||
self.HookObjDir = {
|
||
[XGoldenMinerConfigs.FalculaType.Normal] = self.NormalRope,
|
||
[XGoldenMinerConfigs.FalculaType.Magnetic] = self.MagneticRope,
|
||
[XGoldenMinerConfigs.FalculaType.Big] = self.BigRope,
|
||
[XGoldenMinerConfigs.FalculaType.AimingAngle] = self.AimHook,
|
||
[XGoldenMinerConfigs.FalculaType.StorePressMagnetic] = self.MagneticRope,
|
||
[XGoldenMinerConfigs.FalculaType.Double] = self.DoubleHook2,
|
||
}
|
||
---@type UnityEngine.Collider2D[]
|
||
self.HookColliderDir = {
|
||
[XGoldenMinerConfigs.FalculaType.Normal] = self.NormalCordCollider,
|
||
[XGoldenMinerConfigs.FalculaType.Magnetic] = self.MagneticRopeCordCollider,
|
||
[XGoldenMinerConfigs.FalculaType.Big] = self.BigRopeCordLeftCollider,
|
||
[XGoldenMinerConfigs.FalculaType.AimingAngle] = self.NormalCordCollider,
|
||
[XGoldenMinerConfigs.FalculaType.StorePressMagnetic] = self.MagneticRopeCordCollider,
|
||
[XGoldenMinerConfigs.FalculaType.Double] = self.BigRopeCordLeftCollider,
|
||
}
|
||
for type, obj in pairs(self.HookObjDir) do
|
||
obj.gameObject:SetActiveEx(false)
|
||
self.HookColliderDir[type].gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
--Effect
|
||
self._EffectLayer = XUiHelper.TryGetComponent(self.EffectFull, "", "XUiEffectLayer")
|
||
self._EffectRoot = XUiHelper.Instantiate(self.EffectFull.gameObject, self.EffectFull.transform.parent)
|
||
self._EffectResourcePool = {}
|
||
self._EffectObjDir = {}
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Refresh
|
||
function XUiGoldenMinerGameBattle:InitUi()
|
||
self:InitScore()
|
||
self:InitPlayTime()
|
||
self:InitHideTask()
|
||
self:InitItem()
|
||
self:InitBuff()
|
||
self:InitFaceEmoji()
|
||
self:InitPauseGuideUi()
|
||
self:InitBtn()
|
||
self:InitMouseTip()
|
||
self:InitShip()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshUi()
|
||
self:RefreshItem()
|
||
self:RefreshBuff()
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Score
|
||
function XUiGoldenMinerGameBattle:InitScore()
|
||
self:_SetCurScore(self._DataDb:GetStageScores())
|
||
self.TargetScore.text = XUiHelper.GetText("GoldenMinerPlayTargetScore", self._ScoreTarget)
|
||
self.TxtNumber.text = XUiHelper.GetText("GoldenMinerCurStage", self._CurStageIndex)
|
||
if self.PanelCurScoreChange then
|
||
self.PanelCurScoreChange.gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshScore()
|
||
if XTool.IsNumberValid(self._Game:GetChangeScore()) then
|
||
self:_PlayScoreChange()
|
||
else
|
||
self:_SetCurScore(self._Game:GetCurScore())
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_SetCurScore(score)
|
||
if XTool.UObjIsNil(self.CurScore) then
|
||
return
|
||
end
|
||
self.CurScore.text = XUiHelper.GetText("GoldenMinerPlayCurScoreRichTxt",
|
||
XGoldenMinerConfigs.GetGameScoreColorCode(score >= self._ScoreTarget),
|
||
score)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_PlayScoreChange()
|
||
local changeScore = self._Game:GetChangeScore()
|
||
local oldScore = self._Game:GetOldScore()
|
||
local curScore = self._Game:GetCurScore()
|
||
if self._PlayScoreChangeTimer then
|
||
XScheduleManager.UnSchedule(self._PlayScoreChangeTimer)
|
||
end
|
||
|
||
self._PlayScoreChangeTimer = XUiHelper.Tween(1, function(f)
|
||
self:_SetCurScore(math.floor(oldScore + changeScore * f))
|
||
end, function()
|
||
self:_SetCurScore(curScore)
|
||
end)
|
||
if self.TxtCurScoreChange then
|
||
self.TxtCurScoreChange.text = "+" .. changeScore
|
||
end
|
||
if self.PanelCurScoreChange then
|
||
self.PanelCurScoreChange.gameObject:SetActiveEx(true)
|
||
self:PlayAnimation("BubbleEnable")
|
||
end
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - PlayTime
|
||
function XUiGoldenMinerGameBattle:InitPlayTime()
|
||
local time = XGoldenMinerConfigs.GetMapTime(self._MapId) + TIME_OFFSET
|
||
self.TxtTime.text = XUiHelper.GetTime(time, XUiHelper.TimeFormatType.ESCAPE_REMAIN_TIME)
|
||
self.TxtTime.color = TxtTimeColor[true]
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshPlayTime()
|
||
self:_SetTxtTime(self._Game:GetData():GetTime())
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:AddPlayTime(addTime)
|
||
self:_SetTxtTime(self._Game:GetData():GetTime())
|
||
self:_PlayAddPlayTime(addTime)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_PlayAddPlayTime(addTime)
|
||
self.TxtAddTimeTip.transform.position = self._AddTimeTipPosition
|
||
self.TxtAddTimeTip.gameObject:SetActive(true)
|
||
self.TxtAddTimeTip.text = "+" .. addTime
|
||
local endY = self.TxtAddTimeTip.transform.localPosition.y + XGoldenMinerConfigs.GetTipAnimMoveLength()
|
||
local time = XGoldenMinerConfigs.GetTipAnimTime() / XScheduleManager.SECOND
|
||
self.TxtAddTimeTip.transform:DOLocalMoveY(endY, time)
|
||
XScheduleManager.ScheduleOnce(function()
|
||
if XTool.UObjIsNil(self.GameObject) then
|
||
return
|
||
end
|
||
self.TxtAddTimeTip.gameObject:SetActive(false)
|
||
end, XGoldenMinerConfigs.GetTipAnimTime())
|
||
end
|
||
|
||
local _IsNearEnd
|
||
local _IsPlayTimeEnable
|
||
function XUiGoldenMinerGameBattle:_SetTxtTime(time)
|
||
if not XTool.IsNumberValid(self._CurNearEndTime) then
|
||
self._CurNearEndTime = time - 1
|
||
end
|
||
|
||
_IsPlayTimeEnable = time - self._CurNearEndTime < 0
|
||
_IsNearEnd = time <= GAME_NEAR_END_TIME
|
||
|
||
--临近结束时间后,每隔1秒播放一次动画
|
||
if _IsNearEnd and _IsPlayTimeEnable then
|
||
self._CurNearEndTime = time - 1
|
||
self:PlayAnimation("TimeEnable")
|
||
end
|
||
|
||
self.TxtTime.text = XUiHelper.GetTime(time, XUiHelper.TimeFormatType.ESCAPE_REMAIN_TIME)
|
||
self.TxtTime.color = TxtTimeColor[not _IsNearEnd]
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - HideTask
|
||
function XUiGoldenMinerGameBattle:InitHideTask()
|
||
if not self.Task then
|
||
return
|
||
end
|
||
self.Task.gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
---@param hideTaskInfo XGoldenMinerHideTaskInfo
|
||
function XUiGoldenMinerGameBattle:HideTaskFinish(hideTaskInfo)
|
||
if not self.Task then
|
||
return
|
||
end
|
||
local progress = hideTaskInfo:IsFinish() and XUiHelper.GetText("GoldenMinerHideTaskComplete") or hideTaskInfo:GetTxtShowProgress()
|
||
self.Task.gameObject:SetActiveEx(true)
|
||
self.Task.text = XUiHelper.GetText("GoldenMinerHideTaskShowTxt", XGoldenMinerConfigs.GetHideTaskDesc(hideTaskInfo:GetId()), progress)
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Item
|
||
function XUiGoldenMinerGameBattle:InitItem()
|
||
---@type XUiGoldenMinerItemPanel
|
||
self.ItemPanel = XUiItemPanel.New(self.PanelSkillParent, true)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshItem()
|
||
self.ItemPanel:UpdateItemColumns()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:AddItem(itemId)
|
||
if not XTool.IsNumberValid(itemId) then
|
||
return
|
||
end
|
||
local itemColumnIndex = self._DataDb:GetEmptyItemIndex()
|
||
if not itemColumnIndex then
|
||
return
|
||
end
|
||
|
||
self._DataDb:UpdateItemColumn(itemId, itemColumnIndex)
|
||
self:UpdateItemChangeInfo(itemColumnIndex, XGoldenMinerConfigs.ItemChangeType.OnGet)
|
||
self:RefreshItem()
|
||
self:_PlayAddItem(itemId)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:UpdateItemChangeInfo(itemGridIndex, status)
|
||
local itemChangeInfo = XGoldenMinerItemChangeInfo.New()
|
||
local itemDb = self._DataDb:GetItemColumnByIndex(itemGridIndex)
|
||
itemChangeInfo:UpdateData({
|
||
ItemId = itemDb:GetClientItemId(),
|
||
Status = status,
|
||
GridIndex = itemGridIndex
|
||
})
|
||
self._SettlementInfo:InsertSettlementItem(itemChangeInfo)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_PlayAddItem(itemId)
|
||
self.TxtAddItemTip.gameObject:SetActive(true)
|
||
self.TxtAddItemTip.text = "+1"
|
||
self.TxtAddItemTip.transform.position = self.Humen.transform.position
|
||
self.RImgAddItemIcon:SetRawImage(XGoldenMinerConfigs.GetItemIcon(itemId))
|
||
local endY = self.TxtAddItemTip.transform.localPosition.y + XGoldenMinerConfigs.GetTipAnimMoveLength()
|
||
local time = XGoldenMinerConfigs.GetTipAnimTime() / XScheduleManager.SECOND
|
||
self.TxtAddItemTip.transform:DOLocalMoveY(endY, time)
|
||
XScheduleManager.ScheduleOnce(function()
|
||
if XTool.UObjIsNil(self.GameObject) then
|
||
return
|
||
end
|
||
self.TxtAddItemTip.gameObject:SetActive(false)
|
||
end, XGoldenMinerConfigs.GetTipAnimTime())
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Buff
|
||
function XUiGoldenMinerGameBattle:InitBuff()
|
||
---@type XUiGoldenMinerBuffPanel
|
||
self.BuffPanel = XUiBuffPanel.New(self.PanelBuffParent, self)
|
||
|
||
---@type XGoldenMinerBuffTipEntity[]
|
||
self._NeedTipBuffDir = {}
|
||
---@type XGoldenMinerBuffTipEntity
|
||
self._CurBuffEntity = false
|
||
|
||
---@type UnityEngine.Transform
|
||
self.BuffBubble = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/Bubble")
|
||
---@type UnityEngine.Transform
|
||
self.TxtBuffTip = XUiHelper.TryGetComponent(self.Transform, "SafeAreaContentPane/Bubble/Txt3", "Text")
|
||
if self.BuffBubble then
|
||
self.BuffBubble.gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshBuff()
|
||
self.BuffPanel:UpdateBuff(XDataCenter.GoldenMinerManager.GetOwnBuffIdList())
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:AddBuffTip(itemId)
|
||
if XGoldenMinerConfigs.GetItemTipsType(itemId) == XGoldenMinerConfigs.BuffTipType.None then
|
||
return
|
||
end
|
||
if XTool.IsTableEmpty(self._NeedTipBuffDir) then
|
||
---@type XGoldenMinerBuffTipEntity
|
||
self._NeedTipBuffDir[#self._NeedTipBuffDir + 1] = XGoldenMinerBuffTipEntity.New(itemId)
|
||
else
|
||
local isHave = false
|
||
for _, buffTipEntity in ipairs(self._NeedTipBuffDir) do
|
||
if buffTipEntity.ItemId == itemId then
|
||
buffTipEntity:ResetStatus()
|
||
isHave = true
|
||
end
|
||
end
|
||
if not isHave then
|
||
self._NeedTipBuffDir[#self._NeedTipBuffDir + 1] = XGoldenMinerBuffTipEntity.New(itemId)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshBuffTip(time)
|
||
if XTool.IsTableEmpty(self._NeedTipBuffDir) or not self.BuffBubble then
|
||
return
|
||
end
|
||
self:_UpdateBuffTipEntity(time)
|
||
self:_UpdateBuffTip()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_UpdateBuffTipEntity(time)
|
||
local BuffList = self._Game:GetBuffDir()
|
||
local isDelete = false
|
||
|
||
for _, buffTipEntity in ipairs(self._NeedTipBuffDir) do
|
||
if buffTipEntity:GetTipType() == XGoldenMinerConfigs.BuffTipType.UntilDie then
|
||
for _, buff in ipairs(BuffList[buffTipEntity:GetBuffType()]) do
|
||
if buffTipEntity:GetBuffId() == buff.Id then
|
||
buffTipEntity.ShowParam = buff.CurTimeTypeParam
|
||
buffTipEntity.IsDie = buff.Status > XGoldenMinerConfigs.GAME_BUFF_STATUS.ALIVE
|
||
isDelete = buff.Status > XGoldenMinerConfigs.GAME_BUFF_STATUS.ALIVE
|
||
end
|
||
end
|
||
elseif buffTipEntity:GetTipType() == XGoldenMinerConfigs.BuffTipType.Once then
|
||
buffTipEntity.CurTime = buffTipEntity.CurTime - time
|
||
if buffTipEntity.CurTime <= 0 then
|
||
buffTipEntity.IsDie = true
|
||
isDelete = true
|
||
end
|
||
end
|
||
end
|
||
|
||
if isDelete then
|
||
local newBuffTipEntity = {}
|
||
for _, buffTipEntity in ipairs(self._NeedTipBuffDir) do
|
||
if not buffTipEntity.IsDie then
|
||
newBuffTipEntity[#newBuffTipEntity + 1] = buffTipEntity
|
||
end
|
||
end
|
||
self._NeedTipBuffDir = nil
|
||
self._NeedTipBuffDir = newBuffTipEntity
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_UpdateBuffTip()
|
||
if XTool.IsTableEmpty(self._NeedTipBuffDir) then
|
||
self:_StopBuffTip()
|
||
return
|
||
end
|
||
if self._CurBuffEntity then
|
||
if self._CurBuffEntity ~= self._NeedTipBuffDir[#self._NeedTipBuffDir] or
|
||
self._CurBuffEntity:GetTipType() == XGoldenMinerConfigs.BuffTipType.UntilDie then
|
||
self:_PlayBuffTip()
|
||
end
|
||
else
|
||
self:_PlayBuffTip()
|
||
end
|
||
self:_PlayBuffTip()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_PlayBuffTip()
|
||
self._CurBuffEntity = self._NeedTipBuffDir[#self._NeedTipBuffDir]
|
||
if self.BuffBubble then
|
||
self.BuffBubble.gameObject:SetActiveEx(true)
|
||
self.TxtBuffTip.text = self._CurBuffEntity:GetBuffTipTxt()
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_StopBuffTip()
|
||
self._CurBuffEntity = false
|
||
if self.BuffBubble then
|
||
self.BuffBubble.gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - FaceEmoji
|
||
function XUiGoldenMinerGameBattle:InitFaceEmoji()
|
||
self:PlayAnimation("PanelEmoticonDisable")
|
||
---@type XGoldenMinerFaceEmojiDataEntity
|
||
self.FaceEmojiDataEntity = XGoldenMinerFaceEmojiDataEntity.New()
|
||
self:SetFaceEmojiEntityStatus(XGoldenMinerConfigs.GAME_FACE_PLAY_STATUS.NONE)
|
||
self.FaceEmojiDataEntity.PlayDuration = XGoldenMinerConfigs.GetFaceEmojiShowTime()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:SetFaceEmojiEntityStatus(status)
|
||
self.FaceEmojiDataEntity.BeStatusFaceId = false
|
||
self.FaceEmojiDataEntity.Status = status
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshFaceEmoji(time)
|
||
-- 动画播放中跳过
|
||
if self.FaceEmojiDataEntity.IsAim then
|
||
return
|
||
end
|
||
local bePlayFaceId = self.FaceEmojiDataEntity.CurPlayQueue:Peek()
|
||
-- 优先播放普通表情
|
||
if bePlayFaceId then
|
||
-- 播放
|
||
if not self.FaceEmojiDataEntity.CurFaceId then
|
||
self:PlayFaceAnim(bePlayFaceId)
|
||
return
|
||
end
|
||
if self.FaceEmojiDataEntity.CurFaceId ~= bePlayFaceId then
|
||
self:StopFaceAnim()
|
||
return
|
||
end
|
||
-- 持续
|
||
if self.FaceEmojiDataEntity.CurPlayDuration > 0 then
|
||
self.FaceEmojiDataEntity.CurPlayDuration = self.FaceEmojiDataEntity.CurPlayDuration - time
|
||
-- 结束
|
||
if self.FaceEmojiDataEntity.CurPlayDuration <= 0 then
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Dequeue()
|
||
self:StopFaceAnim()
|
||
end
|
||
end
|
||
return
|
||
end
|
||
|
||
-- 播放状态表情
|
||
-- 切换
|
||
if self.FaceEmojiDataEntity.StatusFaceId ~= self.FaceEmojiDataEntity.BeStatusFaceId then
|
||
self.FaceEmojiDataEntity.StatusFaceId = self.FaceEmojiDataEntity.BeStatusFaceId
|
||
end
|
||
if self.FaceEmojiDataEntity.CurFaceId and self.FaceEmojiDataEntity.StatusFaceId ~= self.FaceEmojiDataEntity.CurFaceId
|
||
or not self.FaceEmojiDataEntity.StatusFaceId and self.FaceEmojiDataEntity.CurFaceId
|
||
then
|
||
-- 结束状态表情
|
||
self:StopFaceAnim()
|
||
elseif not self.FaceEmojiDataEntity.CurFaceId then
|
||
-- 播放状态表情
|
||
self:PlayFaceAnim(self.FaceEmojiDataEntity.StatusFaceId)
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:PlayFaceAnim(faceId)
|
||
if not XTool.IsNumberValid(faceId) then
|
||
return
|
||
end
|
||
|
||
self.PanelEmoticon.gameObject:SetActiveEx(true)
|
||
self.FaceEmojiDataEntity.CurFaceId = faceId
|
||
self.FaceEmojiDataEntity.CurPlayDuration = self.FaceEmojiDataEntity.PlayDuration
|
||
self.FaceEmojiDataEntity.IsAim = true
|
||
|
||
local img = XGoldenMinerConfigs.GetFaceImage(faceId)
|
||
if not XTool.UObjIsNil(self.RImgHate) then
|
||
self.RImgHate:SetRawImage(img)
|
||
end
|
||
self:PlayAnimation("PanelEmoticonEnable", function()
|
||
self.FaceEmojiDataEntity.IsAim = false
|
||
end)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:StopFaceAnim()
|
||
self.FaceEmojiDataEntity.CurFaceId = false
|
||
self.FaceEmojiDataEntity.IsAim = true
|
||
self:PlayAnimation("PanelEmoticonDisable", function()
|
||
self.FaceEmojiDataEntity.IsAim = false
|
||
end)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:CheckHasFace()
|
||
return false
|
||
end
|
||
|
||
---@param type number XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE
|
||
function XUiGoldenMinerGameBattle:PlayFaceEmoji(type, faceId)
|
||
if not XTool.IsNumberValid(faceId) then
|
||
return
|
||
end
|
||
|
||
if type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.NONE then
|
||
self:SetFaceEmojiEntityStatus(XGoldenMinerConfigs.GAME_FACE_PLAY_STATUS.NONE)
|
||
elseif type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.SHOOTING then
|
||
self:SetFaceEmojiEntityStatus(XGoldenMinerConfigs.GAME_FACE_PLAY_STATUS.SHOOTING)
|
||
|
||
self.FaceEmojiDataEntity.BeStatusFaceId = faceId
|
||
elseif type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.GRAB_STONE
|
||
or type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.GRAB_NONE
|
||
then
|
||
self:SetFaceEmojiEntityStatus(XGoldenMinerConfigs.GAME_FACE_PLAY_STATUS.NONE)
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(faceId)
|
||
elseif type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.REVOKING then
|
||
self:SetFaceEmojiEntityStatus(XGoldenMinerConfigs.GAME_FACE_PLAY_STATUS.REVOKING)
|
||
|
||
local stoneEntityList = self._Game:GetHookGrabEntity(nil, XGoldenMinerConfigs.GAME_GRAB_OBJ_STATUS.GRABBING)
|
||
if XTool.IsTableEmpty(stoneEntityList) then
|
||
return
|
||
end
|
||
-- 拉回根据重量
|
||
faceId = self:_GetFaceIdByGroupIdByWeight(faceId, XGoldenMinerConfigs.GAME_GRAB_OBJ_STATUS.GRABBING)
|
||
self.FaceEmojiDataEntity.BeStatusFaceId = faceId
|
||
elseif type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.GRABBED then
|
||
self:SetFaceEmojiEntityStatus(XGoldenMinerConfigs.GAME_FACE_PLAY_STATUS.NONE)
|
||
|
||
-- 当抓取物为1时,抓到特殊物品时
|
||
local stoneEntityList = self._Game:GetHookGrabEntity(nil, XGoldenMinerConfigs.GAME_GRAB_OBJ_STATUS.GRABBED)
|
||
if #stoneEntityList == 1 then
|
||
for _, stoneEntity in pairs(stoneEntityList) do
|
||
local stoneGrabFaceId = XGoldenMinerConfigs.GetStoneTypeGrabFaceId(stoneEntity.Data:GetType())
|
||
if XTool.IsNumberValid(stoneGrabFaceId) then
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(stoneGrabFaceId)
|
||
return
|
||
end
|
||
end
|
||
end
|
||
-- 非特殊物品和抓取物为复数时
|
||
faceId = self:_GetFaceIdByGroupIdByScore(faceId, XGoldenMinerConfigs.GAME_GRAB_OBJ_STATUS.GRABBED)
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(faceId)
|
||
elseif type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.USE_ITEM then
|
||
-- 使用普通道具
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(faceId)
|
||
elseif type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.USE_BY_WEIGHT then
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(faceId)
|
||
local secondFaceId = self:_GetFaceIdByGroupIdByWeight(faceId, XGoldenMinerConfigs.GAME_GRAB_OBJ_STATUS.GRABBING)
|
||
if faceId ~= secondFaceId then
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(secondFaceId)
|
||
end
|
||
elseif type == XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.USE_BY_SCORE then
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(faceId)
|
||
-- 使用需要根据价值区分表情的道具
|
||
local secondFaceId = self:_GetFaceIdByGroupIdByScore(faceId, XGoldenMinerConfigs.GAME_GRAB_OBJ_STATUS.GRABBING)
|
||
if faceId ~= secondFaceId then
|
||
self.FaceEmojiDataEntity.CurPlayQueue:Enqueue(secondFaceId)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:PlayFaceEmojiByUseItem(itemId)
|
||
local buffId = XGoldenMinerConfigs.GetItemBuffId(itemId)
|
||
local type = XGoldenMinerConfigs.GetBuffType(buffId)
|
||
local faceId = XGoldenMinerConfigs.GetItemUseFaceId(itemId)
|
||
if type == XGoldenMinerConfigs.BuffType.GoldenMinerStoneChangeGold
|
||
or type == XGoldenMinerConfigs.BuffType.GoldenMinerBoom
|
||
then
|
||
self:PlayFaceEmoji(XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.USE_BY_SCORE, faceId)
|
||
return
|
||
end
|
||
self:PlayFaceEmoji(XGoldenMinerConfigs.GAME_FACE_PLAY_TYPE.USE_ITEM, faceId)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_GetFaceIdByGroupIdByWeight(faceId, stoneStatus)
|
||
if not XTool.IsNumberValid(faceId) then
|
||
return faceId
|
||
end
|
||
local faceGroupId = XGoldenMinerConfigs.GetFaceGroup(faceId)
|
||
if not XTool.IsNumberValid(faceGroupId) then
|
||
return faceId
|
||
end
|
||
local weight = self._Game:GetHookGrabWeight(stoneStatus)
|
||
return XGoldenMinerConfigs.GetFaceIdByGroup(faceGroupId, weight)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_GetFaceIdByGroupIdByScore(faceId, stoneStatus)
|
||
if not XTool.IsNumberValid(faceId) then
|
||
return faceId
|
||
end
|
||
local faceGroupId = XGoldenMinerConfigs.GetFaceGroup(faceId)
|
||
if not XTool.IsNumberValid(faceGroupId) then
|
||
return faceId
|
||
end
|
||
local score = self._Game:GetHookGrabScore(stoneStatus)
|
||
return XGoldenMinerConfigs.GetFaceIdByGroup(faceGroupId, score)
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Pause Dialog
|
||
function XUiGoldenMinerGameBattle:InitPauseGuideUi()
|
||
local isAimHook = self._HookType == XGoldenMinerConfigs.FalculaType.AimingAngle
|
||
local isPc = XDataCenter.UiPcManager.IsPc()
|
||
if self.PanelGuide then
|
||
self.PanelGuide.gameObject:SetActiveEx(false)
|
||
end
|
||
if self.PanelMP then
|
||
self.PanelMP.gameObject:SetActiveEx(isAimHook and not isPc)
|
||
end
|
||
if self.TxtPC then
|
||
self.TxtPC.gameObject:SetActiveEx(isAimHook and isPc)
|
||
|
||
-- en 2.5特殊调整
|
||
self.TipA = self.TxtPC.transform:Find("Img01"):GetComponent("Image");
|
||
self.TipB = self.TxtPC.transform:Find("Img02"):GetComponent("Image");
|
||
self.OnJoystickChanged();
|
||
end
|
||
if self.TxtGuideShoot then
|
||
self.TxtGuideShoot.text = XGoldenMinerConfigs.GetFalculaButtonTip(self._HookType)
|
||
self.TxtGuideHook.text = XGoldenMinerConfigs.GetFalculaShipTip(self._HookType)
|
||
end
|
||
end
|
||
|
||
-- en 2.5特殊调整
|
||
function XUiGoldenMinerGameBattle:GetTipIcon(direction)
|
||
local keySetType = CS.XInputManager.GetJoystickType()
|
||
local root = "Assets/Product/Texture/Atlas/UiGoldenMiner";
|
||
local pathPrefix;
|
||
if CS.XInputManager.EnableInputJoystick then
|
||
-- 1为XBox 2为Ps
|
||
if keySetType == 1 then
|
||
pathPrefix = "/UiGoldenMinerXbox"
|
||
elseif keySetType == 2 then
|
||
pathPrefix = "/UiGoldenMinerPs"
|
||
end
|
||
else
|
||
pathPrefix = "/UiGoldenMiner"
|
||
end
|
||
return root .. pathPrefix .. direction .. ".png";
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:StartGamePauseAnim()
|
||
self:StopGamePauseAnim()
|
||
local time = XGoldenMinerConfigs.GetGameStopCountdown()
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GOLDEN_MINER_GAME_PAUSE, XGoldenMinerConfigs.GAME_PAUSE_TYPE.AUTO)
|
||
self._GamePauseAnimTimer = XScheduleManager.ScheduleForeverEx(function()
|
||
if XTool.UObjIsNil(self.GameObject) then return end
|
||
if time <= 0 then
|
||
self.PanelGuide.gameObject:SetActiveEx(false)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GOLDEN_MINER_GAME_RESUME, XGoldenMinerConfigs.GAME_PAUSE_TYPE.AUTO)
|
||
self:StopGamePauseAnim()
|
||
return
|
||
end
|
||
|
||
self.TxtCountdown.text = string.format("%02d", time)
|
||
self.PanelGuide.gameObject:SetActiveEx(true)
|
||
time = time - 1
|
||
end, XScheduleManager.SECOND)
|
||
if not self.ImgBg then
|
||
return
|
||
end
|
||
local pauseTime = XGoldenMinerConfigs.GetGameStopCountdown()
|
||
self._GamePauseTimeAnimTimer = XScheduleManager.ScheduleForeverEx(function()
|
||
if XTool.UObjIsNil(self.GameObject) then return end
|
||
pauseTime = pauseTime - UnityTime.deltaTime
|
||
self.ImgBg.fillAmount = pauseTime / XGoldenMinerConfigs.GetGameStopCountdown()
|
||
end, 0)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:StopGamePauseAnim()
|
||
if self._GamePauseAnimTimer then
|
||
XScheduleManager.UnSchedule(self._GamePauseAnimTimer)
|
||
end
|
||
self._GamePauseAnimTimer = nil
|
||
if self._GamePauseTimeAnimTimer then
|
||
XScheduleManager.UnSchedule(self._GamePauseTimeAnimTimer)
|
||
end
|
||
self._GamePauseTimeAnimTimer = nil
|
||
end
|
||
|
||
---关卡暂停
|
||
function XUiGoldenMinerGameBattle:OpenPauseDialog()
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GOLDEN_MINER_GAME_PAUSE, XGoldenMinerConfigs.GAME_PAUSE_TYPE.PLAYER)
|
||
local closeCallback = function()
|
||
self:StartGamePauseAnim()
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GOLDEN_MINER_GAME_RESUME, XGoldenMinerConfigs.GAME_PAUSE_TYPE.PLAYER)
|
||
self.BtnStop:SetButtonState(CS.UiButtonState.Normal)
|
||
end
|
||
local sureCallback = handler(self, self._OnExitStage)
|
||
|
||
self.BtnStop:SetButtonState(CS.UiButtonState.Select)
|
||
if self.ImgBg then
|
||
self.ImgBg.fillAmount = 1
|
||
end
|
||
XLuaUiManager.Open("UiGoldenMinerSuspend", self._DataDb:GetDisplayData(), closeCallback, sureCallback)
|
||
end
|
||
|
||
---放弃关卡
|
||
function XUiGoldenMinerGameBattle:_OnExitStage()
|
||
local SaveGame = function()
|
||
XDataCenter.GoldenMinerManager.RequestGoldenMinerSaveStage(self._CurStageId)
|
||
XDataCenter.GoldenMinerManager.RecordSaveStage(XGoldenMinerConfigs.CLIENT_RECORD_UI.UI_STAGE)
|
||
end
|
||
local SettleGame = function()
|
||
self:UpdateSettlementInfo(true)
|
||
XDataCenter.GoldenMinerManager.RequestGoldenMinerExitGame(self._CurStageId, function()
|
||
XLuaUiManager.PopThenOpen("UiGoldenMinerMain")
|
||
end, self._SettlementInfo, self._Game:GetCurScore(), self._Game:GetData():GetAllScore())
|
||
end
|
||
local ResumeGame = function() self:OpenPauseDialog() end
|
||
XDataCenter.GoldenMinerManager:OpenGiveUpGameDialog(XUiHelper.GetText("GoldenMinerQuickTipsTitle"),
|
||
XUiHelper.GetText("GoldenMinerQuickTipsDesc"),
|
||
ResumeGame,
|
||
SaveGame,
|
||
SettleGame,
|
||
false)
|
||
end
|
||
|
||
---程序暂停
|
||
function XUiGoldenMinerGameBattle:ApplicationPause(isPause)
|
||
if isPause and self._Game:IsRunning() then
|
||
self:OpenPauseDialog()
|
||
end
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Btn
|
||
function XUiGoldenMinerGameBattle:InitBtn()
|
||
-- shoot
|
||
self.BtnShootHandler = self.BtnChange:GetComponent(typeof(CS.XGoInputHandler))
|
||
if XTool.UObjIsNil(self.BtnShootHandler) then
|
||
self.BtnShootHandler = self.BtnChange.gameObject:AddComponent(typeof(CS.XGoInputHandler))
|
||
end
|
||
if self.BtnShootHandler then
|
||
self.BtnShootHandler:AddPointerDownListener(function() self:OnBtnShootPressDown() end)
|
||
self.BtnShootHandler:AddPointerUpListener(function() self:OnBtnShootPressUp() end)
|
||
self.BtnShootHandler:AddFocusExitListener(function() self:OnFocusExit() end)
|
||
end
|
||
-- PcKey
|
||
self.PcBtnShootShow = XUiHelper.TryGetComponent(self.BtnChange.transform, "BtnChangePC", "XUiPcCustomKey")
|
||
if self.PcBtnShootShow then
|
||
self.PcBtnShootShow:SetKey(CS.XOperationType.ActivityGame, XGoldenMinerConfigs.GAME_PC_KEY.Space)
|
||
self.PcBtnShootShow.gameObject:SetActiveEx(XDataCenter.UiPcManager.IsPc())
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshShootBtn()
|
||
local url = XGoldenMinerConfigs.GetBtnShootIconUrl(false)
|
||
if not self._Game or self.BtnChange.RawImageList.Count == 0 or string.IsNilOrEmpty(url) then
|
||
return
|
||
end
|
||
self.BtnChange:SetRawImage(url)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RefreshQteBtn()
|
||
local url = XGoldenMinerConfigs.GetBtnShootIconUrl(true)
|
||
if not self._Game or self.BtnChange.RawImageList.Count == 0 or string.IsNilOrEmpty(url) then
|
||
return
|
||
end
|
||
self.BtnChange:SetRawImage(url)
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Ship
|
||
function XUiGoldenMinerGameBattle:InitShip()
|
||
local humanImageObj = XUiHelper.TryGetComponent(self.Humen.transform, "Humen", "RawImage")
|
||
if not humanImageObj then
|
||
return
|
||
end
|
||
|
||
local upgradeList = self._DataDb:GetAllUpgradeStrengthenList()
|
||
local totalNum = 0
|
||
local shipKey = XGoldenMinerConfigs.ShipAppearanceKey.DefaultShip
|
||
|
||
--设置飞船外观
|
||
for _, strengthenDb in ipairs(upgradeList) do
|
||
if not string.IsNilOrEmpty(strengthenDb:GetLvMaxShipKey()) and strengthenDb:IsMaxLv() then
|
||
totalNum = totalNum + 1
|
||
shipKey = strengthenDb:GetLvMaxShipKey()
|
||
end
|
||
end
|
||
if totalNum >= XGoldenMinerConfigs.GetFinalShipMaxCount() then
|
||
shipKey = XGoldenMinerConfigs.ShipAppearanceKey.FinalShip
|
||
end
|
||
humanImageObj:SetRawImage(XGoldenMinerConfigs.GetShipImagePath(shipKey))
|
||
--设置飞船大小
|
||
local shipSizeWidth, shipSizeHeight
|
||
if shipKey == XGoldenMinerConfigs.ShipAppearanceKey.MaxSpeedShip then
|
||
shipSizeWidth, shipSizeHeight = XGoldenMinerConfigs.GetShipSize(XGoldenMinerConfigs.ShipAppearanceSizeKey.MaxSpeedShipSize)
|
||
elseif shipKey == XGoldenMinerConfigs.ShipAppearanceKey.MaxClampShip then
|
||
shipSizeWidth, shipSizeHeight = XGoldenMinerConfigs.GetShipSize(XGoldenMinerConfigs.ShipAppearanceSizeKey.MaxClampShipSize)
|
||
elseif shipKey == XGoldenMinerConfigs.ShipAppearanceKey.FinalShip then
|
||
shipSizeWidth, shipSizeHeight = XGoldenMinerConfigs.GetShipSize(XGoldenMinerConfigs.ShipAppearanceSizeKey.FinalShipSize)
|
||
else
|
||
shipSizeWidth, shipSizeHeight = XGoldenMinerConfigs.GetShipSize(XGoldenMinerConfigs.ShipAppearanceSizeKey.DefaultShipSize)
|
||
end
|
||
|
||
humanImageObj.transform:GetComponent("RectTransform").rect.size = Vector2(shipSizeWidth, shipSizeHeight)
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - MouseTip
|
||
function XUiGoldenMinerGameBattle:InitMouseTip()
|
||
if not self.RImgCatRight then
|
||
return
|
||
end
|
||
--存值减少每次访问Position创建新增的Vector3变量
|
||
self._MouseEndRightTipX = CS.UnityEngine.Screen.width
|
||
self._MouseEndLeftTipX = 0
|
||
self._LeftMouseTipList = {self.RImgCatLeft}
|
||
self._RightMouseTipList = {self.RImgCatRight}
|
||
end
|
||
|
||
---定春预警
|
||
function XUiGoldenMinerGameBattle:RefreshMouseTip()
|
||
if not self.RImgCatRight then
|
||
return
|
||
end
|
||
local mouseList = self._Game:GetStoneEntityList(XGoldenMinerConfigs.StoneType.Mouse)
|
||
local leftCount = 0
|
||
local rightCount = 0
|
||
local tempPos
|
||
for _, mouseEntity in pairs(mouseList) do
|
||
if mouseEntity.Status == XGoldenMinerConfigs.GAME_GRAB_OBJ_STATUS.ALIVE then
|
||
local mousePosition = mouseEntity.Stone.Transform.anchoredPosition
|
||
-- 定春 右->左
|
||
if mouseEntity.Move.CurDirection < 0 and mousePosition.x > self._MouseEndRightTipX then
|
||
rightCount = rightCount + 1
|
||
if not self._RightMouseTipList[rightCount] then
|
||
self._RightMouseTipList[rightCount] = XUiHelper.Instantiate(self._RightMouseTipList[1].gameObject, self._RightMouseTipList[1].transform.parent)
|
||
end
|
||
tempPos = self._RightMouseTipList[rightCount].transform.position
|
||
self._RightMouseTipList[rightCount].gameObject:SetActiveEx(true)
|
||
self._RightMouseTipList[rightCount].transform.position = Vector3(tempPos.x, mouseEntity.Stone.Transform.position.y, tempPos.z)
|
||
end
|
||
-- 定春 左->右
|
||
if mouseEntity.Move.CurDirection > 0 and mousePosition.x < self._MouseEndLeftTipX then
|
||
leftCount = leftCount + 1
|
||
if not self._LeftMouseTipList[leftCount] then
|
||
self._LeftMouseTipList[leftCount] = XUiHelper.Instantiate(self._LeftMouseTipList[1].gameObject, self._LeftMouseTipList[1].transform.parent)
|
||
end
|
||
tempPos = self._LeftMouseTipList[leftCount].transform.position
|
||
self._LeftMouseTipList[leftCount].gameObject:SetActiveEx(true)
|
||
self._LeftMouseTipList[leftCount].transform.position = Vector3(tempPos.x, mouseEntity.Stone.Transform.position.y, tempPos.z)
|
||
end
|
||
end
|
||
end
|
||
-- 没有猫猫需要提示则隐藏提示
|
||
for i = leftCount + 1, #self._LeftMouseTipList do
|
||
self._LeftMouseTipList[i].gameObject:SetActiveEx(false)
|
||
end
|
||
for i = rightCount + 1, #self._RightMouseTipList do
|
||
self._RightMouseTipList[i].gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - Effect
|
||
---@param type number XGoldenMinerConfigs.GAME_EFFECT_TYPE
|
||
---@param transform UnityEngine.Transform
|
||
function XUiGoldenMinerGameBattle:PlayEffect(type, transform, path)
|
||
if string.IsNilOrEmpty(path) then
|
||
return
|
||
end
|
||
if type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.GRAB then
|
||
self:_PlayEffect(path, transform)
|
||
elseif type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.STONE_BOOM
|
||
or type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.GRAB_BOOM
|
||
or type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.TYPE_BOOM
|
||
or type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.TO_GOLD
|
||
then
|
||
self:_PlayEffect(path, transform, true)
|
||
elseif type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.TIME_STOP then
|
||
self:_PlayOnlyOneEffect(type, path)
|
||
elseif type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.TIME_RESUME then
|
||
self:_PlayOnlyOneEffect(type, path)
|
||
elseif type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.WEIGHT_FLOAT then
|
||
self:_PlayOnlyOneEffect(type, path)
|
||
elseif type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.WEIGHT_RESUME then
|
||
local effect = self:GetOnlyOnceEffect(XGoldenMinerConfigs.GAME_EFFECT_TYPE.WEIGHT_FLOAT, path)
|
||
if effect then
|
||
effect:SetActiveEx(false)
|
||
end
|
||
elseif type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.QTE_CLICK then
|
||
self:_PlayOnlyOneEffect(type, path, transform)
|
||
elseif type == XGoldenMinerConfigs.GAME_EFFECT_TYPE.QTE_COMPLETE then
|
||
self:_PlayOnlyOneEffect(type, path, transform)
|
||
end
|
||
end
|
||
|
||
---@param posTransform UnityEngine.Transform
|
||
function XUiGoldenMinerGameBattle:_PlayOnlyOneEffect(type, path, posTransform, isEffectRoot)
|
||
if XTool.IsTableEmpty(self._EffectObjDir[type]) then
|
||
self._EffectObjDir[type] = {}
|
||
end
|
||
if not self._EffectObjDir[type][path] then
|
||
self._EffectObjDir[type][path] = self:_PlayEffect(path, posTransform, isEffectRoot)
|
||
end
|
||
self._EffectObjDir[type][path]:SetActiveEx(false)
|
||
self._EffectObjDir[type][path]:SetActiveEx(true)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:GetOnlyOnceEffect(type, path)
|
||
if XTool.IsTableEmpty(self._EffectObjDir[type]) then
|
||
return false
|
||
end
|
||
if path then
|
||
return self._EffectObjDir[type][path]
|
||
end
|
||
return self._EffectObjDir[type]
|
||
end
|
||
|
||
---@return UnityEngine.GameObject
|
||
function XUiGoldenMinerGameBattle:_PlayEffect(path, transform, isEffectRoot)
|
||
local resource = self._EffectResourcePool[path]
|
||
if not resource then
|
||
resource = CS.XResourceManager.Load(path)
|
||
self._EffectResourcePool[path] = resource
|
||
end
|
||
|
||
if resource == nil or not resource.Asset then
|
||
XLog.Error(string.format("XGoldenMinerGame:LoadStone加载资源,路径:%s", path))
|
||
return
|
||
end
|
||
|
||
local parent = not isEffectRoot and transform or self._EffectRoot.transform
|
||
local effect = XUiHelper.Instantiate(resource.Asset, parent)
|
||
effect.transform:SetParent(self.EffectFull)
|
||
if self._EffectLayer then
|
||
self._EffectLayer:Init()
|
||
self._EffectLayer:ProcessSortingOrder()
|
||
end
|
||
if transform then
|
||
effect.transform.position = transform.position
|
||
end
|
||
effect.transform:SetParent(parent)
|
||
return effect
|
||
end
|
||
--endregion
|
||
|
||
--region Audio - Sound
|
||
--播放使用道具音效
|
||
function XUiGoldenMinerGameBattle:PlayUseItemSound(itemId)
|
||
local soundId = XGoldenMinerConfigs.GetItemUseSoundId(itemId)
|
||
if not XTool.IsNumberValid(soundId) then
|
||
return
|
||
end
|
||
|
||
XSoundManager.PlaySoundByType(soundId, XSoundManager.SoundType.Sound)
|
||
end
|
||
--endregion
|
||
|
||
--region Game - Init
|
||
function XUiGoldenMinerGameBattle:GameStart()
|
||
self:GameInit()
|
||
if not self._GameTimer then
|
||
self._GameTimer = XScheduleManager.ScheduleForever(function()
|
||
if not self.GameObject or not self.GameObject:Exist() then
|
||
return
|
||
end
|
||
self:GameUpdate()
|
||
end, 0)
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:GameInit()
|
||
---@type XGoldenMinerGameData
|
||
local data = XGoldenMinerGameData.New(self._MapId)
|
||
local areaPanel = XUiHelper.TryGetComponent(self.Ui.Transform, "SafeAreaContentPane")
|
||
local hookTypeList = self:_GetHookTypeList(self._HookType)
|
||
data:SetMapScore(0)
|
||
data:SetAllScore(self._DataDb:GetStageScores())
|
||
data:SetHookTypeList(hookTypeList)
|
||
data:SetTime(XGoldenMinerConfigs.GetMapTime(self._MapId) + TIME_OFFSET)
|
||
data:SetCurPassStageList(self._DataDb._FinishStageId)
|
||
data:SetCurCharacterId(XDataCenter.GoldenMinerManager.GetUseCharacterId())
|
||
self._Game:SetData(data)
|
||
self._Game:SetMapObjRoot(self.PanelStone)
|
||
self._Game:SetRectSize(areaPanel:GetComponent("RectTransform").rect.size)
|
||
self._Game:SetHookObjDir(self:_GetHookObjDir(hookTypeList))
|
||
self._Game:SetHookColliderDir(self.Humen)
|
||
self._Game:SetBuffIdList(XDataCenter.GoldenMinerManager.GetCurBuffIdList())
|
||
self._Game:Init()
|
||
|
||
self:InitWall()
|
||
end
|
||
|
||
---@return number[]
|
||
function XUiGoldenMinerGameBattle:_GetHookTypeList(hookType)
|
||
local result = {}
|
||
if hookType == XGoldenMinerConfigs.FalculaType.Double then
|
||
result[#result + 1] = XGoldenMinerConfigs.FalculaType.Normal
|
||
end
|
||
result[#result + 1] = hookType
|
||
return result
|
||
end
|
||
|
||
---@return UnityEngine.Transform[]
|
||
function XUiGoldenMinerGameBattle:_GetHookObjDir(hookTypeList)
|
||
local result = {}
|
||
for _, type in ipairs(hookTypeList) do
|
||
if self._HookType == XGoldenMinerConfigs.FalculaType.Double
|
||
and type == XGoldenMinerConfigs.FalculaType.Normal then
|
||
result[type] = self.DoubleHook1
|
||
self.DoubleHook1.gameObject:SetActiveEx(true)
|
||
else
|
||
result[type] = self.HookObjDir[type]
|
||
self.HookObjDir[type].gameObject:SetActiveEx(true)
|
||
self.HookColliderDir[type].gameObject:SetActiveEx(true)
|
||
end
|
||
end
|
||
return result
|
||
end
|
||
|
||
---@return UnityEngine.Collider2D[]
|
||
function XUiGoldenMinerGameBattle:_GetHookColliderDir(hookTypeList)
|
||
local result = {}
|
||
for _, type in ipairs(hookTypeList) do
|
||
result[type] = self.HookColliderDir[type]
|
||
end
|
||
return result
|
||
end
|
||
--endregion
|
||
|
||
--region Game - Update
|
||
function XUiGoldenMinerGameBattle:GameUpdate()
|
||
local deltaTime = UnityTime.deltaTime
|
||
self._Game:Update(deltaTime)
|
||
if self._Game:IsPause() then
|
||
return
|
||
end
|
||
self:RefreshPlayTime()
|
||
self:RefreshFaceEmoji(deltaTime)
|
||
self:RefreshMouseTip()
|
||
self:RefreshBuffTip(deltaTime)
|
||
end
|
||
--endregion
|
||
|
||
--region Game - Wall
|
||
function XUiGoldenMinerGameBattle:InitWall()
|
||
self.RectSize = XUiHelper.TryGetComponent(self.Ui.Transform, "SafeAreaContentPane", "RectTransform").rect.size
|
||
local width, height =
|
||
self.RectSize.x + XGoldenMinerConfigs.GetGameWallExAreaValue(true) * 2,
|
||
self.RectSize.y + XGoldenMinerConfigs.GetGameWallExAreaValue(false) * 2
|
||
self.EdgeLeftBox.size = Vector2(self.EdgeLeftBox.size.x, height)
|
||
self.EdgeRightBox.size = Vector2(self.EdgeRightBox.size.x, height)
|
||
self.EdgeTopBox.size = Vector2(width, self.EdgeTopBox.size.y)
|
||
self.EdgeBottomBox.size = Vector2(width, self.EdgeBottomBox.size.y)
|
||
|
||
self.EdgeLeftBox.transform.localPosition = Vector3(
|
||
self.EdgeLeftBox.transform.localPosition.x - XGoldenMinerConfigs.GetGameWallExAreaValue(true),
|
||
self.EdgeLeftBox.transform.localPosition.y,
|
||
self.EdgeLeftBox.transform.localPosition.z)
|
||
self.EdgeRightBox.transform.localPosition = Vector3(
|
||
self.EdgeRightBox.transform.localPosition.x + XGoldenMinerConfigs.GetGameWallExAreaValue(true),
|
||
self.EdgeRightBox.transform.localPosition.y,
|
||
self.EdgeRightBox.transform.localPosition.z)
|
||
self.EdgeTopBox.transform.localPosition = Vector3(
|
||
self.EdgeTopBox.transform.localPosition.x,
|
||
self.EdgeTopBox.transform.localPosition.y + XGoldenMinerConfigs.GetGameWallExAreaValue(false),
|
||
self.EdgeTopBox.transform.localPosition.z)
|
||
self.EdgeBottomBox.transform.localPosition = Vector3(
|
||
self.EdgeBottomBox.transform.localPosition.x,
|
||
self.EdgeBottomBox.transform.localPosition.y - XGoldenMinerConfigs.GetGameWallExAreaValue(false),
|
||
self.EdgeBottomBox.transform.localPosition.z)
|
||
end
|
||
--endregion
|
||
|
||
--region Game - Settle
|
||
function XUiGoldenMinerGameBattle:GameSettle(isSkip)
|
||
self:UpdateSettlementInfo(isSkip)
|
||
local curMapScore = self._Game:GetCurScore()
|
||
-- 3.0取消时间分数
|
||
local lastTimeScore = 0--isSkip and 0 or XDataCenter.GoldenMinerManager.GetTimeScore(self._Game:GetData():GetTime())
|
||
local closeCb = handler(self, self.CheckGameIsWin)
|
||
local isCloseFunc = handler(self, self.GetIsCloseBattle)
|
||
|
||
self._ReportInfo:SetMapId(self._MapId)
|
||
self._ReportInfo:SetStageId(self._CurStageId)
|
||
self._ReportInfo:SetStageIndex(self._CurStageIndex)
|
||
self._ReportInfo:SetBeforeScore(self._Game:GetData():GetAllScore())
|
||
self._ReportInfo:SetTargetScore(self._ScoreTarget)
|
||
self._ReportInfo:SetLastTimeScore(lastTimeScore)
|
||
self._ReportInfo:SetMapScore(curMapScore + lastTimeScore)
|
||
self._ReportInfo:SetLastTime(math.floor(self._Game:GetData():GetTime()))
|
||
self._ReportInfo:SetGrabObjList(self._Game:GetGrabbedStoneEntityList())
|
||
self._ReportInfo:SetGrabObjScoreDir(self._Game:GetGrabbedScoreDir())
|
||
self._Game:GameOver()
|
||
|
||
XDataCenter.GoldenMinerManager.RequestGoldenMinerFinishStage(self._CurStageId,
|
||
self._SettlementInfo,
|
||
curMapScore + lastTimeScore,
|
||
function(isFinishSuccess, isOpenHideStage)
|
||
self._IsCloseBattle = true
|
||
self._IsFinishSuccess = isFinishSuccess
|
||
self._IsOpenHideStage = isOpenHideStage
|
||
XLuaUiManager.Open("UiGoldenMinerReport", self._ReportInfo, closeCb, isCloseFunc)
|
||
end,
|
||
self._ReportInfo:IsWin())
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:UpdateSettlementInfo(isGiveUpTimeScore)
|
||
local mapTime = XGoldenMinerConfigs.GetMapTime(self._MapId)
|
||
local time = self._Game:GetData():GetTime()
|
||
local addScore = self._Game:GetData():GetMapScore()
|
||
if not isGiveUpTimeScore then
|
||
-- 3.0取消时间分数
|
||
addScore = addScore-- + XDataCenter.GoldenMinerManager.GetTimeScore(time)
|
||
end
|
||
|
||
self._SettlementInfo:SetScores(addScore)
|
||
self._SettlementInfo:SetCostTime(math.floor(mapTime - time))
|
||
self._SettlementInfo:UpdateGrabDataInfosByEntityList(self._Game:GetGrabbedStoneEntityList())
|
||
self._SettlementInfo:UpdateHideTaskInfoList(self._Game:GetData():GetHideTaskInfoList())
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:CheckGameIsWin()
|
||
local nextStageId = self._DataDb:GetCurStageId()
|
||
if (not self._ReportInfo:IsWin() or not nextStageId) or (not self._IsFinishSuccess and self._CurStageIndex == 1) then
|
||
XLuaUiManager.PopThenOpen("UiGoldenMinerMain")
|
||
return
|
||
end
|
||
|
||
if XTool.IsTableEmpty(self._DataDb:GetMinerShopDbs()) then
|
||
local stageId = self._DataDb:GetCurStageId()
|
||
XDataCenter.GoldenMinerManager.RequestGoldenMinerEnterStage(stageId, function()
|
||
XLuaUiManager.PopThenOpen("UiGoldenMinerBattle")
|
||
end)
|
||
else
|
||
XLuaUiManager.PopThenOpen("UiGoldenMinerShop")
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:GetIsCloseBattle()
|
||
return self._IsCloseBattle
|
||
end
|
||
--endregion
|
||
|
||
--region Game - ItemUse
|
||
---@param itemGrid XUiGoldenMinerItemGrid
|
||
function XUiGoldenMinerGameBattle:OnUseItem(itemGrid)
|
||
local itemColumn = itemGrid:GetItemColumn()
|
||
local itemGridIndex = itemColumn:GetGridIndex()
|
||
local itemId = itemColumn:GetItemId()
|
||
if not XDataCenter.GoldenMinerManager.IsUseItem(itemGridIndex) then
|
||
return
|
||
end
|
||
if not self._Game:CheckItemCanUse(itemId) then
|
||
--XGoldenMinerConfigs.DebugLog("当前道具不可用!")
|
||
return
|
||
end
|
||
|
||
itemGrid:SetRImgIconActive(false)
|
||
self:PlayUseItemSound(itemId)
|
||
self:PlayFaceEmojiByUseItem(itemId)
|
||
self:AddBuffTip(itemId)
|
||
self:UpdateItemChangeInfo(itemGridIndex, XGoldenMinerConfigs.ItemChangeType.OnUse)
|
||
self._Game:UseItemToAddBuff(itemId)
|
||
self._DataDb:UseItem(itemGridIndex)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnKeyClickUseItem(index)
|
||
self.ItemPanel:UseItemByIndex(index)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OpenItemUsePanel()
|
||
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:HideItemUsePanel()
|
||
|
||
end
|
||
--endregion
|
||
|
||
--region Game - Hook
|
||
function XUiGoldenMinerGameBattle:OnAnimAnglePointDown(eventData)
|
||
if self._HookType ~= XGoldenMinerConfigs.FalculaType.AimingAngle then
|
||
return
|
||
end
|
||
local eventPosX = eventData.position.x
|
||
if eventPosX < CS.UnityEngine.Screen.width / 2 then
|
||
--向左瞄准
|
||
self:OnAimLeftAngleDown()
|
||
else
|
||
--向右瞄准
|
||
self:OnAimRightAngleDown()
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnAimLeftAngleDown()
|
||
if self._HookType ~= XGoldenMinerConfigs.FalculaType.AimingAngle then
|
||
return
|
||
end
|
||
-- 上锁防按键同时按
|
||
self._CurAnim = self._CurAnim | CurAim.Left
|
||
self._Game:HookAimLeft()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnAimRightAngleDown()
|
||
if self._HookType ~= XGoldenMinerConfigs.FalculaType.AimingAngle then
|
||
return
|
||
end
|
||
self._CurAnim = self._CurAnim | CurAim.Right
|
||
self._Game:HookAimRight()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnAimLeftAnglePointUp()
|
||
if self._HookType ~= XGoldenMinerConfigs.FalculaType.AimingAngle then
|
||
return
|
||
end
|
||
self._CurAnim = self._CurAnim & (~CurAim.Left)
|
||
self:_SetAim()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnAimRightAnglePointUp()
|
||
if self._HookType ~= XGoldenMinerConfigs.FalculaType.AimingAngle then
|
||
return
|
||
end
|
||
self._CurAnim = self._CurAnim & (~CurAim.Right)
|
||
self:_SetAim()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnHookShoot()
|
||
-- 记录使用钩爪数
|
||
if self._Game.HookEntityStatus == XGoldenMinerConfigs.GAME_HOOK_ENTITY_STATUS.IDLE then
|
||
self._SettlementInfo:AddLaunchingClawCount()
|
||
end
|
||
self._Game:HookShoot()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:_SetAim()
|
||
if self._CurAnim & CurAim.Left ~= CurAim.None then
|
||
self._Game:HookAimLeft()
|
||
elseif self._CurAnim & CurAim.Right ~= CurAim.None then
|
||
self._Game:HookAimRight()
|
||
else
|
||
self._Game:HookAimIdle()
|
||
end
|
||
end
|
||
--endregion
|
||
|
||
--region Event - Listener
|
||
function XUiGoldenMinerGameBattle:AddEventListener()
|
||
XEventManager.AddEventListener(XEventId.EVENT_APPLICATION_PAUSE, self.ApplicationPause, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_EXIT_CLICK, self.OnEscClick, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_TIMEOUT, self.GameSettle, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_STONE_CLEAR, self.GameSettle, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_ADD_SCORE, self.RefreshScore, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_ADD_TIME, self.AddPlayTime, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_ADD_ITEM, self.AddItem, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_PLAY_EFFECT, self.PlayEffect, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_HIDE_TASK, self.HideTaskFinish, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_PLAY_FACE, self.PlayFaceEmoji, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_USE_ITEM, self.OnUseItem, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_QTE_START, self.RefreshQteBtn, self)
|
||
XEventManager.AddEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_QTE_END, self.RefreshShootBtn, self)
|
||
if self._Game then
|
||
self._Game:AddEventListener()
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RemoveEventListener()
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_APPLICATION_PAUSE, self.ApplicationPause, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_EXIT_CLICK, self.OnEscClick, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_TIMEOUT, self.GameSettle, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_STONE_CLEAR, self.GameSettle, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_ADD_SCORE, self.RefreshScore, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_ADD_TIME, self.AddPlayTime, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_ADD_ITEM, self.AddItem, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_PLAY_EFFECT, self.PlayEffect, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_HIDE_TASK, self.HideTaskFinish, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_PLAY_FACE, self.PlayFaceEmoji, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_USE_ITEM, self.OnUseItem, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_QTE_START, self.RefreshQteBtn, self)
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_GOLDEN_MINER_GAME_QTE_END, self.RefreshShootBtn, self)
|
||
if self._Game then
|
||
self._Game:RemoveEventListener()
|
||
end
|
||
end
|
||
--endregion
|
||
|
||
--region Ui - BtnListener
|
||
function XUiGoldenMinerGameBattle:AddBtnClickListener()
|
||
self:RegisterClickEvent(self.BtnStop, self.OnBtnStopClick)
|
||
self:RegisterClickEvent(self.BtneExit, self.OnBtnNextStageClick)
|
||
|
||
if self.AimLeftInputHandler then
|
||
self.AimLeftInputHandler:AddPointerDownListener(function() self:OnAimLeftAngleDown() end)
|
||
self.AimLeftInputHandler:AddPointerUpListener(function() self:OnAimLeftAnglePointUp() end)
|
||
end
|
||
if self.AimRightInputHandler then
|
||
self.AimRightInputHandler:AddPointerDownListener(function() self:OnAimRightAngleDown() end)
|
||
self.AimRightInputHandler:AddPointerUpListener(function() self:OnAimRightAnglePointUp() end)
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:AddPCListener()
|
||
XDataCenter.InputManagerPc.IncreaseLevel()
|
||
XDataCenter.InputManagerPc.SetCurOperationType(CS.XOperationType.ActivityGame)
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.A, handler(self, self.OnAimLeftAngleDown))
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyUpFunc(XGoldenMinerConfigs.GAME_PC_KEY.A, function() self:OnAimLeftAnglePointUp() end)
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.D, handler(self, self.OnAimRightAngleDown))
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyUpFunc(XGoldenMinerConfigs.GAME_PC_KEY.D, function() self:OnAimRightAnglePointUp() end)
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.Space, handler(self, self.OnBtnShootPressDown))
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyUpFunc(XGoldenMinerConfigs.GAME_PC_KEY.Space, handler(self, self.OnBtnShootPressUp))
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.Q, function() self:OnKeyClickUseItem(1) end)
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.W, function() self:OnKeyClickUseItem(2) end)
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.E, function() self:OnKeyClickUseItem(3) end)
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.R, function() self:OnKeyClickUseItem(4) end)
|
||
XDataCenter.InputManagerPc.RegisterActivityGameKeyDownFunc(XGoldenMinerConfigs.GAME_PC_KEY.T, function() self:OnKeyClickUseItem(5) end)
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:RemovePCListener()
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.A)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyUp(XGoldenMinerConfigs.GAME_PC_KEY.A)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.D)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyUp(XGoldenMinerConfigs.GAME_PC_KEY.D)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.Space)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyUp(XGoldenMinerConfigs.GAME_PC_KEY.Space)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.Q)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.W)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.E)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.R)
|
||
XDataCenter.InputManagerPc.UnregisterActivityGameKeyDown(XGoldenMinerConfigs.GAME_PC_KEY.T)
|
||
XDataCenter.InputManagerPc.DecreaseLevel()
|
||
XDataCenter.InputManagerPc.ResumeCurOperationType()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnBtnShootPressDown()
|
||
if not self._Game then
|
||
return
|
||
end
|
||
if self._HookType ~= XGoldenMinerConfigs.FalculaType.StorePressMagnetic then
|
||
return
|
||
else
|
||
self:OnHookShoot()
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnBtnShootPressUp()
|
||
if not self._Game then
|
||
return
|
||
end
|
||
if self._Game:IsQTE() then
|
||
self._Game:QTEClick()
|
||
elseif self._HookType ~= XGoldenMinerConfigs.FalculaType.StorePressMagnetic then
|
||
self:OnHookShoot()
|
||
else
|
||
for _, hookEntity in ipairs(self._Game.HookEntityList) do
|
||
self._Game:HookRevoke(hookEntity)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnFocusExit()
|
||
if self._Game and self._Game.HookEntityStatus == XGoldenMinerConfigs.GAME_HOOK_ENTITY_STATUS.USING
|
||
and self._HookType == XGoldenMinerConfigs.FalculaType.StorePressMagnetic
|
||
then
|
||
for _, hookEntity in ipairs(self._Game.HookEntityList) do
|
||
if hookEntity.Hook.Status == XGoldenMinerConfigs.GAME_HOOK_STATUS.SHOOTING then
|
||
self._Game:HookRevoke(hookEntity)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnBtnStopClick()
|
||
self:OpenPauseDialog()
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnBtnNextStageClick()
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GOLDEN_MINER_GAME_PAUSE, XGoldenMinerConfigs.GAME_PAUSE_TYPE.PLAYER)
|
||
self.BtneExit:SetButtonState(CS.UiButtonState.Select)
|
||
|
||
if self._Game:GetData():GetCurScore() >= self._ScoreTarget then
|
||
self:GameSettle(true)
|
||
return
|
||
end
|
||
local closeCb = function()
|
||
XEventManager.DispatchEvent(XEventId.EVENT_GOLDEN_MINER_GAME_RESUME, XGoldenMinerConfigs.GAME_PAUSE_TYPE.PLAYER)
|
||
self.BtneExit:SetButtonState(CS.UiButtonState.Normal)
|
||
self:StartGamePauseAnim()
|
||
end
|
||
local sureCb = function()
|
||
self:GameSettle(true)
|
||
end
|
||
XLuaUiManager.Open("UiGoldenMinerDialog",
|
||
XUiHelper.GetText("GoldenMinerSkipStageTitle"),
|
||
XUiHelper.GetText("GoldenMinerSkipStageContent"),
|
||
closeCb,
|
||
sureCb)
|
||
|
||
end
|
||
|
||
function XUiGoldenMinerGameBattle:OnEscClick()
|
||
if self._Game:IsRunning() then
|
||
self:OpenPauseDialog()
|
||
end
|
||
end
|
||
--endregion |