namespace Fusion.Addons.KCC { using System.Collections.Generic; using UnityEngine; /// /// Container for manually registered modifiers. Processor needs to be cached (accessed every frame). /// public sealed partial class KCCModifier : KCCInteraction { // PUBLIC MEMBERS public IKCCProcessor Processor; // KCCInteraction INTERFACE public override void Initialize() { Processor = Provider is IKCCProcessorProvider processorProvider ? processorProvider.GetProcessor() : null; } public override void Deinitialize() { Processor = null; } public override void CopyFromOther(KCCModifier other) { Processor = other.Processor; } } /// /// Collection dedicated to tracking of manually registered modifiers and their processors. Managed entirely by KCC component. /// public sealed partial class KCCModifiers : KCCInteractions { // PUBLIC METHODS public bool HasProcessor() where T : class { for (int i = 0, count = All.Count; i < count; ++i) { if (All[i].Processor is T) return true; } return false; } public bool HasProcessor(T processor) where T : Component, IKCCProcessor { for (int i = 0, count = All.Count; i < count; ++i) { if (object.ReferenceEquals(All[i].Processor, processor) == true) return true; } return false; } public T GetProcessor() where T : class { for (int i = 0, count = All.Count; i < count; ++i) { if (All[i].Processor is T processor) return processor; } return default; } public void GetProcessors(List processors, bool clearList = true) where T : class { if (clearList == true) { processors.Clear(); } for (int i = 0, count = All.Count; i < count; ++i) { if (All[i].Processor is T processor) { processors.Add(processor); } } } } }