using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit; using BITKit.Animations; using BITKit.StateMachine; using System.Linq; 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 name) { } } public class EntityEquipment : EntityComponent { public EntryGroup equips = new(); protected IEquipBase entryComplete; 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); } } } }