forked from endernon/PGRData
232 lines
No EOL
7.1 KiB
Lua
232 lines
No EOL
7.1 KiB
Lua
XHomeSceneManager = XHomeSceneManager or {}
|
|
|
|
HomeSceneViewType = {
|
|
OverView = 0, --总览
|
|
RoomView = 1, --房间视角
|
|
DeviceView = 2, --设备视角
|
|
}
|
|
|
|
HomeSceneLayerMask = {
|
|
Room = "Room",
|
|
Device = "Device",
|
|
HomeSurface = "HomeSurface",
|
|
Block = "Block",
|
|
HomeCharacter = "HomeCharacter",
|
|
}
|
|
|
|
---@type XHomeScene
|
|
local CurrentScene = nil
|
|
local CurrentView = HomeSceneViewType.OverView
|
|
|
|
function XHomeSceneManager.Init()
|
|
--TODO
|
|
end
|
|
|
|
--- 进入宿舍场景
|
|
---@param sceneName string 场景名
|
|
---@param sceneAssetUrl string 场景资源路径
|
|
---@param onLoadCompleteCb function 场景资源加载完成回调
|
|
---@param onLeaveCb function 离开场景回调
|
|
--------------------------
|
|
function XHomeSceneManager.EnterScene(sceneName, sceneAssetUrl, onLoadCompleteCb, onLeaveCb)
|
|
if CurrentScene and CurrentScene.Name == sceneName then
|
|
return
|
|
end
|
|
|
|
local scene = XHomeScene.New(sceneName, sceneAssetUrl, onLoadCompleteCb, onLeaveCb)
|
|
|
|
XLuaUiManager.Open("UiLoading", LoadingType.Dormitory)
|
|
-- 释放无用资源
|
|
CS.UnityEngine.Resources.UnloadUnusedAssets()
|
|
-- 手动执行GC
|
|
LuaGC()
|
|
XHomeSceneManager.LeaveScene()
|
|
CurrentScene = scene
|
|
CurrentScene:OnEnterScene()
|
|
CurrentView = HomeSceneViewType.OverView
|
|
end
|
|
|
|
function XHomeSceneManager.LeaveScene()
|
|
if CurrentScene then
|
|
CurrentScene:OnLeaveScene()
|
|
-- 清除宿舍本地图片缓存
|
|
XDataCenter.DormManager.ClearLocalCaptureCache()
|
|
CurrentScene = nil
|
|
end
|
|
end
|
|
|
|
function XHomeSceneManager.GetCurrentScene()
|
|
return CurrentScene
|
|
end
|
|
|
|
---@return UnityEngine.Camera
|
|
function XHomeSceneManager.GetSceneCamera()
|
|
if CurrentScene then
|
|
return CurrentScene:GetCamera()
|
|
end
|
|
return nil
|
|
end
|
|
|
|
---@return XCameraController
|
|
function XHomeSceneManager.GetSceneCameraController()
|
|
if CurrentScene then
|
|
return CurrentScene:GetCameraController()
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function XHomeSceneManager.ChangeAngleYAndYAxis(angleY, isAllowYAxis)
|
|
local cameraController = XHomeSceneManager.GetSceneCameraController()
|
|
if not XTool.UObjIsNil(cameraController) then
|
|
if angleY > 0 then
|
|
cameraController.TargetAngleY = angleY
|
|
end
|
|
cameraController.AllowYAxis = isAllowYAxis
|
|
end
|
|
end
|
|
|
|
function XHomeSceneManager.EnterShare(homeRoomData)
|
|
if not homeRoomData then
|
|
return
|
|
end
|
|
|
|
local cameraController = XHomeSceneManager.GetSceneCameraController()
|
|
if not XTool.UObjIsNil(cameraController) then
|
|
local imgName = tostring(XPlayer.Id) .. tostring(homeRoomData:GetShareId()) .. XDormConfig.ShareName
|
|
local texture = cameraController:CaptureCamera(imgName, true)
|
|
XDataCenter.DormManager.SetLocalCaptureCache(imgName, texture)
|
|
XLuaUiManager.Open("UiDormTemplateShare", homeRoomData, texture)
|
|
end
|
|
end
|
|
|
|
function XHomeSceneManager.CaptureCamera(imgName, isBig)
|
|
if not imgName then
|
|
return nil
|
|
end
|
|
|
|
local texture = nil
|
|
local cameraController = XHomeSceneManager.GetSceneCameraController()
|
|
if not XTool.UObjIsNil(cameraController) then
|
|
local captrueAngleX = XDormConfig.CaptureAngleX
|
|
local captrueAngleY = XDormConfig.CaptureAngleY
|
|
local captrueDistance = XDormConfig.CaptureDistance
|
|
|
|
local oldIsTweenCamera = cameraController.IsTweenCamera
|
|
local oldTargetAngleX = cameraController.TargetAngleX
|
|
local oldTargetAngleY = cameraController.TargetAngleY
|
|
local oldDistance = cameraController.Distance
|
|
|
|
local minDistance = cameraController.MinDistance
|
|
local maxDistance = cameraController.MaxDistance
|
|
|
|
-- 设置摄像机参数
|
|
cameraController.IsTweenCamera = false
|
|
if captrueDistance > maxDistance then
|
|
cameraController.MaxDistance = captrueDistance
|
|
end
|
|
if captrueDistance < minDistance then
|
|
cameraController.MinDistance = captrueDistance
|
|
end
|
|
cameraController.TargetAngleX = captrueAngleX
|
|
cameraController.TargetAngleY = captrueAngleY
|
|
cameraController.Distance = captrueDistance
|
|
|
|
-- 截屏
|
|
texture = cameraController:CaptureCamera(imgName, isBig)
|
|
XDataCenter.DormManager.SetLocalCaptureCache(imgName, texture)
|
|
|
|
XScheduleManager.ScheduleOnce(function()
|
|
--还原摄像机参数
|
|
cameraController.MaxDistance = maxDistance
|
|
cameraController.MinDistance = minDistance
|
|
cameraController.TargetAngleX = oldTargetAngleX
|
|
cameraController.TargetAngleY = oldTargetAngleY
|
|
cameraController.Distance = oldDistance
|
|
cameraController.IsTweenCamera = oldIsTweenCamera
|
|
end, 500)
|
|
|
|
return texture
|
|
end
|
|
|
|
return texture
|
|
end
|
|
|
|
function XHomeSceneManager.ChangeView(viewType)
|
|
CurrentView = viewType
|
|
local mask = XHomeSceneManager.GetLayerMask()
|
|
if CurrentScene then
|
|
CurrentScene:SetRaycasterMask(mask)
|
|
end
|
|
end
|
|
|
|
function XHomeSceneManager.GetCurrentView()
|
|
return CurrentView
|
|
end
|
|
|
|
function XHomeSceneManager.GetLayerMask()
|
|
if (CurrentView == HomeSceneViewType.OverView) then
|
|
return CS.UnityEngine.LayerMask.GetMask(HomeSceneLayerMask.Room)
|
|
elseif (CurrentView == HomeSceneViewType.RoomView) then
|
|
return CS.UnityEngine.LayerMask.GetMask(HomeSceneLayerMask.Device) | CS.UnityEngine.LayerMask.GetMask(HomeSceneLayerMask.HomeCharacter)
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
|
|
function XHomeSceneManager.ChangeBackToOverView()
|
|
if CurrentView == HomeSceneViewType.OverView then
|
|
return false
|
|
end
|
|
CurrentScene:ChangeCameraToScene(function()
|
|
XHomeSceneManager.ChangeView(HomeSceneViewType.OverView)
|
|
end)
|
|
return true
|
|
end
|
|
|
|
function XHomeSceneManager.ChangeSceneView(sceneId, cb)
|
|
CurrentScene:ChangeCameraToSceneById(sceneId, cb)
|
|
XHomeSceneManager.SetGlobalIllumSO(CS.XGame.ClientConfig:GetString("HomeSceneSoAssetUrl"))
|
|
end
|
|
|
|
function XHomeSceneManager.IsInHomeScene()
|
|
return CurrentScene ~= nil
|
|
end
|
|
|
|
function XHomeSceneManager.SafeOpenBlack(targetTrans, isTweenCamera, paramName, cb)
|
|
local uiName = "UiBlackScreen"
|
|
if XLuaUiManager.IsUiShow(uiName) or XLuaUiManager.IsUiLoad(uiName) then
|
|
XLuaUiManager.Remove(uiName)
|
|
end
|
|
XLuaUiManager.Open(uiName, targetTrans, isTweenCamera, paramName, cb)
|
|
end
|
|
|
|
----------------------------光照信息接口 start-----------------------------
|
|
-- 设置场景光照信息
|
|
--function XHomeSceneManager.SetSceneType(sceneType)
|
|
-- XLog.Error(sceneType)
|
|
-- if CurrentScene then
|
|
-- CurrentScene:SetSceneType(sceneType)
|
|
-- end
|
|
--end
|
|
--
|
|
-- 重置为当前光照场景类型
|
|
--function XHomeSceneManager.ResetToCurrentSceneType()
|
|
-- if CurrentScene then
|
|
-- CurrentScene:ResetToCurrentSceneType()
|
|
-- end
|
|
--end
|
|
|
|
-- 设置全局光照
|
|
function XHomeSceneManager.SetGlobalIllumSO(soPath)
|
|
if CurrentScene then
|
|
CurrentScene:SetGlobalIllumSO(soPath)
|
|
end
|
|
end
|
|
|
|
-- 重置为当前场景全局光
|
|
function XHomeSceneManager.ResetToCurrentGlobalIllumination()
|
|
if CurrentScene then
|
|
CurrentScene:ResetToCurrentGlobalIllumination()
|
|
end
|
|
end
|
|
----------------------------光照信息接口 end----------------------------- |