BITFALL/Assets/BITKit/Unity/Scripts/Entity/Components/Camera/EntityCamera.cs

69 lines
2.2 KiB
C#
Raw Normal View History

2023-11-30 00:23:23 +08:00
using System;
2023-08-27 02:58:19 +08:00
using BITKit.Entities.Player;
2023-11-30 00:23:23 +08:00
using BITKit.PlayerCamera;
using Cinemachine;
2023-06-08 14:09:50 +08:00
using UnityEngine;
2023-11-30 00:23:23 +08:00
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Interactions;
2023-06-08 14:09:50 +08:00
namespace BITKit.Entities
{
2023-11-30 00:23:23 +08:00
[CustomType(typeof(IPlayerCameraService))]
public class EntityCamera : EntityPlayerBehavior, IPlayerCameraService
2023-06-08 14:09:50 +08:00
{
[Header(Constant.Header.Components)]
2023-11-30 00:23:23 +08:00
[SerializeField] private CinemachineVirtualCameraBase aliveCamera;
[SerializeField] private CinemachineVirtualCameraBase deathCamera;
2023-06-08 14:09:50 +08:00
[Header(Constant.Header.Reference)]
[SerializeReference, SubclassSelector] public IReference _onSetAlive;
2023-11-30 00:23:23 +08:00
private readonly ValidHandle _cameraActivatedHandle = new();
2023-08-27 02:58:19 +08:00
public override void OnAwake()
2023-06-08 14:09:50 +08:00
{
2023-10-30 01:25:53 +08:00
var heal = UnityEntity.Get<IHealth>();
2023-08-27 02:58:19 +08:00
heal.OnSetAlive += OnSetAlive;
2023-11-30 00:23:23 +08:00
_cameraActivatedHandle.AddListener(x =>
{
WorldCameraManager.IsCameraActivated = x;
IsCameraActivated = x;
OnCameraActivated?.Invoke(x);
});
2023-06-08 14:09:50 +08:00
}
2023-11-30 00:23:23 +08:00
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;
}
2023-08-23 01:59:40 +08:00
private void OnSetAlive(bool alive)
2023-06-08 14:09:50 +08:00
{
aliveCamera.enabled = alive;
deathCamera.enabled = alive is false;
}
2023-11-30 00:23:23 +08:00
public bool IsCameraActivated { get; private set; }
public event Action<bool> OnCameraActivated;
public Quaternion CameraRotation { get; private set; }
public Vector3 CameraPosition { get; private set; }
2023-06-08 14:09:50 +08:00
}
}