2025-06-04 05:02:57 +08:00

169 lines
4.1 KiB
Plaintext

GOManager_Camera = class("GOManager_Camera")
GOManager_Camera.CameraID = {
MainCamera = 1,
SceneUICamera = 2,
SceneUIBackgroundCamera = 3,
Count = 3
}
local CameraID = GOManager_Camera.CameraID
local function ApplyVRMode(camera, enable, setSkybox)
if nil ~= camera then
local vrCamera = camera:GetComponent(VRCamera)
if nil == vrCamera then
if not enable then
return
end
vrCamera = camera.gameObject:AddComponent(VRCamera)
end
vrCamera.leftCamera = camera
vrCamera.enable = enable
if enable and setSkybox then
local rightCamera = vrCamera.rightCamera
if nil ~= rightCamera then
local leftSkybox = camera:GetComponent(Skybox)
vrCamera.leftSkybox = leftSkybox
if nil ~= leftSkybox then
local rightSkybox = rightCamera:GetComponent(Skybox)
if nil == rightSkybox then
rightSkybox = rightCamera.gameObject:AddComponent(Skybox)
end
vrCamera.rightSkybox = rightSkybox
end
end
end
end
end
function GOManager_Camera:ctor()
self.cameras = {}
self.vrMode = false
end
function GOManager_Camera:Clear()
for i=1, CameraID.Count do
self:SetCamera(nil, i, (CameraID.SceneUIBackgroundCamera == i))
end
end
function GOManager_Camera:SetVRMode(enable)
if enable == self.vrMode then
return
end
self.vrMode = enable
for i=1, CameraID.Count do
ApplyVRMode(self.cameras[i], enable, CameraID.SceneUIBackgroundCamera==i)
end
end
function GOManager_Camera:DeterminMainCamera()
local mainCamera = self.cameras[CameraID.MainCamera]
if nil == mainCamera then
mainCamera = Camera.main
if nil ~= mainCamera then
self:SetCamera(mainCamera, CameraID.MainCamera)
end
end
Game.CullingObjectManager:SetCamera(mainCamera)
end
function GOManager_Camera:ClearMainCamera()
local mainCamera = self.cameras[CameraID.MainCamera]
self.cameras[CameraID.MainCamera] = nil
Game.CullingObjectManager:ClearCamera(mainCamera)
end
function GOManager_Camera:GetCamera(ID)
return self.cameras[ID]
end
function GOManager_Camera:SetCamera(camera, ID)
self.cameras[ID] = camera
local setSkybox = false
if CameraID.SceneUIBackgroundCamera == ID then
local material = nil
if nil ~= camera then
local skyboxRender = camera.gameObject:GetComponent(Skybox)
Debug_AssertFormat(nil ~= skyboxRender, "SetSkyboxCamera({0}) no skybox render: {1}", camera, ID)
Debug_AssertFormat(nil ~= skyboxRender.material, "SetSkyboxCamera({0}) no skybox material: {1}", camera, ID)
material = skyboxRender.material
end
Game.EnviromentManager:SetSkyboxCamera(camera, material)
setSkybox = true
end
ApplyVRMode(camera, self.vrMode, setSkybox)
end
function GOManager_Camera:ClearCamera(obj)
local cameraID = obj.ID
local camera = self.cameras[cameraID]
if nil ~= camera and camera.gameObject == obj.gameObject then
self:SetCamera(nil, cameraID)
return true
end
return false
end
function GOManager_Camera:RegisterGameObject(obj)
local objID = obj.ID
Debug_AssertFormat((0 < objID and CameraID.Count >=objID), "RegisterLight({0}) invalid id: {1}", obj, objID)
local camera = obj.gameObject:GetComponent(Camera)
Debug_AssertFormat(nil ~= camera, "RegisterCamera({0}) no camera: {1}", obj, objID)
self:SetCamera(camera, objID)
return true
end
function GOManager_Camera:UnregisterGameObject(obj)
if not self:ClearCamera(obj) then
Debug_AssertFormat(false, "UnregisterCamera({0}) failed: {1}", obj, obj.ID)
return false
end
return true
end
function GOManager_Camera:ActiveMainCamera(b)
local main_cameraid = GOManager_Camera.CameraID.MainCamera;
local camera = self.cameras[main_cameraid];
if(camera ~= nil)then
if(self.activiteLt)then
self.activiteLt:cancel();
self.activiteLt = nil;
end
local state = camera.enabled;
if(state == b)then
return;
end
if(not b)then
-- Camera在被Activity false的時候OnGui的Event.current事件型別會切換為LayOut, 無法觸發轉盤的FadeOut
self.activiteLt = LeanTween.delayedCall(2,function ()
camera.enabled = false;
self.activiteLt = nil;
end);
else
camera.enabled = true;
end
end
end
function GOManager_Camera:CancelActiviteLt()
if(self.activiteLt == nil)then
return;
end
end