public async UniTask ResetStateAsync(string[] exclude = null, params Func <UniTask>[] tasks)
        {
            OnResetStarted?.Invoke();

            if (Configuration.LoadStartDelay > 0)
            {
                await UniTask.Delay(TimeSpan.FromSeconds(Configuration.LoadStartDelay));
            }

            Engine.GetService <IScriptPlayer>()?.Playlist?.ReleaseResources();

            if (exclude != null && exclude.Length > 0)
            {
                Engine.Reset(exclude.Select(typeName => Type.GetType($"Naninovel.{typeName}", true, true)).ToArray());
            }
            else
            {
                Engine.Reset();
            }

            await Resources.UnloadUnusedAssets();

            if (tasks != null)
            {
                foreach (var task in tasks)
                {
                    await task?.Invoke();
                }
            }

            OnResetFinished?.Invoke();
        }
Beispiel #2
0
        public virtual async UniTask ResetStateAsync(Type[] exclude, params Func <UniTask>[] tasks)
        {
            OnResetStarted?.Invoke();

            if (Configuration.LoadStartDelay > 0)
            {
                await UniTask.Delay(TimeSpan.FromSeconds(Configuration.LoadStartDelay));
            }

            scriptPlayer?.Playlist?.ReleaseResources();

            Engine.Reset(exclude);

            await Resources.UnloadUnusedAssets();

            if (tasks != null)
            {
                foreach (var task in tasks)
                {
                    if (task != null)
                    {
                        await task.Invoke();
                    }
                }
            }

            OnResetFinished?.Invoke();
        }
Beispiel #3
0
        /// <summary>
        /// Resets all the engine services and unloads unused assets; will basically revert to an empty initial engine state.
        /// The operation will invoke default on-load events, allowing to mask the process with a loading screen.
        /// </summary>
        /// <param name="additionalTasks">Additional tasks to perform during the reset (will be performed in order after the reset).</param>
        public async Task ResetStateAsync(params Func <Task>[] additionalTasks)
        {
            OnResetStarted?.Invoke();

            if (config.LoadStartDelay > 0)
            {
                await new WaitForSeconds(config.LoadStartDelay);
            }

            Engine.Reset();
            await Resources.UnloadUnusedAssets();

            if (additionalTasks != null)
            {
                foreach (var task in additionalTasks)
                {
                    await task?.Invoke();
                }
            }

            OnResetFinished?.Invoke();
        }