Second commit
This commit is contained in:
commit
36840f3ad4
999 files changed
+61364
No files matched your search
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using Code.Infrastructure.Configs;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace Code.Infrastructure.Camera
|
||||
{
|
||||
public interface ICameraFactory
|
||||
{
|
||||
UniTask<CameraStateMachineContext.CameraLoadedData> CreateCameraStateMachine();
|
||||
void CreateCameraStateMachineRunner(CameraStateMachine cameraStateMachine);
|
||||
}
|
||||
|
||||
public class CameraFactory : IDisposable, ICameraFactory
|
||||
{
|
||||
private AsyncOperationHandle<GameCamera> _configHandle;
|
||||
private GameCamera _config;
|
||||
private AssetReference _gameCameraConfigReference;
|
||||
|
||||
private UnityEngine.Camera _camera;
|
||||
|
||||
public CameraFactory(IConfigLocator configLocator)
|
||||
{
|
||||
_gameCameraConfigReference = configLocator.TryGetConfigAssetReference<GameCamera>();
|
||||
}
|
||||
|
||||
public async UniTask<CameraStateMachineContext.CameraLoadedData> CreateCameraStateMachine()
|
||||
{
|
||||
_configHandle = Addressables.LoadAssetAsync<GameCamera>(_gameCameraConfigReference);
|
||||
await _configHandle.ToUniTask();
|
||||
_config = _configHandle.Result;
|
||||
|
||||
var cameraObject = new GameObject { name = "Camera" };
|
||||
|
||||
cameraObject.AddComponent<AudioListener>();
|
||||
_camera = cameraObject.AddComponent<UnityEngine.Camera>();
|
||||
|
||||
var universalCameraData = _camera.GetUniversalAdditionalCameraData();
|
||||
universalCameraData.renderPostProcessing = _config.PostProcessing;
|
||||
|
||||
_camera.fieldOfView = _config.FieldOfView;
|
||||
_camera.nearClipPlane = _config.NearClip;
|
||||
_camera.farClipPlane = _config.FarClip;
|
||||
_camera.clearFlags = _config.ClearFlags;
|
||||
|
||||
Object.DontDestroyOnLoad(cameraObject);
|
||||
|
||||
return new CameraStateMachineContext.CameraLoadedData(_camera);
|
||||
}
|
||||
|
||||
public void CreateCameraStateMachineRunner(CameraStateMachine cameraStateMachine)
|
||||
{
|
||||
var runner = _camera.AddComponent<CameraStateMachineRunner>();
|
||||
runner.SetStateMachine(cameraStateMachine);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Addressables.Release(_configHandle);
|
||||
Addressables.ReleaseInstance(_camera.gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user