using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; using BITKit.Animations; using BITKit.StateMachine; using System.Linq; using BITFALL.Player.Equip; using Cinemachine; namespace BITKit.Entities { public interface IEquipBase : IEntryElement, IAwake, IStart, IUpdate { public const string _Equip = "Equip"; string AddressablePath { get; } IEntity Entity { get; set; } void PlayAudio(string name); } public abstract class BITEquipBase : StateBasedMonoBehaviour, IEquipBase where T : IState { [Header(Constant.Header.Components)] public UnityAnimator animator; [Header(Constant.Header.InternalVariables)] protected IEntity entity; public IEntity Entity { get => entity; set => entity = value; } public virtual string AddressablePath => throw new System.NotImplementedException(); public virtual void Entry() { } public virtual void Exit() { } public virtual void OnAwake() {Initialize();} public virtual void OnStart() { } public virtual void OnUpdate(float deltaTime) { } public virtual void PlayAudio(string eventName) { } public virtual void EquipEvent(string eventName){} public virtual void AnimationEvent(string eventName){} } [CustomType(typeof(IEquipService))] public class EntityEquipment : EntityComponent,IEquipService { public EntryGroup equips = new(); public IOptional Zoom { get; } = new Optional(){Value = 1}; public float InitialFov; [SerializeField] private CinemachineVirtualCamera virtualCamera; protected IEquipBase entryComplete; private PlayerConfig playerConfig; public override void OnStart() { base.OnStart(); equips.list = GetComponentsInChildren(true).ToList(); foreach (var x in equips.list) { x.Entity = entity; x.OnAwake(); } foreach (var x in equips.list) { x.OnStart(); } } public override void OnUpdate(float deltaTime) { if (equips.TryGetEntried(out entryComplete)) { entryComplete.OnUpdate(deltaTime); } var current = virtualCamera.m_Lens.FieldOfView; current= Mathf.Lerp(current,Zoom.Allow ? InitialFov / Zoom.Value : PlayerConfig.Singleton.Fov , deltaTime * 5); current = Mathf.Clamp(current, 10, PlayerConfig.Singleton.Fov); virtualCamera.m_Lens.FieldOfView = current; } } }