local XGoldenMinerBaseObj = require("XEntity/XGoldenMiner/Object/XGoldenMinerBaseObj") local XGoldenMinerBoom = require("XEntity/XGoldenMiner/Object/XGoldenMinerBoom") local XGoldenMinerMouse = require("XEntity/XGoldenMiner/Object/XGoldenMinerMouse") local XGoldenMinerRedEnvelope = require("XEntity/XGoldenMiner/Object/XGoldenMinerRedEnvelope") 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") --绳子状态 local RopeState = { Rock = 1, --常态摇摆 Stretch = 2, --拉伸 Shorten = 3, --回收 Stop = 4, --停止动作 } --矿工状态 local HumenState = { Idle = 1, --常态 MoveLeft = 2, --向左移动中 MoveRight = 3, --向右移动中 } --玩法倒计时颜色 local TxtTimeColor = { [true] = CS.UnityEngine.Color.white, [false] = CS.UnityEngine.Color.red } local MILLISECOND = 1000 --毫秒 local PERCENT = XGoldenMinerConfigs.Percent --倍率 local ROLE_MOVE_RANGE_PERCENT = XGoldenMinerConfigs.GetRoleMoveRangePercent() --角色移动范围百分比 local GAME_NEAR_END_TIME = XGoldenMinerConfigs.GetGameNearEndTime() --临近结束的时间(单位:秒) local GAME_STOP_COUNTDOWN = XGoldenMinerConfigs.GetGameStopCountdown() --暂停倒计时(单位:秒) local SHORTEN_SPEED_PARAMETER = XGoldenMinerConfigs.GetShortenSpeedParameter() local SHORTEN_MIN_SPEED = XGoldenMinerConfigs.GetShortenMinSpeed() local ROLE_GRAP_SUCCESS_TIME = XGoldenMinerConfigs.GetRoleGrapSuccessTime() --抓到物品切换回默认表情的时间(毫秒) local USE_ITEM_SPEED = XGoldenMinerConfigs.GetUseItemSpeed() --使用道具到抓取物的速度 local USE_BOOM_EFFECT = XGoldenMinerConfigs.GetUseBoomEffect() --使用炸弹特效 local FINAL_SHIP_MAX_COUNT = XGoldenMinerConfigs.GetFinalShipMaxCount() --显示完全体的飞船需要升满的升级项 local CSUnityEngineTime = CS.UnityEngine.Time local CSXResourceManagerLoad = CS.XResourceManager.Load local CSUiButtonStateNormal = CS.UiButtonState.Normal local CSUiButtonStateSelect = CS.UiButtonState.Select local MathFloor = math.floor local MahtAbs = math.abs local TableInsert = table.insert --黄金矿工玩法界面 local XUiGoldenMinerBattle = XLuaUiManager.Register(XLuaUi, "UiGoldenMinerBattle") function XUiGoldenMinerBattle:OnAwake() self:InitObj() self.CurFaceId = nil --当前使用的表情Id self.SettlementInfo = XGoldenMinerSettlementInfo.New() self.DataDb = XDataCenter.GoldenMinerManager.GetGoldenMinerDataDb() self.HumenPosY = self.Humen.transform.localPosition.y --矿工Y轴位置 self.RopeRockDir = Vector3.back --绳子摇摆的方向 self.PreFaceUrlPath = nil --上一个表情的路径 self.CurNearEndTime = 0 --当前临近结束时间 self.IsCloseBattle = false --游戏结束等后端传来数据再关闭界面 self.IsFinishSuccess = true --通关请求服务器是否返回成功 self:SetIsPlayRopeOpenAnima(true) self:SetNotActiveBoomTimes(0) self:SetCurShortenSpeed(0) --抓到东西时回收的速度 self.ResourcePool = {} self.EffectPool = {} self.CurTriggerObjDic = {} --钩子抓到的对象字典 self.CurTriggerObjSettleList = {} --钩子抓到并结算成得分的对象列表 self:RegisterButtonEvent() self.ItemPanel = XUiItemPanel.New(self.PanelSkillParent, handler(self, self.UseItem)) self.BuffPanel = XUiBuffPanel.New(self.PanelBuffParent, self) self:HideCurScoreChange() end function XUiGoldenMinerBattle:OnStart() local dataDb = self.DataDb local characterId = XDataCenter.GoldenMinerManager.GetUseCharacterId() self.CurStageId, self.CurStageIndex = dataDb:GetCurStageId() self.MapId = dataDb:GetStageMapId(self.CurStageId) self.LastTime = XGoldenMinerConfigs.GetMapTime(self.MapId) self.BeforeScore = dataDb:GetStageScores() self.CurMapScore = self.BeforeScore --在当前地图中的得分 self.SettlementItems = dataDb:GetItemColumns() self.DefaultFaceImgPath = XGoldenMinerConfigs.GetCharacterDefaultFace(characterId) --角色默认表情资源路径 self.IsPlayNearEndAnima = true --是否播放临近结束时的动画 --飞碟特效首次打开界面隐藏,等倒计时结束后再显示 self:SetHumenEffectActive(false) --背景的Canvas层级大于0会挡住特效,强制设为0 if self.FullScreenBackground then self.FullScreenBackground.sortingOrder = 0 end --目标得分 self.TargetScoreData = dataDb:GetCurStageTargetScore() self.TargetScore.text = XUiHelper.GetText("GoldenMinerPlayTargetScore", self.TargetScoreData) self.TxtNumber.text = XUiHelper.GetText("GoldenMinerCurStage", self.CurStageIndex) --设置发射钩爪按钮音效的音量为原大小 self.BtnChange.transform:GetComponent("XUguiPlaySound").VolumePercent = 100 end function XUiGoldenMinerBattle:OnEnable() XUiGoldenMinerBattle.Super.OnEnable(self) XEventManager.AddEventListener(XEventId.EVENT_APPLICATION_PAUSE, self.ApplicationPause, self) self:Init() end function XUiGoldenMinerBattle:Init() --等异形屏适配宽度后再计算 XScheduleManager.ScheduleOnce(function() if XTool.UObjIsNil(self.GameObject) then return end local areaPanel = XUiHelper.TryGetComponent(self.Ui.Transform, "SafeAreaContentPane") self.RectSize = areaPanel:GetComponent("RectTransform").rect.size self.RoleMoveRange = self.RectSize.x * ROLE_MOVE_RANGE_PERCENT self:UpdateCurScore() self:InitMap(self.MapId) self:SetHumenCurState(HumenState.Idle) self:SetTxtTime(self.LastTime) self:InitEdgeTriggerEnter() self:InitTimes() self:SetRoleDefaultFace() self:InitHumenAppearance() self.ItemPanel:UpdateItemColumns() self:UpdateBuff() self:InitRope() self:SetCurState(RopeState.Rock) self:StartGameStopCountdown() end, 10) end function XUiGoldenMinerBattle:OnDisable() XUiGoldenMinerBattle.Super.OnDisable(self) XEventManager.RemoveEventListener(XEventId.EVENT_APPLICATION_PAUSE, self.ApplicationPause, self) self:StopTimer() self:StopGameStopCountdown() self:StopCurScoreChangeAnima() end function XUiGoldenMinerBattle:OnDestroy() for _, resource in pairs(self.ResourcePool) do resource:Release() end if not XTool.UObjIsNil(self.GoInputHandler) then self.GoInputHandler:RemoveAllListeners() end self.GoInputHandler = nil self:StopRopeSoundPlay() end function XUiGoldenMinerBattle:InitObj() self.FullScreenBackground = XUiHelper.TryGetComponent(self.Transform, "FullScreenBackground", "Canvas") end --初始化飞船外观 function XUiGoldenMinerBattle:InitHumenAppearance() local humenImageObj = XUiHelper.TryGetComponent(self.Humen.transform, "Humen", "RawImage") if not humenImageObj then return end local dataDb = self.DataDb local upgradeList = 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 >= FINAL_SHIP_MAX_COUNT then shipKey = XGoldenMinerConfigs.ShipAppearanceKey.FinalShip end humenImageObj: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 humenImageObj.transform:GetComponent("RectTransform").rect.size = Vector2(shipSizeWidth, shipSizeHeight) end --初始化当前使用类型的钩爪 function XUiGoldenMinerBattle:InitRope() local falculaType = self:GetFalculaType() self.NormalRope.gameObject:SetActiveEx(falculaType == XGoldenMinerConfigs.FalculaType.Normal) self.MagneticRope.gameObject:SetActiveEx(falculaType == XGoldenMinerConfigs.FalculaType.Magnetic) self.BigRope.gameObject:SetActiveEx(falculaType == XGoldenMinerConfigs.FalculaType.Big) self.Rope = (falculaType == XGoldenMinerConfigs.FalculaType.Magnetic and self.MagneticRope) or (falculaType == XGoldenMinerConfigs.FalculaType.Big and self.BigRope) or self.NormalRope --普通和电磁钩爪的触发器 self.RopeCordCollider = (falculaType == XGoldenMinerConfigs.FalculaType.Magnetic and self.MagneticRopeCordCollider) or self.NormalCordCollider --绳子Trans self.RopeTrans = self.Rope.transform self.RopeRectTrans = self.Rope.gameObject:GetComponent("RectTransform") --绳子最短长度 self.RopeMinLength = self.RopeRectTrans.sizeDelta.y --绳子最长长度 self.RopeMaxLength = math.ceil(math.sqrt(self.RectSize.x ^ 2 + self.RectSize.y ^ 2)) --钩爪 local ropeCord = XUiHelper.TryGetComponent(self.RopeTrans, "RopeCord") self.RopeCordTrans = ropeCord.transform self.RopeCordOriginPosY = self.RopeCordTrans.localPosition.y --左钩子 local ropeCordLeft = XUiHelper.TryGetComponent(self.RopeTrans, "RopeCordLeft") self.RopeCordLeftTrans = ropeCordLeft and ropeCordLeft.transform self.RopeCordLeftOriginPosY = self.RopeCordLeftTrans and self.RopeCordLeftTrans.localPosition.y --右钩子 local ropeCordRight = XUiHelper.TryGetComponent(self.RopeTrans, "RopeCordRight") self.RopeCordRightTrans = ropeCordRight and ropeCordRight.transform self.RopeCordRightOriginPosY = self.RopeCordRightTrans and self.RopeCordRightTrans.localPosition.y --电磁类型的钩子 local ropeCordMagnetic = XUiHelper.TryGetComponent(self.RopeTrans, "RopeCordMagnetic") self.RopeCordMagneticTrans = ropeCordMagnetic and ropeCordMagnetic.transform self.RopeCordMagneticOriginPosY = self.RopeCordMagneticTrans and self.RopeCordMagneticTrans.localPosition.y --钩环 local shackle = XUiHelper.TryGetComponent(self.RopeTrans, "Shackle") self.ShackleTrans = shackle and shackle.transform self.ShackleOriginPosY = self.ShackleTrans and self.ShackleTrans.localPosition.y --抓取到的对象的父节点 self.TriggerObjs = XUiHelper.TryGetComponent(self.RopeCordTrans, "TriggerObjs") self:InitAim() self:SetRopeLength(self.RopeMinLength) end --初始化瞄准线 function XUiGoldenMinerBattle:InitAim() self.Aim = XUiHelper.TryGetComponent(self.RopeCordTrans, "Aim") local length = math.ceil(math.sqrt(self.RectSize.x ^ 2 + self.RectSize.y ^ 2)) local sizeDelta = self.Aim.gameObject:GetComponent("RectTransform").sizeDelta self.Aim.gameObject:GetComponent("RectTransform").sizeDelta = Vector2(sizeDelta.x, length) end function XUiGoldenMinerBattle:InitTimes() self:SetAutoCloseInfo(XDataCenter.GoldenMinerManager.GetActivityEndTime(), function(isClose) if isClose then XDataCenter.GoldenMinerManager.HandleActivityEndTime() return end end, nil, 0) end --初始化地图边界触发器 function XUiGoldenMinerBattle:InitEdgeTriggerEnter() self.EdgeLeft:AddTriggerEnter2DCallback(function(collider) self:OnEdgeTriggerEnter(collider) end) self.EdgeRight:AddTriggerEnter2DCallback(function(collider) self:OnEdgeTriggerEnter(collider) end) self.EdgeTop:AddTriggerEnter2DCallback(function(collider) self:OnEdgeTriggerEnter(collider) end) self.EdgeBottom:AddTriggerEnter2DCallback(function(collider) self:OnEdgeTriggerEnter(collider) end) local rectSizeX, rectSizeY = self.RectSize.x, self.RectSize.y self.EdgeLeftBox.size = Vector2(self.EdgeLeftBox.size.x, rectSizeY) self.EdgeRightBox.size = Vector2(self.EdgeRightBox.size.x, rectSizeY) self.EdgeTopBox.size = Vector2(rectSizeX, self.EdgeTopBox.size.y) self.EdgeBottomBox.size = Vector2(rectSizeX, self.EdgeBottomBox.size.y) end --初始化地图中的抓取物 function XUiGoldenMinerBattle:InitMap(mapId) self.MouseObjList = {} self.BoomObjList = {} local stoneIdList = XGoldenMinerConfigs.GetMapStoneId(mapId) local grapObj local triggerCb = handler(self, self.TrigerCallback) local resourceManagerLoadFunc = handler(self, self.ResourceManagerLoad) for i, stoneId in ipairs(stoneIdList) do local resource = self:ResourceManagerLoad(XGoldenMinerConfigs.GetStonePrefab(stoneId)) local obj = XUiHelper.Instantiate(resource.Asset) local stoneType = XGoldenMinerConfigs.GetStoneType(stoneId) if stoneType == XGoldenMinerConfigs.StoneType.Boom then grapObj = XGoldenMinerBoom.New(obj, stoneId, i, triggerCb, resourceManagerLoadFunc) grapObj:InitTriggerBoomFunc(handler(self, self.TriggerBoom)) TableInsert(self.BoomObjList, grapObj) elseif stoneType == XGoldenMinerConfigs.StoneType.Mouse then grapObj = XGoldenMinerMouse.New(obj, stoneId, i, triggerCb, resourceManagerLoadFunc) TableInsert(self.MouseObjList, grapObj) elseif stoneType == XGoldenMinerConfigs.StoneType.RedEnvelope then grapObj = XGoldenMinerRedEnvelope.New(obj, stoneId, i, triggerCb, resourceManagerLoadFunc) else grapObj = XGoldenMinerBaseObj.New(obj, stoneId, i, triggerCb, resourceManagerLoadFunc) end obj.transform:SetParent(self.PanelStone, false) grapObj:Init(self.MapId, self.RectSize, self.PanelStone) end end -----------------使用道具 begin-------------------- function XUiGoldenMinerBattle:UseItem(itemGrid) local itemColumn = itemGrid:GetItemColumn() local itemGridIndex = itemColumn:GetGridIndex() if not XDataCenter.GoldenMinerManager.IsUseItem(itemGridIndex) then return end local itemId = itemColumn:GetItemId() local buffId = XGoldenMinerConfigs.GetItemBuffId(itemId) local buffType = XGoldenMinerConfigs.GetBuffType(buffId) local params = XGoldenMinerConfigs.GetBuffParams(buffId) if buffType == XGoldenMinerConfigs.BuffType.GoldenMinerBoom then --绳子回收且有抓取物时,使用炸弹消灭抓取物 if self:GetCurState() ~= RopeState.Shorten or XTool.IsTableEmpty(self.CurTriggerObjDic) then return end self:UseBoom() elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerStoneChangeGold then --正在拉回的物品变为同样重量的金块 if self:GetCurState() ~= RopeState.Shorten or XTool.IsTableEmpty(self.CurTriggerObjDic) then return end for k, goldenMinerObject in pairs(self.CurTriggerObjDic) do goldenMinerObject:ChangeToGold() end self:SetRoleFaceByGroup(XGoldenMinerConfigs.FaceGroup.RoleUseStoneChangeGold, self:GetCurTriggerObjTotalScore()) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerMouseStop then --所有的鼬鼠停止移动一段时间 for _, mouseObj in ipairs(self.MouseObjList) do mouseObj:StopMoveTime(tonumber(params[1])) end --鼬鼠恢复移动的时间 self.MouseRecoverMoveTime = self.LastTime - tonumber(params[1]) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerNotActiveBoom then --不激活炸弹箱 local curNotActiveBoomTimes = self:GetNotActiveBoomTimes() self:SetNotActiveBoomTimes(curNotActiveBoomTimes + tonumber(params[1])) self:SetIsActiveBoom(false) self:SetRoleFace(XGoldenMinerConfigs.FaceId.RoleUseNotActiveBoom) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerShortenSpeed then --拉回速度变为N倍 if self:GetCurState() == RopeState.Shorten then self:UpdateCurShortenSpeed(self.ShortenSpeed * tonumber(params[1]) / PERCENT) end self:SetRoleFace(XGoldenMinerConfigs.FaceId.RoleUseShortenSpeed) else return end self:PlayUseItemSound(itemId) itemGrid:SetRImgIconActive(false) self.DataDb:UseItem(itemGridIndex) self:UpdateItemChangeInfo(itemGridIndex, XGoldenMinerConfigs.ItemChangeType.OnUse) end --播放使用道具音效 function XUiGoldenMinerBattle:PlayUseItemSound(itemId) local soundId = XGoldenMinerConfigs.GetItemUseSoundId(itemId) if not XTool.IsNumberValid(soundId) then return end XSoundManager.PlaySoundByType(soundId, XSoundManager.SoundType.Sound) end --使用炸弹 function XUiGoldenMinerBattle:UseBoom() self:SetRoleFace(XGoldenMinerConfigs.FaceId.RoleUseBoom) local triggerObjsPos = self.PanelPlay.transform:InverseTransformPoint(self.TriggerObjs.transform.position) self:LoadEffect(USE_BOOM_EFFECT, self.PanelPlay, triggerObjsPos) local score = self:GetCurTriggerObjTotalScore() local boomAfterScore = XGoldenMinerConfigs.GetFaceScore(XGoldenMinerConfigs.FaceId.RoleUseBoomAfter) self:SetRoleFace(score >= boomAfterScore and XGoldenMinerConfigs.FaceId.RoleUseBoomAfter or XGoldenMinerConfigs.FaceId.RoleUseBoom) self:RemoveCurTriggerObjDic(true) end function XUiGoldenMinerBattle: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 -----------------使用道具 end-------------------- function XUiGoldenMinerBattle:StartTimer() self:StopTimer() self.Timer = XScheduleManager.ScheduleForeverEx(handler(self, self.Update), 0) self:CheckRopeSoundPlay() end function XUiGoldenMinerBattle:StopTimer() if self.Timer then XScheduleManager.UnSchedule(self.Timer) self.Timer = nil end self:StopRopeSoundPlay() end function XUiGoldenMinerBattle:RegisterButtonEvent() self:RegisterClickEvent(self.BtnStop, self.OnBtnStopClick) self:RegisterClickEvent(self.BtnChange, self.OnBtnChangeClick) self.GoInputHandler:AddPointerDownListener(function(eventData) self:OnPointerDown(eventData) end) self.GoInputHandler:AddPointerUpListener(function(eventData) self:OnPointerUp(eventData) end) end --抛出绳子 function XUiGoldenMinerBattle:OnBtnChangeClick() if self:GetCurState() ~= RopeState.Rock then return end self:OnPointerUp() self:SetCurState(RopeState.Stretch) self.SettlementInfo:AddLaunchingClawCount() XSoundManager.PlaySoundByType(XGoldenMinerConfigs.GetStretchSound(), XSoundManager.SoundType.Sound) end ---------------暂停相关 begin-------------------- function XUiGoldenMinerBattle:OnBtnStopClick() self.BtnStop:SetButtonState(CSUiButtonStateSelect) self:StopTimer() local title = XUiHelper.GetText("GoldenMinerStopTipsTitle") local closeCallback = function() self.BtnStop:SetButtonState(CSUiButtonStateNormal) self:StartGameStopCountdown() end local sureCallback = handler(self, self.QuickDialog) local extraData = { sureText = XUiHelper.GetText("GoldenMinerStopTipsCloseText"), closeText = XUiHelper.GetText("GoldenMinerStopTipsSureText") } XLuaUiManager.Open("UiGoldenMinerDialog", title, "", closeCallback, sureCallback, extraData) end --二次确认退出弹窗 function XUiGoldenMinerBattle:QuickDialog() local title = XUiHelper.GetText("GoldenMinerQuickTipsTitle") local desc = XUiHelper.GetText("GoldenMinerQuickTipsDesc") local closeCallback = handler(self, self.OnBtnStopClick) local sureCallback = function() self:UpdateSettlementInfo() XDataCenter.GoldenMinerManager.RequestGoldenMinerExitGame(self.CurStageId, function() XLuaUiManager.PopThenOpen("UiGoldenMinerMain") end, self.SettlementInfo, self.CurMapScore, self.BeforeScore) end XLuaUiManager.Open("UiGoldenMinerDialog", title, desc, closeCallback, sureCallback) end --解除暂停倒计时 function XUiGoldenMinerBattle:StartGameStopCountdown() self:StopGameStopCountdown() local time = GAME_STOP_COUNTDOWN self.GameStopTimer = XScheduleManager.ScheduleForeverEx(function() if time <= 0 then self.PanelGuide.gameObject:SetActiveEx(false) self:SetHumenEffectActive(true) self:StopGameStopCountdown() self:StartTimer() return end self.TxtCountdown.text = string.format("%02d", time) self.PanelGuide.gameObject:SetActiveEx(true) time = time - 1 end, XScheduleManager.SECOND) end function XUiGoldenMinerBattle:StopGameStopCountdown() if self.GameStopTimer then XScheduleManager.UnSchedule(self.GameStopTimer) self.GameStopTimer = nil end end --程序暂停 function XUiGoldenMinerBattle:ApplicationPause(isPause) if isPause then self:OnBtnStopClick() end end ---------------暂停相关 end-------------------- local _IsNearEnd local _IsPlayTimeEnable function XUiGoldenMinerBattle: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 --更新Buff function XUiGoldenMinerBattle:UpdateBuff() self.BuffPanel:UpdateBuff() self:SetFalculaType(XGoldenMinerConfigs.FalculaType.Normal) self:SetStretchSpeed(XGoldenMinerConfigs.GetRopeStretchSpeed()) --绳子伸长基本速度 self:SetShortenSpeed(XGoldenMinerConfigs.GetRopeShortenSpeed()) --绳子拉回基本速度 self:SetHumenMoveSpeed(XGoldenMinerConfigs.GetHumenMoveSpeed()) --飞碟移动速度 self:SetRopeRockSpeed(XGoldenMinerConfigs.GetRopeRockSpeed()) --绳子摇摆速度 self.StoneUpScoreDic = {} --抓取物获得的分数变为原本的X倍,默认为1 local ownBuffDic = XDataCenter.GoldenMinerManager.GetOwnBuffDic() local stoneScoreBuffs = ownBuffDic[XGoldenMinerConfigs.BuffType.GoldenMinerStoneScore] if not XTool.IsTableEmpty(stoneScoreBuffs) then for goldenMinerStoneType, params in pairs(stoneScoreBuffs) do self.StoneUpScoreDic[goldenMinerStoneType] = params[2] --各个不同类型的抓取物对应的倍率 end end for buffType, params in pairs(ownBuffDic) do if buffType == XGoldenMinerConfigs.BuffType.GoldenMinerShortenSpeed then self:SetShortenSpeed(self.ShortenSpeed * params[1] / PERCENT) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerNotActiveBoom then local curNotActiveBoomTimes = self:GetNotActiveBoomTimes() self:SetNotActiveBoomTimes(curNotActiveBoomTimes + params[1]) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerHumenSpeed then self:SetHumenMoveSpeed(self.HumenMoveSpeed * params[1] / PERCENT) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerStretchSpeed then self:SetStretchSpeed(self.StretchSpeed * params[1] / PERCENT) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerCordMode then self:SetFalculaType(params[1]) elseif buffType == XGoldenMinerConfigs.BuffType.GoldenMinerAim then self:SetIsShowAim(true) end end end local _DeltaTime local _CurState function XUiGoldenMinerBattle:Update() _DeltaTime = self:GetDeltaTime() self.LastTime = self.LastTime - _DeltaTime self:SetTxtTime(self.LastTime) if MathFloor(self.LastTime) <= 0 then self:GameOver() return end _CurState = self:GetCurState() if _CurState == RopeState.Rock then self:Rock() self:SetRoleDefaultFace() elseif _CurState == RopeState.Stretch then self:Stretch() self:SetRoleFace(XGoldenMinerConfigs.FaceId.RoleStretch) elseif _CurState == RopeState.Shorten then self:Shorten() end if self.HumenCurState == HumenState.MoveLeft then self:HumenMoveLeft() elseif self.HumenCurState == HumenState.MoveRight then self:HumenMoveRight() end for _, mouseObj in ipairs(self.MouseObjList) do mouseObj:Move(_DeltaTime) end end -----------Buff相关 begin--------------- --设置回收绳子基本速度 function XUiGoldenMinerBattle:SetShortenSpeed(speed) self.ShortenSpeed = speed end --设置当前回收绳子的速度 function XUiGoldenMinerBattle:SetCurShortenSpeed(speed) self.CurShortenSpeed = speed end --更新当前正在回收绳子时的速度 function XUiGoldenMinerBattle:UpdateCurShortenSpeed(speed) local baseSpeed = speed or self.ShortenSpeed or 0 local totalWeight = self:GetCurTriggerObjTotalWeight() local denominator = totalWeight + SHORTEN_SPEED_PARAMETER denominator = XTool.IsNumberValid(denominator) and denominator or 1 baseSpeed = baseSpeed * (1 - (totalWeight / denominator)) self:SetCurShortenSpeed(math.max(SHORTEN_MIN_SPEED, baseSpeed)) end --设置绳子伸长速度 function XUiGoldenMinerBattle:SetStretchSpeed(speed) self.StretchSpeed = speed end --设置角色移动速度 function XUiGoldenMinerBattle:SetHumenMoveSpeed(speed) self.HumenMoveSpeed = speed end --设置绳子摇摆速度 function XUiGoldenMinerBattle:SetRopeRockSpeed(speed) self.RopeRockSpeed = speed end --设置钩爪类型 function XUiGoldenMinerBattle:SetFalculaType(type) self.FalculaType = type end function XUiGoldenMinerBattle:GetFalculaType() return self.FalculaType end --是否显示瞄准线 function XUiGoldenMinerBattle:SetIsShowAim(isShow) self.IsShowAim = isShow end --获得抓取物分数上升倍率,默认1 function XUiGoldenMinerBattle:GetStoneUpScoreMultiple(goldenMinerStoneType) local multiple = self.StoneUpScoreDic[goldenMinerStoneType] return multiple and multiple / PERCENT or 1 end --获得抓取物分数 function XUiGoldenMinerBattle:GetStoneScore(goldenMinerObject) local goldenMinerStoneType = goldenMinerObject:GetType() local score = 0 --鼬鼠需要额外算上携带物的倍率 if goldenMinerStoneType == XGoldenMinerConfigs.StoneType.Mouse then local carryStoneId = goldenMinerObject:GetCurCarryStoneId() if XTool.IsNumberValid(carryStoneId) then local stoneType = XGoldenMinerConfigs.GetStoneType(carryStoneId) score = score + goldenMinerObject:GetCarryStoneScore() * self:GetStoneUpScoreMultiple(stoneType) end end score = score + goldenMinerObject:GetScore() * self:GetStoneUpScoreMultiple(goldenMinerStoneType) return score end -----------Buff相关 end----------------- -----------角色状态 begin--------------- --按下屏幕,角色左右移动 local _Screen = CS.UnityEngine.Screen function XUiGoldenMinerBattle:OnPointerDown(eventData) if self:GetCurState() ~= RopeState.Rock then return end local eventPosX = eventData.position.x if eventPosX < _Screen.width / 2 then --向左移动 self:SetHumenCurState(HumenState.MoveLeft) else --向右移动 self:SetHumenCurState(HumenState.MoveRight) end end function XUiGoldenMinerBattle:OnPointerUp() self:SetHumenCurState(HumenState.Idle) end function XUiGoldenMinerBattle:HumenMoveLeft() local changePosX = self.Humen.transform.localPosition.x - self:GetDeltaTime() * self.HumenMoveSpeed if not self:CheckHumenMove(changePosX) then return end self.Humen.transform.localPosition = Vector3(changePosX, self.HumenPosY, 0) end function XUiGoldenMinerBattle:HumenMoveRight() local changePosX = self.Humen.transform.localPosition.x + self:GetDeltaTime() * self.HumenMoveSpeed if not self:CheckHumenMove(changePosX) then return end self.Humen.transform.localPosition = Vector3(changePosX, self.HumenPosY, 0) end function XUiGoldenMinerBattle:SetHumenCurState(state) self.HumenCurState = state end local _HumenCurPosX function XUiGoldenMinerBattle:CheckHumenMove(changePosX) _HumenCurPosX = self.Humen.transform.localPosition.x --锚点在中间 if MahtAbs(changePosX * 2) >= self.RoleMoveRange then self:SetHumenCurState(HumenState.Idle) return false end return true end -----------角色状态 end--------------- -----------绳子状态 begin--------------- local _RopeLength local _Scale function XUiGoldenMinerBattle:Rock() if self.RopeTrans.localRotation.z <= -0.5 then self.RopeRockDir = Vector3.forward elseif self.RopeTrans.localRotation.z >= 0.5 then self.RopeRockDir = Vector3.back end self.RopeTrans:Rotate(self.RopeRockDir * self.RopeRockSpeed * self:GetDeltaTime()) end function XUiGoldenMinerBattle:Stretch() _RopeLength = self.RopeLength + self:GetDeltaTime() * self.StretchSpeed self:SetRopeLength(_RopeLength) self:SetRopeCordPosY(self.RopeMinLength - self.RopeRectTrans.sizeDelta.y) if _RopeLength >= self.RopeMaxLength then self:SetCurState(RopeState.Shorten) end end function XUiGoldenMinerBattle:Shorten() if self.RopeLength <= self.RopeMinLength then self:SetRopeLength(self.RopeMinLength) self:SetRopeCordPosY(0) self:CheckRoleGrapSuccess() self:UpdateCurScore() self:SetCurState(RopeState.Rock) return end _RopeLength = self.RopeLength - self:GetDeltaTime() * self.CurShortenSpeed self:SetRopeLength(_RopeLength) self:SetRopeCordPosY(self.RopeMinLength - self.RopeRectTrans.sizeDelta.y) end --设置绳子高度 function XUiGoldenMinerBattle:SetRopeHeight(height) self.RopeRectTrans.sizeDelta = Vector2(self.RopeRectTrans.sizeDelta.x, height) end --设置绳子节点下的Y轴 --ropeLengthLerp:当前绳子长度和原始长度的差值 local _localPosition function XUiGoldenMinerBattle:SetRopeCordPosY(ropeLengthLerp) if self.RopeCordLeftTrans then _localPosition = self.RopeCordLeftTrans.localPosition self.RopeCordLeftTrans.localPosition = Vector3(_localPosition.x, self.RopeCordLeftOriginPosY + ropeLengthLerp, _localPosition.z) end if self.RopeCordRightTrans then _localPosition = self.RopeCordRightTrans.localPosition self.RopeCordRightTrans.localPosition = Vector3(_localPosition.x, self.RopeCordRightOriginPosY + ropeLengthLerp, _localPosition.z) end if self.RopeCordMagneticTrans then _localPosition = self.RopeCordMagneticTrans.localPosition self.RopeCordMagneticTrans.localPosition = Vector3(_localPosition.x, self.RopeCordMagneticOriginPosY + ropeLengthLerp, _localPosition.z) end if self.ShackleTrans then _localPosition = self.ShackleTrans.localPosition self.ShackleTrans.localPosition = Vector3(_localPosition.x, self.ShackleOriginPosY + ropeLengthLerp, _localPosition.z) end _localPosition = self.RopeCordTrans.localPosition self.RopeCordTrans.localPosition = Vector3(_localPosition.x, self.RopeCordOriginPosY + ropeLengthLerp, _localPosition.z) end function XUiGoldenMinerBattle:SetRopeLength(length) self.RopeLength = length self:SetRopeHeight(length) end --设置当前绳子的状态 --boomObj:在地图中的炸弹对象 function XUiGoldenMinerBattle:SetCurState(state, boomObj) local falculaType = self:GetFalculaType() --电磁钩爪不播放夹子动画,直接回收 if state == RopeState.Stop and falculaType == XGoldenMinerConfigs.FalculaType.Magnetic then state = RopeState.Shorten if boomObj then self:TriggerBoom(boomObj) end end --播放和停止音效 if state == RopeState.Stretch then XSoundManager.PlaySoundByType(XGoldenMinerConfigs.GetStretchSound(), XSoundManager.SoundType.Sound) else XSoundManager.Stop(XGoldenMinerConfigs.GetStretchSound()) end if state == RopeState.Shorten then XSoundManager.PlaySoundByType(XGoldenMinerConfigs.GetShortenSound(), XSoundManager.SoundType.Sound) else XSoundManager.Stop(XGoldenMinerConfigs.GetShortenSound()) end local isPlayRopeAnima = self.CurState ~= state self.CurState = state if isPlayRopeAnima then self:PlayRopeAnima(state, boomObj) end if state == RopeState.Stop then --普通钩爪停止移动播放动画时,关闭触发器检测 if falculaType == XGoldenMinerConfigs.FalculaType.Normal then self:SetRopeCordColliderActive(false) end return end local notActiveBoomTimes = self:GetNotActiveBoomTimes() if state == RopeState.Shorten and notActiveBoomTimes > 0 then self:SetNotActiveBoomTimes(notActiveBoomTimes - 1) end self:SetIsActiveBoom(state == RopeState.Stretch and notActiveBoomTimes <= 0) self:UpdateCurShortenSpeed() self:SetAimActive(state == RopeState.Rock and self.IsShowAim) self:SetRopeCordColliderActive(state == RopeState.Stretch) if state == RopeState.Shorten then self:CheckRoleGrapingFace() end if state == RopeState.Rock then self:CheckGameOver() end end --播放夹子动画 function XUiGoldenMinerBattle:PlayRopeAnima(state, boomObj) --未抓到物品碰到边界回到摇摆状态时,不播放夹子打开的动画 if state == RopeState.Stretch then self:SetIsPlayRopeOpenAnima(false) elseif state == RopeState.Rock and not self:GetIsPlayRopeOpenAnima() then self:SetIsPlayRopeOpenAnima(true) return end local animaName local falculaType = self:GetFalculaType() if falculaType == XGoldenMinerConfigs.FalculaType.Normal then animaName = (state == RopeState.Rock and "NormalRopeOpen") or (state == RopeState.Stop and "NormalRopeClose") elseif falculaType == XGoldenMinerConfigs.FalculaType.Big then animaName = (state == RopeState.Rock and "BigRopeOpen") or (state == RopeState.Stop and "BigRopeClose") end if state == RopeState.Stop then self:SetIsPlayRopeOpenAnima(true) end if animaName then self:PlayAnimation(animaName, function() if state == RopeState.Stop then if not boomObj then self:SetObjToTriggerParent() else self:TriggerBoom(boomObj) end self:SetCurState(RopeState.Shorten) end end) end end function XUiGoldenMinerBattle:SetIsPlayRopeOpenAnima(isPlay) self.IsPlayRopeAnima = isPlay end function XUiGoldenMinerBattle:GetIsPlayRopeOpenAnima() return self.IsPlayRopeAnima end function XUiGoldenMinerBattle:GetCurState() return self.CurState end --设置不激活炸药箱的次数 function XUiGoldenMinerBattle:SetNotActiveBoomTimes(times) self.NotActiveBoomTimes = times end function XUiGoldenMinerBattle:GetNotActiveBoomTimes() return self.NotActiveBoomTimes end function XUiGoldenMinerBattle:SetIsActiveBoom(isActive) for _, boomObj in ipairs(self.BoomObjList) do boomObj:SetGoInputHandlerActive(isActive) end end function XUiGoldenMinerBattle:SetAimActive(isActive) self.Aim.gameObject:SetActiveEx(isActive) end -----------绳子状态 end--------------- -----------钩子触发器相关 begin------------ function XUiGoldenMinerBattle:SetRopeCordColliderActive(isActive) if self:GetFalculaType() == XGoldenMinerConfigs.FalculaType.Big then self.BigRopeCordLeftCollider.enabled = isActive self.BigRopeCordRightCollider.enabled = isActive return end if XTool.UObjIsNil(self.RopeCordCollider) then XLog.Error("黄金矿工钩子上的触发器不存在") return end self.RopeCordCollider.enabled = isActive end function XUiGoldenMinerBattle:TrigerCallback(goldenMinerObject) local stoneType = goldenMinerObject:GetType() local falculaType = self:GetFalculaType() if stoneType ~= XGoldenMinerConfigs.StoneType.Boom then self.CurTriggerObjDic[goldenMinerObject:GetIndex()] = goldenMinerObject end if stoneType == XGoldenMinerConfigs.StoneType.Boom then self:SetCurState(RopeState.Stop, goldenMinerObject) return elseif falculaType == XGoldenMinerConfigs.FalculaType.Magnetic then goldenMinerObject:SetObjToTriggerParent(self.TriggerObjs) return end self:SetCurState(RopeState.Stop) end function XUiGoldenMinerBattle:OnEdgeTriggerEnter(collider) self:SetCurState(RopeState.Shorten) end function XUiGoldenMinerBattle:SetObjToTriggerParent() for _, v in pairs(self.CurTriggerObjDic) do v:SetObjToTriggerParent(self.TriggerObjs) end end --碰到炸弹 function XUiGoldenMinerBattle:TriggerBoom(boomObj) if (boomObj) and not XTool.UObjIsNil(boomObj.GameObject) then local effect = XGoldenMinerConfigs.GetStoneCatchEffect(boomObj:GetId()) local boomObjPos = self.PanelPlay.transform:InverseTransformPoint(boomObj.Transform.position) self:LoadEffect(effect, self.PanelPlay, boomObjPos) boomObj:SetObjToTriggerParent() end self:RemoveCurTriggerObjDic() self:SetRoleFace(XGoldenMinerConfigs.FaceId.RoleGrapBoom) end -----------钩子触发器相关 end-------------- -----------表情相关 begin------------ --检查表情,返回是否可切换表情 function XUiGoldenMinerBattle:CheckFace() if XTool.IsNumberValid(self.MouseRecoverMoveTime) and self.MouseRecoverMoveTime <= self.LastTime then self:SetRoleFace(XGoldenMinerConfigs.FaceId.RoleUseMouseStop) return false end self.MouseRecoverMoveTime = 0 if XTool.IsNumberValid(self.RoleGrapSuccessTime) and self.RoleGrapSuccessTime <= self.LastTime then return false end self.RoleGrapSuccessTime = 0 return true end --检查角色成功拉回表情 function XUiGoldenMinerBattle:CheckRoleGrapSuccess() local score = self:GetCurTriggerObjTotalScore() self:SetRoleFaceByGroup(XGoldenMinerConfigs.FaceGroup.RoleGrapSuccess, score) self.RoleGrapSuccessTime = self.LastTime - ROLE_GRAP_SUCCESS_TIME / MILLISECOND end --检查角色拉回的表情 function XUiGoldenMinerBattle:CheckRoleGrapingFace() --没抓到任何东西 if XTool.IsTableEmpty(self.CurTriggerObjDic) then self:SetRoleFace(XGoldenMinerConfigs.FaceId.RoleCantGrap) return end local weight = self:GetCurTriggerObjTotalWeight() self:SetRoleFaceByGroup(XGoldenMinerConfigs.FaceGroup.RoleGraping, weight) end --策划需求:不显示默认表情了 function XUiGoldenMinerBattle:SetRoleDefaultFace() if not self:CheckFace() then return end if self.PreFaceUrlPath == self.DefaultFaceImgPath then return end self:PlayAnimation("PanelEmoticonDisable") self.PreFaceUrlPath = self.DefaultFaceImgPath end function XUiGoldenMinerBattle:SetRoleFace(faceId) if self.CurFaceId == faceId then return end local img = XGoldenMinerConfigs.GetFaceImage(faceId) if self.PreFaceUrlPath == img then return end local isPlayDisable = self.DefaultFaceImgPath ~= self.PreFaceUrlPath self.PreFaceUrlPath = img if isPlayDisable then self:PlayAnimation("PanelEmoticonDisable", function() if not XTool.UObjIsNil(self.RImgHate) then self.RImgHate:SetRawImage(img) end self:PlayAnimation("PanelEmoticonEnable") end) else if not XTool.UObjIsNil(self.RImgHate) then self.RImgHate:SetRawImage(img) end self:PlayAnimation("PanelEmoticonEnable") end self.CurFaceId = faceId self:CheckFace() end function XUiGoldenMinerBattle:SetRoleFaceByGroup(groupId, value) local faceId = XGoldenMinerConfigs.GetFaceIdByGroup(groupId, value) self:SetRoleFace(faceId) end -----------表情相关 end-------------- --获得拉取中的物品总积分 function XUiGoldenMinerBattle:GetCurTriggerObjTotalScore() local score = 0 for _, obj in pairs(self.CurTriggerObjDic) do score = score + self:GetStoneScore(obj) end return score end --获得拉取中的物品总重量 function XUiGoldenMinerBattle:GetCurTriggerObjTotalWeight() local weight = 0 for _, obj in pairs(self.CurTriggerObjDic) do weight = weight + obj:GetWeight() end return weight end function XUiGoldenMinerBattle:UpdateCurScore() local score for _, goldenMinerObject in pairs(self.CurTriggerObjDic) do score = self:GetStoneScore(goldenMinerObject) self:AddCurMapScore(score) self:CheckRedEnvelopeItem(goldenMinerObject) TableInsert(self.CurTriggerObjSettleList, goldenMinerObject) end self:RemoveCurTriggerObjDic() self:UpdateTextCurScore() end function XUiGoldenMinerBattle:UpdateTextCurScore() local score = self.CurMapScore if not self.OriginScore then self.OriginScore = score self.CurScore.text = XUiHelper.GetText("GoldenMinerPlayCurScore", self.CurMapScore) elseif self.OriginScore ~= score then self:PlayCurScoreChangeAnima(score - self.OriginScore, self.OriginScore) self.OriginScore = score end end --检查红包箱是否能获得道具 function XUiGoldenMinerBattle:CheckRedEnvelopeItem(goldenMinerObject) local dataDb = self.DataDb local itemColumnIndex = dataDb:GetEmptyItemIndex() if not goldenMinerObject.GetItemId or not itemColumnIndex then return end local itemId = goldenMinerObject:GetItemId() if not XTool.IsNumberValid(itemId) then return end dataDb:UpdateItemColumn(itemId, itemColumnIndex) self.ItemPanel:UpdateItemColumns() self:UpdateItemChangeInfo(itemColumnIndex, XGoldenMinerConfigs.ItemChangeType.OnGet) end function XUiGoldenMinerBattle:AddCurMapScore(score) if XTool.IsNumberValid(score) then XSoundManager.PlaySoundByType(XGoldenMinerConfigs.GetAddScoreSound(), XSoundManager.SoundType.Sound) end self.CurMapScore = math.floor(self.CurMapScore + score) end function XUiGoldenMinerBattle:RemoveCurTriggerObjDic(isBoom) self:DestroyAllChildObj(isBoom) self:UpdateCurShortenSpeed() end function XUiGoldenMinerBattle:DestroyAllChildObj(isBoom) for _, v in pairs(self.CurTriggerObjDic) do v:DestroySelf(isBoom) end self.CurTriggerObjDic = {} end --没物品可以抓时直接游戏结束 function XUiGoldenMinerBattle:CheckGameOver() local transform = self.PanelStone.transform if not XTool.IsNumberValid(transform.childCount) then self:GameOver() end end function XUiGoldenMinerBattle:GameOver() self:StopTimer() self:UpdateSettlementInfo() local curMapScore = self.CurMapScore local mapId = self.MapId local curStageId = self.CurStageId self.IsWin = curMapScore >= self.TargetScoreData local closeCb = handler(self, self.CheckGameState) local isCloseFunc = handler(self, self.GetIsCloseBattle) local data = { CurStageId = curStageId, CurMapId = mapId, CurStageIndex = self.CurStageIndex, BeforeScore = self.BeforeScore, CurMapScore = curMapScore, GoldenMinerObjectList = self.CurTriggerObjSettleList, TargetScore = self.TargetScoreData, } XLuaUiManager.Open("UiGoldenMinerReport", data, closeCb, isCloseFunc) XDataCenter.GoldenMinerManager.RequestGoldenMinerFinishStage(curStageId, self.SettlementInfo, curMapScore, function(isFinishSuccess) self.IsCloseBattle = true self.IsFinishSuccess = isFinishSuccess end, self.IsWin) end function XUiGoldenMinerBattle:GetIsCloseBattle() return self.IsCloseBattle end --刷新发给后端的关卡结算数据 function XUiGoldenMinerBattle:UpdateSettlementInfo() local mapId = self.MapId local mapTime = XGoldenMinerConfigs.GetMapTime(mapId) self.SettlementInfo:SetScores(self.CurMapScore - self.BeforeScore) self.SettlementInfo:SetCostTime(MathFloor(mapTime - self.LastTime)) self.SettlementInfo:UpdateGrabDataInfos(self.CurTriggerObjSettleList) end function XUiGoldenMinerBattle:ResourceManagerLoad(path) local resource = self.ResourcePool[path] if resource then return resource end resource = CSXResourceManagerLoad(path) if resource == nil or not resource.Asset then XLog.Error(string.format("XUiGoldenMinerBattle:ResourceManagerLoad加载资源,路径:%s", path)) return end self.ResourcePool[path] = resource return resource end --加载特效 function XUiGoldenMinerBattle:LoadEffect(path, parent, localPosition) if XTool.UObjIsNil(parent) then return end local model = self.EffectPool[path] if XTool.UObjIsNil(model) then local resource = self:ResourceManagerLoad(path) model = XUiHelper.Instantiate(resource.Asset, parent) self.EffectPool[path] = model end model.transform.localPosition = localPosition or Vector3.zero model.gameObject:SetActiveEx(false) model.gameObject:SetActiveEx(true) return model end function XUiGoldenMinerBattle:CheckGameState() local nextStageId = self.DataDb:GetCurStageId() if (not self.IsWin or not nextStageId) or (not self.IsFinishSuccess and self.CurStageIndex == 1) then XLuaUiManager.PopThenOpen("UiGoldenMinerMain") return end XLuaUiManager.PopThenOpen("UiGoldenMinerShop") end function XUiGoldenMinerBattle:SetHumenEffectActive(isActive) if self.HumenEffect then self.HumenEffect.gameObject:SetActiveEx(isActive) end end function XUiGoldenMinerBattle:GetBoomObj(index) for _, boomObj in ipairs(self.BoomObjList) do if boomObj:GetIndex() == index then return boomObj end end end local _deltaTime function XUiGoldenMinerBattle:GetDeltaTime() _deltaTime = CSUnityEngineTime.deltaTime --防止卡顿跳帧 if _deltaTime > 0.05 then _deltaTime = 0.05 end return _deltaTime end --检查绳子的音效播放 function XUiGoldenMinerBattle:CheckRopeSoundPlay() local curState = self:GetCurState() if curState == RopeState.Stretch then XSoundManager.PlaySoundByType(XGoldenMinerConfigs.GetStretchSound(), XSoundManager.SoundType.Sound) elseif curState == RopeState.Shorten then XSoundManager.PlaySoundByType(XGoldenMinerConfigs.GetShortenSound(), XSoundManager.SoundType.Sound) end end function XUiGoldenMinerBattle:StopRopeSoundPlay() XSoundManager.Stop(XGoldenMinerConfigs.GetShortenSound()) XSoundManager.Stop(XGoldenMinerConfigs.GetStretchSound()) end ---------------抓取成功播放动画 begin---------------- function XUiGoldenMinerBattle:PlayCurScoreChangeAnima(changeScore, originScore) self:ShowCurScoreChange("+" .. changeScore) self:StopCurScoreChangeAnima() local scores = self.DataDb:GetStageScores() self.CurScoreChangeAnima = XUiHelper.Tween(1, function(f) self:ShowCurScoreChange("+" .. changeScore) self.CurScore.text = XUiHelper.GetText("GoldenMinerPlayCurScore", math.floor(originScore + changeScore * f)) end, function() self.CurScore.text = XUiHelper.GetText("GoldenMinerPlayCurScore", self.CurMapScore) end) if self.PanelCurScoreChange then self.PanelCurScoreChange.gameObject:SetActiveEx(true) self:PlayAnimation("BubbleEnable") end end function XUiGoldenMinerBattle:StopCurScoreChangeAnima() if self.CurScoreChangeAnima then XScheduleManager.UnSchedule(self.CurScoreChangeAnima) self.CurScoreChangeAnima = nil end end function XUiGoldenMinerBattle:ShowCurScoreChange(score) if self.TxtCurScoreChange then self.TxtCurScoreChange.text = score end end function XUiGoldenMinerBattle:HideCurScoreChange() if self.PanelCurScoreChange then self.PanelCurScoreChange.gameObject:SetActiveEx(false) end end ---------------抓取成功播放动画 end------------------