예제 #1
0
        protected override Task <Scene> OnLoadAsync(string id, ISceneLoadParameters parameters, IContext context)
        {
            var provider = context.Get <IProvider <string, ISceneInfo> >();
            var info     = provider.Get <TInfo>(id);

            return(OnLoadAsync(id, info, (TLoadParameters)parameters, context));
        }
        public async Task <Scene> LoadAsync(string id, ISceneLoadParameters parameters)
        {
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(id));
            }
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            LogSceneLoad(id, parameters, true);

            Loading?.Invoke(id, parameters);

            Scene scene = await OnLoadAsync(id, parameters);

            SceneInstance instance = OnAddScene(id, scene, parameters);

            Instances.Add(scene, instance);

            Loaded?.Invoke(id, scene, parameters);

            LogSceneLoaded(id, scene, parameters, true);

            return(scene);
        }
예제 #3
0
 private static void LogSceneLoaded(string id, ISceneInfo info, ISceneLoadParameters parameters, Scene scene, bool isAsync = false)
 {
     Log.Debug("Manager Scene Loader loaded", new
     {
         id,
         info = new
         {
             info.LoaderId,
             info.Address
         },
         parameters = new
         {
             parameters.AddMode,
             parameters.PhysicsMode,
             parameters.AllowActivation
         },
         scene = new
         {
             scene.handle,
             scene.name,
             scene.path,
             scene.buildIndex,
             scene.rootCount,
             scene.isSubScene
         },
         isAsync
     });
 }
        protected virtual Scene OnLoad(string id, ISceneLoadParameters parameters)
        {
            ISceneLoader loader = this.GetLoaderByScene(id);

            Scene scene = loader.Load(id, parameters, Context);

            return(scene);
        }
        protected virtual Task <Scene> OnLoadAsync(string id, ISceneLoadParameters parameters)
        {
            ISceneLoader loader = this.GetLoaderByScene(id);

            Task <Scene> task = loader.LoadAsync(id, parameters, Context);

            return(task);
        }
        protected virtual SceneInstance OnAddScene(string id, Scene scene, ISceneLoadParameters parameters)
        {
            if (Description.RegisterApplicationForScenes && ProviderInstance.TryGet(out IProvider <Scene, IApplication> provider) && !provider.Entries.ContainsKey(scene))
            {
                provider.Add(scene, Application);
            }

            return(new SceneInstance(scene, id));
        }
 private static void LogSceneLoad(string id, ISceneLoadParameters parameters, bool isAsync = false)
 {
     Log.Debug("Scene loading", new
     {
         id,
         parameters = new
         {
             parameters.AddMode,
             parameters.PhysicsMode,
             parameters.AllowActivation
         },
         isAsync
     });
 }
예제 #8
0
        public Task <Scene> LoadAsync(string id, ISceneLoadParameters parameters, IContext context)
        {
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(id));
            }
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            return(OnLoadAsync(id, parameters, context));
        }
예제 #9
0
        protected override Scene OnLoad(string id, ISceneInfo info, ISceneLoadParameters parameters, IContext context)
        {
            LogSceneLoading(id, info, parameters);

            var options = new LoadSceneParameters(parameters.AddMode, parameters.PhysicsMode);

            Scene scene = SceneManager.LoadScene(info.Address, options);

            if (RegisterApplication)
            {
                OnRegisterApplication(scene, context);
            }

            LogSceneLoaded(id, info, parameters, scene);

            return(scene);
        }
예제 #10
0
 private static void LogSceneLoading(string id, ISceneInfo info, ISceneLoadParameters parameters, bool isAsync = false)
 {
     Log.Debug("Manager Scene Loader loading", new
     {
         id,
         info = new
         {
             info.LoaderId,
             info.Address
         },
         parameters = new
         {
             parameters.AddMode,
             parameters.PhysicsMode,
             parameters.AllowActivation
         },
         isAsync
     });
 }
 private static void LogSceneLoaded(string id, Scene scene, ISceneLoadParameters parameters, bool isAsync = false)
 {
     Log.Debug("Scene loaded", new
     {
         id,
         scene = new
         {
             scene.handle,
             scene.name,
             scene.path,
             scene.buildIndex,
             scene.rootCount,
             scene.isSubScene
         },
         parameters = new
         {
             parameters.AddMode,
             parameters.PhysicsMode,
             parameters.AllowActivation
         },
         isAsync
     });
 }
 protected SceneLoader(ISceneLoadParameters defaultLoadParameters, ISceneUnloadParameters defaultUnloadParameters) : base(defaultLoadParameters, defaultUnloadParameters)
 {
 }
예제 #13
0
        public static bool TryGetDefaultLoadParametersByScene(this ISceneModule sceneModule, string id, out ISceneLoadParameters parameters)
        {
            if (TryGetLoaderByScene(sceneModule, id, out ISceneLoader loader))
            {
                parameters = loader.DefaultLoadParameters;
                return(true);
            }

            parameters = null;
            return(false);
        }
예제 #14
0
        public static Task <Scene> LoadAsync(this ISceneModule sceneModule, string id)
        {
            ISceneLoadParameters parameters = GetDefaultLoadParametersByScene(sceneModule, id);

            return(sceneModule.LoadAsync(id, parameters));
        }
예제 #15
0
 protected SceneLoaderBase(ISceneLoadParameters defaultLoadParameters, ISceneUnloadParameters defaultUnloadParameters)
 {
     DefaultLoadParameters   = defaultLoadParameters ?? throw new ArgumentNullException(nameof(defaultLoadParameters));
     DefaultUnloadParameters = defaultUnloadParameters ?? throw new ArgumentNullException(nameof(defaultUnloadParameters));
 }
예제 #16
0
        protected override async Task <Scene> OnLoadAsync(string id, ISceneInfo info, ISceneLoadParameters parameters, IContext context)
        {
            LogSceneLoading(id, info, parameters, true);

            var provider = ProviderInstance.Get <IProvider <Scene, AsyncOperation> >();
            var options  = new LoadSceneParameters(parameters.AddMode, parameters.PhysicsMode);

            AsyncOperation operation = SceneManager.LoadSceneAsync(info.Address, options);
            Scene          scene     = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);

            if (RegisterApplication)
            {
                OnRegisterApplication(scene, context);
            }

            operation.allowSceneActivation = parameters.AllowActivation;
            provider.Add(scene, operation);

            if (operation.allowSceneActivation)
            {
                while (!operation.isDone)
                {
                    await Task.Yield();
                }

                provider.Remove(scene);
            }
            else
            {
                while (operation.progress < 0.9F)
                {
                    await Task.Yield();
                }
            }

            LogSceneLoaded(id, info, parameters, scene, true);

            return(scene);
        }
예제 #17
0
 public ManagerSceneLoader(ISceneLoadParameters defaultLoadParameters, ISceneUnloadParameters defaultUnloadParameters) : base(defaultLoadParameters, defaultUnloadParameters)
 {
 }
예제 #18
0
 protected abstract Scene OnLoad(string id, ISceneLoadParameters parameters, IContext context);
예제 #19
0
 protected abstract Task <Scene> OnLoadAsync(string id, ISceneLoadParameters parameters, IContext context);