using System; using System.Collections; using System.Collections.Generic; using NitroxModel.Packets; namespace NitroxClient.GameLogic.InitialSync.Abstract; public abstract class InitialSyncProcessor : IInitialSyncProcessor { public virtual List> Steps { get; } = new(); public virtual HashSet DependentProcessors { get; } = new(); public virtual IEnumerator Process(InitialPlayerSync packet, WaitScreen.ManualWaitItem waitScreenItem) { for (int i = 0; i < Steps.Count; i++) { yield return Steps[i](packet); waitScreenItem.SetProgress((float)i / Steps.Count); yield return null; } } public void AddDependency() where TDependency : IInitialSyncProcessor { DependentProcessors.Add(typeof(TDependency)); } public void AddStep(Func step) { Steps.Add(step); } public void AddStep(Action step) { Steps.Add(sync => { step(sync); return Array.Empty().GetEnumerator(); }); } public void AddStep(Func step) { Steps.Add(_ => step()); } }