using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityScene = UnityEngine.SceneManagement.Scene;
namespace FishNet.Managing.Scened
{
    public abstract class SceneProcessorBase : MonoBehaviour
    {
        #region Protected.
        /// 
        /// SceneManager for this processor.
        /// 
        protected SceneManager SceneManager;
        #endregion
        /// 
        /// Initializes this script for use.
        /// 
        /// SceneManager which will be utilizing this class.
        public virtual void Initialize(SceneManager manager)
        {
            SceneManager = manager;
        }
        /// 
        /// Called when scene loading has begun.
        /// 
        public virtual void LoadStart(LoadQueueData queueData) { }
        /// 
        /// Called when scene loading has ended.
        /// 
        public virtual void LoadEnd(LoadQueueData queueData) { }
        /// 
        /// Called when scene unloading has begun within a load operation.
        /// 
        public virtual void UnloadStart(LoadQueueData queueData) { }
        /// 
        /// Called when scene unloading has ended within a load operation.
        /// 
        public virtual void UnloadEnd(LoadQueueData queueData) { }
        /// 
        /// Called when scene unloading has begun within an unload operation.
        /// 
        public virtual void UnloadStart(UnloadQueueData queueData) { }
        /// 
        /// Called when scene unloading has ended within an unload operation.
        /// 
        public virtual void UnloadEnd(UnloadQueueData queueData) { }
        /// 
        /// Begin loading a scene using an async method.
        /// 
        /// Scene name to load.
        public abstract void BeginLoadAsync(string sceneName, LoadSceneParameters parameters);
        /// 
        /// Begin unloading a scene using an async method.
        /// 
        /// Scene name to unload.
        public abstract void BeginUnloadAsync(Scene scene);
        /// 
        /// Returns if a scene load or unload percent is done.
        /// 
        /// 
        public abstract bool IsPercentComplete();
        /// 
        /// Returns the progress on the current scene load or unload.
        /// 
        /// 
        public abstract float GetPercentComplete();
        /// 
        /// Adds a scene to loaded scenes.
        /// 
        /// Scene loaded.
        public virtual void AddLoadedScene(Scene scene) { }
        /// 
        /// Returns scenes which were loaded during a load operation.
        /// 
        public abstract List GetLoadedScenes();
        /// 
        /// Activates scenes which were loaded.
        /// 
        public abstract void ActivateLoadedScenes();
        /// 
        /// Returns if all asynchronized tasks are considered IsDone.
        /// 
        /// 
        public abstract IEnumerator AsyncsIsDone();
    }
}