public void FixedUpdate() { if (resetSpawns) { ResetObjects(); } else if (WorkerTokenSource.IsCancellationRequested) { WorkerTokenSource = new System.Threading.CancellationTokenSource(); } else { if (workers.Count(i => ExtensionSingletons.Where(j => j.GetType().IsAssignableFrom(i.Key)).First().isStarted) > 0) { StartCoroutine("StartWorkers"); } if (mainThreadActions.Count() > 0) { lock (mainThreadActions) { System.Action act = mainThreadActions.FirstOrDefault(); if (act != null) { act.Invoke(); mainThreadActions.RemoveAt(0); } } } } }
private void CreateInstance(ExtensionField field) { if (field.targetType == null) { UnityEngine.Debug.Log($"[Area::{this.name}]: Unable to load extesion type of \"{field.targetType}\"."); return; } ExtensionBase extensionInstance = ExtensionSingletons .Where(t => t.GetType().IsAssignableFrom(field.targetType)) .FirstOrDefault(); if (extensionInstance == null) { extensionInstance = (ExtensionBase)System.Activator.CreateInstance(field.targetType); ExtensionSingletons.Add(extensionInstance); } System.Threading.CancellationToken token = WorkerTokenSource.Token; workers[field.targetType] = extensionInstance.GetWorker(token, this); }