private static void RunOnStartup() { int initOperationsCount = 20; for (int i = 0; i < initOperationsCount; i++) { OperationQueueAndRunnerWrapper wrapper = MakeOperationQueueAndRunnerWrapper(); _wrappers.Add(wrapper); // Callbacks wrapper.operationQueue.OnStart += () => { wrapper.operationRunner.name = wrapper.operationQueue.name; }; wrapper.operationQueue.OnStop += () => { wrapper.operationRunner.name = "_Idle"; _wrappers.Add(wrapper); }; wrapper.operationQueue.OnFinish += () => { wrapper.operationRunner.name = "_Idle"; _wrappers.Add(wrapper); }; } }
public static void RunActionAfterSeconds(string name, float seconds, Action action) { OperationQueueAndRunnerWrapper wrapper = GetOrMakeOperationQueueAndRunnerWrapper(); wrapper.operationQueue.name = name; wrapper.operationQueue.AddOperation(RoutineRunActionAfterSeconds(seconds, action)); wrapper.operationQueue.Start(wrapper.operationRunner); }
private static OperationQueueAndRunnerWrapper GetOrMakeOperationQueueAndRunnerWrapper() { // Get a wrapper or make if there's none in the // buffer if (_wrappers.Count > 0) { OperationQueueAndRunnerWrapper wrapper = _wrappers[0]; _wrappers.RemoveAt(0); return(wrapper); } else { return(MakeOperationQueueAndRunnerWrapper()); } }
private static OperationQueueAndRunnerWrapper MakeOperationQueueAndRunnerWrapper() { // Make a non-destroyable container of the wrappers in the hierarchy // for a clean display if (_operationsContainer == null) { _operationsContainer = Utilities.CreateOrGetObject("OperationQueueHelper").GetComponent <Transform>(); UnityEngine.Object.DontDestroyOnLoad(_operationsContainer.gameObject); } // Makes a wrapper and puts it in a container in the hierarchy OperationQueueAndRunnerWrapper wrapper = new OperationQueueAndRunnerWrapper() { operationQueue = new OperationQueue(), operationRunner = new GameObject("_Idle").AddComponent <OperationQueue.OperationRunner>(), }; wrapper.operationRunner.GetComponent <Transform>().SetParent(_operationsContainer); return(wrapper); }