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); } } } } }
public void ResetObjects() { foreach (Transform child in this.transform) { Destroy(child.gameObject); } resetSpawns = false; WorkerTokenSource.Cancel(); mainThreadActions.Clear(); ExtensionSingletons.ForEach(s => s.isStarted = false); foreach (ExtensionField field in fields) { if (field.enabled) { CreateInstance(field); } } }
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); }