PGRData/Resources/Scripts/XUi/XUiRpgMakerGame/PlayMain/XUiRpgMakerGamePlayMain.lua
2022-12-26 14:06:01 +05:30

675 lines
No EOL
24 KiB
Lua

local XUiRpgMakerGamePanelWinTip = require("XUi/XUiRpgMakerGame/PlayMain/XUiRpgMakerGamePanelWinTip")
local XUiRpgMakerGamePanelLoseTip = require("XUi/XUiRpgMakerGame/PlayMain/XUiRpgMakerGamePanelLoseTip")
local XUiRpgMakerGameUnlockTip = require("XUi/XUiRpgMakerGame/PlayMain/XUiRpgMakerGameUnlockTip")
local MaxStarCount = XRpgMakerGameConfigs.MaxStarCount
local IsNumberValid = XTool.IsNumberValid
local Vector2 = CS.UnityEngine.Vector2
local Vector2Right = Vector2.right
local mathAbs = math.abs
local CSXTextManagerGetText = CS.XTextManager.GetText
local CSUiButtonStateSelect = CS.UiButtonState.Select
local CSUiButtonStateNormal = CS.UiButtonState.Normal
local RandomDialogBoxIntervalSecond = CS.XGame.ClientConfig:GetFloat("RpgMakerGameRandomDialogBoxIntervalSecond")
--关卡玩法主界面
local XUiRpgMakerGamePlayMain = XLuaUiManager.Register(XLuaUi, "UiRpgMakerGamePlayMain")
function XUiRpgMakerGamePlayMain:OnAwake()
self.RpgMakerGamePlayScene = XDataCenter.RpgMakerGameManager.GetCurrentScene()
self:InitGuide()
self:InitUiCameraEffect()
self:AutoAddListener()
self:InitTip()
self.IsGuideing = false --是否正在功能引导中
self.IsPlayingBackoffEffect = false --是否播放后退特效中
self.IsTriggerDrag = false --是否触发拖拽
self.IsWin = false --是否胜利
self:SetCurrUseBackCount(0) --当前使用后退的次数,重置关卡后,计数重置
self.TxtWord.text = CSXTextManagerGetText("RpgMakerGamePlayMainIsUseHintDesc")
self:SetContentAddBtn(false)
self:SetIconChatActive(false)
self:SetContentActive(false)
end
function XUiRpgMakerGamePlayMain:OnStart()
self:InitStarCondition()
self:InitMaxChallengeCountDesc()
self.RpgMakerGamePlayScene:PlayAnimation()
end
function XUiRpgMakerGamePlayMain:OnEnable()
if self.RpgMakerGamePlayScene:IsSceneNil() then
return
end
self:Refresh()
end
function XUiRpgMakerGamePlayMain:OnDisable()
self.IsPlayingAction = false
self:StopCheckShowHintTimer()
self:StopRandomDialogBoxDurationTimer()
end
function XUiRpgMakerGamePlayMain:OnDestroy()
if self.UiCameraEffect and self.UiCameraEffect:Exist() then
CS.UnityEngine.GameObject.Destroy(self.UiCameraEffect)
self.UiCameraEffect = nil
end
self.RpgMakerGamePlayScene:RemoveScene()
XDataCenter.RpgMakerGameManager.ClearStageMap()
end
function XUiRpgMakerGamePlayMain:InitUiCameraEffect()
local camera = CS.XUiManager.Instance.UiCamera
local cameraEffectPath = CS.XGame.ClientConfig:GetString("RpgMakerPlayScreenUiCameraEffect")
local resource = CS.XResourceManager.Load(cameraEffectPath)
if resource == nil or not resource.Asset then
XLog.Error(string.format("XUiRpgMakerGamePlayMain:InitUiCameraEffect() 加载:%s失败", cameraEffectPath))
return
end
self.UiCameraEffect = CS.UnityEngine.Object.Instantiate(resource.Asset, camera.transform)
self.UiCameraEffectStart = XUiHelper.TryGetComponent(self.UiCameraEffect.transform, "Start")
self.UiCameraEffectStart.gameObject:SetActiveEx(false)
end
function XUiRpgMakerGamePlayMain:InitTip()
local tipOutCb = handler(self, self.Close)
local tipNextCb = function()
local stageId = self:GetStageId()
local nextStageId = XRpgMakerGameConfigs.GetRpgMakerGameNextStageId(stageId)
local selectRoleId = self:GetSelectRoleId()
local cb = function()
self:SetIsWin(false)
self:SetCurrUseBackCount(0)
self:OnStart()
self:Refresh()
end
XDataCenter.RpgMakerGameManager.RequestRpgMakerGameEnterStage(nextStageId, selectRoleId, cb)
end
local tipResetCb = handler(self, self.OnBtnResetClick)
self.WinTip = XUiRpgMakerGamePanelWinTip.New(self.PanelWinTip, tipOutCb, tipNextCb, tipResetCb)
self.LoseTip = XUiRpgMakerGamePanelLoseTip.New(self.PanelLoseTip, tipOutCb, tipResetCb)
self.UnlockTip = XUiRpgMakerGameUnlockTip.New(self.PanelUnlockTip)
self.WinTip:Hide()
self.LoseTip:Hide()
self.UnlockTip:Hide()
end
function XUiRpgMakerGamePlayMain:InitMaxChallengeCountDesc()
local mapId = self:GetMapId()
if not IsNumberValid(mapId) then
return
end
local desc = XRpgMakerGameConfigs.GetRpgMakerGameMaxRound(mapId)
self.TextMaxChallenge.text = "/" .. desc
end
function XUiRpgMakerGamePlayMain:InitStarCondition()
local stageId = self:GetStageId()
if not IsNumberValid(stageId) then
return
end
local starConditionIdList = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionIdList(stageId)
local starConditionDesc
for i, starConditionId in ipairs(starConditionIdList or {}) do
starConditionDesc = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionDesc(starConditionId)
self["Task" .. i]:SetName(starConditionDesc)
self["Task" .. i].gameObject:SetActiveEx(true)
self["Task" .. i]:SetButtonState(CSUiButtonStateNormal)
end
for i = #starConditionIdList + 1, MaxStarCount do
self["Task" .. i].gameObject:SetActiveEx(false)
end
end
function XUiRpgMakerGamePlayMain:AutoAddListener()
self:RegisterClickEvent(self.BtnBack, self.OnBtnCloseClick)
self:BindHelpBtn(self.BtnHelp, "RpgMakerGame")
self:RegisterClickEvent(self.BtnReset, handler(self, self.OnBtnResetClick))
self:RegisterClickEvent(self.BtnBackoff, handler(self, self.OnBtnBackoffClick))
self:RegisterClickEvent(self.BtnNo, handler(self, self.OnBtnNoClick))
self:RegisterClickEvent(self.BtnYes, handler(self, self.OnBtnYesClick))
self:RegisterClickEvent(self.BtnHead, handler(self, self.OnBtnHeadClick))
if self.BtnGuideRoleClick then
self:RegisterClickEvent(self.BtnGuideRoleClick, handler(self, self.OnBtnGuideRoleClick))
end
if self.BtnGuideRoadClick then
self:RegisterClickEvent(self.BtnGuideRoadClick, handler(self, self.OnBtnGuideRoadClick))
end
self.GoInputHandler:AddPointerDownListener(function(eventData) self:OnPointerDown(eventData) end)
self.GoInputHandler:AddDragListener(function(eventData) self:OnDrag(eventData) end)
self.GoInputHandler:AddPointerUpListener(function(eventData) self:OnPointerUp(eventData) end)
end
function XUiRpgMakerGamePlayMain:Refresh()
self.TextChallenge.text = XDataCenter.RpgMakerGameManager.GetCurrentCount()
self:RefreshHint()
self:RefreshStarCondition()
self:CheckActions()
end
function XUiRpgMakerGamePlayMain:RefreshStarCondition()
local stageId = self:GetStageId()
if not IsNumberValid(stageId) then
return
end
local currentCount = XDataCenter.RpgMakerGameManager.GetCurrentCount()
local totalDeathCount, normalMonsterDeathCount, bossDeathCount = XDataCenter.RpgMakerGameManager.GetMonsterDeathCount()
local starConditionIdList = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionIdList(stageId)
local stepCount
local monsterCount
local monsterBossCount
local monsterTotalCount
local btnState
local playableDirector
local isWin = self:GetIsWin()
for i, starConditionId in ipairs(starConditionIdList or {}) do
stepCount = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionStepCount(starConditionId)
monsterCount = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionMonsterCount(starConditionId)
monsterBossCount = XRpgMakerGameConfigs.GetRpgMakerGameStarConditionMonsterBossCount(starConditionId)
monsterTotalCount = monsterCount + monsterBossCount
if isWin and currentCount <= stepCount then
btnState = CSUiButtonStateSelect
elseif XTool.IsNumberValid(monsterCount) and XTool.IsNumberValid(monsterBossCount) then
btnState = monsterTotalCount <= totalDeathCount and CSUiButtonStateSelect or CSUiButtonStateNormal
elseif XTool.IsNumberValid(monsterCount) then
btnState = monsterCount <= normalMonsterDeathCount and CSUiButtonStateSelect or CSUiButtonStateNormal
elseif XTool.IsNumberValid(monsterBossCount) then
btnState = monsterBossCount <= bossDeathCount and CSUiButtonStateSelect or CSUiButtonStateNormal
else
btnState = CSUiButtonStateNormal
end
--播放动画
if self["Task" .. i].ButtonState ~= btnState then
self["Task" .. i]:SetButtonState(btnState)
if btnState == CS.UiButtonState.Select then
playableDirector = XUiHelper.TryGetComponent(self["Task" .. i].gameObject.transform, "Animation/SleEnable", "PlayableDirector")
if playableDirector then
playableDirector.gameObject:SetActiveEx(false)
playableDirector.gameObject:SetActiveEx(true)
playableDirector:Play()
end
end
end
end
end
function XUiRpgMakerGamePlayMain:RefreshHint()
local isShowHintDialog = self:IsShowHintDialog()
self:SetContentAddBtn(false)
self:SetIconChatActive(isShowHintDialog)
self:SetContentActive(false)
self:StartCheckShowHintTimer()
end
--检查播放行动动画
function XUiRpgMakerGamePlayMain:CheckActions()
if self.IsPlayingAction then
return
end
if XDataCenter.RpgMakerGameManager.IsActionsEmpty() then
return
end
self.IsPlayingAction = true
local action = XDataCenter.RpgMakerGameManager.GetNextAction()
local actionType = action.ActionType
local cb = handler(self, self.PlayActionEndCallback)
local playerObj = XDataCenter.RpgMakerGameManager.GetPlayerObj()
local endPointObj = XDataCenter.RpgMakerGameManager.GetEndPointObj()
local monsterObj = XDataCenter.RpgMakerGameManager.GetMonsterObj(action.MonsterId)
local triggerObj = XDataCenter.RpgMakerGameManager.GetTriggerObj(action.TriggerId)
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionPlayerMove then
if playerObj then
playerObj:PlayMoveAction(action, cb)
end
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionKillMonster then
if playerObj then
playerObj:PlayKillMonsterAction(action, cb)
end
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionStageWin then
local stageId = self:GetStageId()
self.WinTip:Show(stageId)
self:PlayAnimation("PanelWinTipEnable")
self:SetIsWin(true)
XDataCenter.RpgMakerGameManager.SetCurrClearButtonGroupIndex()
cb()
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionEndPointOpen then
if endPointObj then
endPointObj:PlayEndPointStatusChangeAction(action, cb)
end
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterRunAway or actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterPatrol then
if monsterObj then
monsterObj:RemovePatrolLineObjs()
monsterObj:RemoveViewAreaModels()
local moveEndCb = function()
monsterObj:SetGameObjectViewArea()
cb()
end
monsterObj:PlayMoveAction(action, moveEndCb)
end
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterChangeDirection then
if monsterObj then
monsterObj:ChangeDirectionAction(action, cb)
end
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterKillPlayer then
if monsterObj then
local killPlayerCb = function()
local stageId = self:GetStageId()
self.LoseTip:Show(stageId)
self:PlayAnimation("PanelLoseTipEnable")
cb()
end
monsterObj:PlayKillPlayerAction(action, killPlayerCb)
end
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionTriggerStatusChange then
if triggerObj then
triggerObj:PlayTriggerStatusChangeAction(action, cb)
end
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionUnlockRole then
local roleId = action.RoleId
if IsNumberValid(roleId) then
self.UnlockTip:Show(roleId)
self:PlayAnimation("PanelUnlockTipEnable")
end
cb()
return
end
if actionType == XRpgMakerGameConfigs.RpgMakerGameActionType.ActionMonsterPatrolLine then
if monsterObj then
monsterObj:SetMoveLine(action)
end
cb()
return
end
cb()
end
function XUiRpgMakerGamePlayMain:PlayActionEndCallback()
self.IsPlayingAction = false
self:Refresh()
end
--手指按下
function XUiRpgMakerGamePlayMain:OnPointerDown(eventData)
self.StartDir = eventData.position
end
--拖拽
function XUiRpgMakerGamePlayMain:OnDrag(eventData)
if not self:IsCanRequest() then
return
end
local playerObj = XDataCenter.RpgMakerGameManager.GetPlayerObj()
if not playerObj then
return
end
self.IsTriggerDrag = true
local endDir = eventData.position - self.StartDir
local angle = Vector2.SignedAngle(Vector2Right, endDir) --向量转角度,范围:-180度 ~ 180度
local direction = self:GetDirectionByAngle(angle)
playerObj:ChangeDirectionAction({Direction = direction})
playerObj:SetMoveDirectionEffectActive(true)
end
--手指松开
function XUiRpgMakerGamePlayMain:OnPointerUp(eventData)
local playerObj = XDataCenter.RpgMakerGameManager.GetPlayerObj()
if playerObj then
playerObj:SetMoveDirectionEffectActive(false)
end
if not self:IsCanRequest() or not self.IsTriggerDrag then
return
end
self.IsTriggerDrag = false
local endDir = eventData.position - self.StartDir
local angle = Vector2.SignedAngle(Vector2Right, endDir) --向量转角度,范围:-180度 ~ 180度
local mapId = self:GetMapId()
local direction = self:GetDirectionByAngle(angle)
XDataCenter.RpgMakerGameManager.RequestRpgMakerGameMapMove(mapId, direction, handler(self, self.Refresh))
end
--根据角度返回对应的方向
function XUiRpgMakerGamePlayMain:GetDirectionByAngle(angle)
local direction
if angle >= -45 and angle < 45 then
direction = XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveRight
elseif angle >= 45 and angle < 135 then
direction = XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveUp
elseif angle >= 135 or angle < -135 then
direction = XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveLeft
elseif angle >= -135 and angle < -45 then
direction = XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveDown
end
return direction
end
function XUiRpgMakerGamePlayMain:OnBtnResetClick()
if not self:IsCanRequest() then
return false
end
local mapId = self:GetMapId()
local cb = function()
self.IsPlayingAction = false
self.RpgMakerGamePlayScene:Reset()
self:SetIsWin(false)
self:SetCurrUseBackCount(0)
self:Refresh()
end
XDataCenter.RpgMakerGameManager.RequestRpgMakerGameMapResetGame(mapId, cb)
return true
end
function XUiRpgMakerGamePlayMain:OnBtnBackoffClick()
if not self:IsCanRequest() then
return
end
self:PlayBackoffEffect()
local mapId = self:GetMapId()
local cb = function(currentRound)
self:SetCurrUseBackCount(self.CurrUseBackCount + 1)
self.RpgMakerGamePlayScene:BackUp(currentRound)
self:Refresh()
end
XDataCenter.RpgMakerGameManager.RequestRpgMakerGameMapBackUp(mapId, cb)
end
function XUiRpgMakerGamePlayMain:OnBtnCloseClick()
local sureCallback = function()
self:Close()
end
XUiManager.DialogTip(CSXTextManagerGetText("TipTitle"), CSXTextManagerGetText("RpgMakerGamePlayMainQuickTipsDesc"), nil, nil, sureCallback)
end
--所有动作播完才能发协议
function XUiRpgMakerGamePlayMain:IsCanRequest()
if not XDataCenter.RpgMakerGameManager.IsActionsEmpty() or self.IsPlayingAction or self.IsPlayingBackoffEffect or self.IsGuideing then
return false
end
return true
end
--------------------------提示相关 begin---------------------------
--确定使用提示
function XUiRpgMakerGamePlayMain:OnBtnYesClick()
self:OnBtnNoClick()
local mapId = self:GetMapId()
XLuaUiManager.Open("UiRpgMakerGameMapTip", mapId)
end
--取消使用提示
function XUiRpgMakerGamePlayMain:OnBtnNoClick()
self:SetContentAddBtn(false)
self:SetIconChatActive(true)
end
function XUiRpgMakerGamePlayMain:OnBtnHeadClick()
if self:IsShowHintDialog() then
self:SetContentAddBtn(true)
self:SetIconChatActive(false)
else
local stageId = self:GetStageId()
self.TextHint.text = XRpgMakerGameConfigs.GetRpgMakerGameHintDialogBoxText(stageId)
self:SetContentActive(true)
end
self:StartCheckShowHintTimer()
end
--延迟一段时间显示随机提示语
function XUiRpgMakerGamePlayMain:StartCheckShowHintTimer()
self:StopCheckShowHintTimer()
self:StopRandomDialogBoxDurationTimer()
if self:IsShowHintDialog() then
return
end
local duration = RandomDialogBoxIntervalSecond
self.CheckShowHintTimer = XScheduleManager.ScheduleForever(function()
duration = duration - 1
if duration <= 0 then
self:StopCheckShowHintTimer()
self:ShowRandomHintDialog()
end
end, XScheduleManager.SECOND)
end
function XUiRpgMakerGamePlayMain:StopCheckShowHintTimer()
if self.CheckShowHintTimer then
XScheduleManager.UnSchedule(self.CheckShowHintTimer)
self.CheckShowHintTimer = nil
end
end
function XUiRpgMakerGamePlayMain:ShowRandomHintDialog()
local id = XDataCenter.RpgMakerGameManager.GetRandomDialogBoxId()
local text = XRpgMakerGameConfigs.GetRpgMakerGameRandomDialogBoxText(id)
self.TextHint.text = text
self:SetContentActive(true)
self:StartRandomDialogBoxDurationTimer(id)
end
function XUiRpgMakerGamePlayMain:SetContentAddBtn(isActive)
self.ContentAddBtn.gameObject:SetActiveEx(isActive)
end
function XUiRpgMakerGamePlayMain:SetContentActive(isActive)
self.Content.gameObject:SetActiveEx(isActive)
if isActive then
self.ContentDynamicGrid:SetAllLayoutDirty()
end
end
function XUiRpgMakerGamePlayMain:SetIconChatActive(isActive)
self.IconChat.gameObject:SetActiveEx(isActive)
end
--显示一段时间的随机提示语
function XUiRpgMakerGamePlayMain:StartRandomDialogBoxDurationTimer(randomdialogBoxId)
self:StopRandomDialogBoxDurationTimer()
local duration = XRpgMakerGameConfigs.GetRpgMakerGameRandomDialogBoxDuration(randomdialogBoxId)
self.RandomDialogBoxDurationTimer = XScheduleManager.ScheduleForever(function()
duration = duration - 1
if duration <= 0 then
self:SetContentActive(false)
self:StartCheckShowHintTimer()
end
end, XScheduleManager.SECOND)
end
function XUiRpgMakerGamePlayMain:StopRandomDialogBoxDurationTimer()
if self.RandomDialogBoxDurationTimer then
XScheduleManager.UnSchedule(self.RandomDialogBoxDurationTimer)
self.RandomDialogBoxDurationTimer = nil
end
end
--是否停止随机对话,显示通关路线对话
function XUiRpgMakerGamePlayMain:IsShowHintDialog()
local currUseBackCount = self:GetCurrUseBackCount()
local stageId = self:GetStageId()
local backCount = XRpgMakerGameConfigs.GetRpgMakerGameHintDialogBoxBackCount(stageId)
return currUseBackCount >= backCount
end
function XUiRpgMakerGamePlayMain:SetCurrUseBackCount(currUseBackCount)
self.CurrUseBackCount = currUseBackCount
end
--------------------------提示相关 end---------------------------
function XUiRpgMakerGamePlayMain:GetStageId()
local enterStageDb = XDataCenter.RpgMakerGameManager:GetRpgMakerGameEnterStageDb()
return enterStageDb:GetStageId()
end
function XUiRpgMakerGamePlayMain:GetSelectRoleId()
local enterStageDb = XDataCenter.RpgMakerGameManager:GetRpgMakerGameEnterStageDb()
return enterStageDb:GetSelectRoleId()
end
function XUiRpgMakerGamePlayMain:GetMapId()
local enterStageDb = XDataCenter.RpgMakerGameManager:GetRpgMakerGameEnterStageDb()
return enterStageDb:GetMapId()
end
function XUiRpgMakerGamePlayMain:GetCurrUseBackCount()
return self.CurrUseBackCount
end
function XUiRpgMakerGamePlayMain:SetIsWin(isWin)
self.IsWin = isWin
end
function XUiRpgMakerGamePlayMain:GetIsWin()
return self.IsWin
end
function XUiRpgMakerGamePlayMain:PlayBackoffEffect()
if XTool.UObjIsNil(self.UiCameraEffectStart) then
return
end
self.IsPlayingBackoffEffect = true
self.UiCameraEffectStart.gameObject:SetActiveEx(false)
self.UiCameraEffectStart.gameObject:SetActiveEx(true)
local time = CS.XGame.ClientConfig:GetInt("RpgMakerPlayScreenPlayUiCameraEffectTime")
XScheduleManager.ScheduleOnce(function()
if XTool.UObjIsNil(self.UiCameraEffectStart) then
self.UiCameraEffectStart.gameObject:SetActiveEx(false)
return
end
self.IsPlayingBackoffEffect = false
end, time)
end
----------------------引导相关 begin-----------------------
function XUiRpgMakerGamePlayMain:InitGuide()
local offsetY = 50
local playerObj = XDataCenter.RpgMakerGameManager.GetPlayerObj()
local modelPosotion = playerObj and playerObj:GetGameObjPosition()
local localPosition = modelPosotion and self:WorldToUILocaPosition(modelPosotion)
if localPosition then
localPosition.y = localPosition.y + offsetY
end
--设置按钮到角色模型所在的位置
if self.BtnGuideRoleClick and localPosition then
self.BtnGuideRoleClick.transform.localPosition = localPosition
end
if self.BtnGuideRoadClick and localPosition then
local height = self.BtnGuideRoadClick.transform.rect.height
localPosition. y = height / 2
self.BtnGuideRoadClick.transform.localPosition = localPosition
end
--设置按钮到终点所在的位置
local endPointObj = XDataCenter.RpgMakerGameManager.GetEndPointObj()
modelPosotion = endPointObj and endPointObj:GetGameObjPosition()
localPosition = modelPosotion and self:WorldToUILocaPosition(modelPosotion)
if self.BtnGuideEndPointClick and localPosition then
self.BtnGuideEndPointClick.transform.localPosition = localPosition
end
--设置按钮到怪物所在的位置
local mapId = self:GetMapId()
local monsterIdList = XRpgMakerGameConfigs.GetRpgMakerGameMapIdToMonsterIdList(mapId)
local monsterId = monsterIdList[1]
local monsterObj = XDataCenter.RpgMakerGameManager.GetMonsterObj(monsterId)
modelPosotion = monsterObj and monsterObj:GetGameObjPosition()
localPosition = modelPosotion and self:WorldToUILocaPosition(modelPosotion)
if localPosition then
localPosition.y = localPosition.y + offsetY
end
if self.BtnGuideMonsterClick and localPosition then
self.BtnGuideMonsterClick.transform.localPosition = localPosition
end
end
function XUiRpgMakerGamePlayMain:OnBtnGuideRoleClick()
self.IsGuideing = true
local playerObj = XDataCenter.RpgMakerGameManager.GetPlayerObj()
if not playerObj then
return
end
playerObj:ChangeDirectionAction({Direction = XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveDown})
playerObj:SetMoveDirectionEffectActive(true)
end
function XUiRpgMakerGamePlayMain:OnBtnGuideRoadClick()
self.IsGuideing = false
local playerObj = XDataCenter.RpgMakerGameManager.GetPlayerObj()
if playerObj then
playerObj:SetMoveDirectionEffectActive(false)
end
local mapId = self:GetMapId()
local direction = XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveDown
XDataCenter.RpgMakerGameManager.RequestRpgMakerGameMapMove(mapId, direction, handler(self, self.Refresh))
end
--世界坐标-> UGUI坐标
function XUiRpgMakerGamePlayMain:WorldToUILocaPosition(modelPosotion)
local sceneCamera = self.RpgMakerGamePlayScene:GetSceneCamera()
local viewportPos = sceneCamera:WorldToViewportPoint(modelPosotion)
local realScreenWidth = CsXUiManager.RealScreenWidth
local realScreenHeight = CsXUiManager.RealScreenHeight
return CS.UnityEngine.Vector3((viewportPos.x - 0.5) * realScreenWidth, (viewportPos.y - 0.5) * realScreenHeight, 0)
end
----------------------引导相关 end-----------------------