69 lines
2.2 KiB
C#
69 lines
2.2 KiB
C#
using System;
|
|
using BITKit.Entities.Player;
|
|
using BITKit.PlayerCamera;
|
|
using Cinemachine;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.InputSystem.Interactions;
|
|
|
|
namespace BITKit.Entities
|
|
{
|
|
[CustomType(typeof(IPlayerCameraService))]
|
|
public class EntityCamera : EntityPlayerBehavior, IPlayerCameraService
|
|
{
|
|
[Header(Constant.Header.Components)]
|
|
[SerializeField] private CinemachineVirtualCameraBase aliveCamera;
|
|
[SerializeField] private CinemachineVirtualCameraBase deathCamera;
|
|
|
|
[Header(Constant.Header.Reference)]
|
|
[SerializeReference, SubclassSelector] public IReference _onSetAlive;
|
|
|
|
|
|
private readonly ValidHandle _cameraActivatedHandle = new();
|
|
|
|
public override void OnAwake()
|
|
{
|
|
var heal = UnityEntity.Get<IHealth>();
|
|
heal.OnSetAlive += OnSetAlive;
|
|
|
|
_cameraActivatedHandle.AddListener(x =>
|
|
{
|
|
WorldCameraManager.IsCameraActivated = x;
|
|
IsCameraActivated = x;
|
|
OnCameraActivated?.Invoke(x);
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public override void OnStart()
|
|
{
|
|
base.OnStart();
|
|
_cameraActivatedHandle.Invoke();
|
|
}
|
|
|
|
public override void OnUpdate(float deltaTime)
|
|
{
|
|
if (WorldCameraManager.ActiveCamera is null) return;
|
|
|
|
base.OnUpdate(deltaTime);
|
|
|
|
_cameraActivatedHandle.SetElements(this, (CinemachineVirtualCameraBase)WorldCameraManager.ActiveCamera == aliveCamera);
|
|
|
|
CameraRotation = WorldCameraManager.ActiveCamera.State.RawOrientation;
|
|
CameraPosition = WorldCameraManager.ActiveCamera.State.RawPosition;
|
|
}
|
|
|
|
private void OnSetAlive(bool alive)
|
|
{
|
|
aliveCamera.enabled = alive;
|
|
deathCamera.enabled = alive is false;
|
|
}
|
|
public bool IsCameraActivated { get; private set; }
|
|
public event Action<bool> OnCameraActivated;
|
|
public Quaternion CameraRotation { get; private set; }
|
|
public Vector3 CameraPosition { get; private set; }
|
|
}
|
|
} |