Exemplo n.º 1
0
        public override void Start()
        {
            Game.Services.AddService <ISceneNavigationService>(this);

            if (StartScene != null)
            {
                var navTo = new SceneHistoryItem
                {
                    Scene      = StartScene,
                    KeepLoaded = KeepStartSceneLoaded,
                };

                if (!Content.TryGetAssetUrl(StartScene, out navTo.AssetName) && KeepStartSceneLoaded)
                {
                    Log.Warning("Start Scene must be an Asset.");
                }

                Navigate(navTo, false);
            }

            //TODO: Put this else where
            Script.AddTask(async() => {
                while (Game.IsRunning)
                {
                    var y = (int)Game.GraphicsContext.CommandList.Viewport.Height;
                    y    -= 10;

                    DebugText.Print($"Number of running tasks: {Script.Scheduler.MicroThreads.Count}", new Int2(0, y));

                    await Script.NextFrame();
                }
            });
        }
Exemplo n.º 2
0
        public async Task <bool> NavigateAsync(string url, bool keepLoaded = false, bool rememberCurrent = true)
        {
            if (IsNavigating)
            {
                return(false);
            }

            IsNavigating = true;

            if (!Content.Exists(url))
            {
                return(false);
            }

            var navTo = new SceneHistoryItem
            {
                Scene      = await Content.LoadAsync <Scene>(url),
                AssetName  = url,
                KeepLoaded = keepLoaded,
            };

            Navigate(navTo, rememberCurrent);

            IsNavigating = false;
            return(true);
        }
Exemplo n.º 3
0
        public override void Cancel()
        {
            Game.Services.RemoveService <ISceneNavigationService>();

            ClearHistory();

            if (currentItem.Scene != null)
            {
                SceneSystem.SceneInstance.RootScene.Children.Remove(currentItem.Scene);

                if (currentItem.Scene != StartScene)
                {
                    Content.Unload(currentItem.Scene);
                }
            }
            ClearHistory();

            currentItem = default(SceneHistoryItem);
        }
Exemplo n.º 4
0
        public override void Start()
        {
            Game.Services.AddService <ISceneNavigationService>(this);

            if (StartScene != null)
            {
                var navTo = new SceneHistoryItem
                {
                    Scene      = StartScene,
                    KeepLoaded = KeepStartSceneLoaded
                };

                if (!Content.TryGetAssetUrl(StartScene, out navTo.AssetName) && KeepStartSceneLoaded)
                {
                    Log.Warning("Start Scene must be an Asset.");
                }

                Navigate(navTo, false);
            }
        }
Exemplo n.º 5
0
        private async Task <bool> GoAsync(bool canNavigate, List <SceneHistoryItem> navigationFromStack, List <SceneHistoryItem> navigationToStack, bool rememberCurrent)
        {
            if (IsNavigating)
            {
                return(false);
            }

            IsNavigating = true;

            if (!canNavigate)
            {
                IsNavigating = false;
                return(false);
            }

            var navTo = navigationFromStack.Pop();

            if (navTo.Scene == null)
            {
                navTo.Scene = await Content.LoadAsync <Scene>(navTo.AssetName);
            }

            SceneSystem.SceneInstance.RootScene.Children.Remove(currentItem.Scene);

            if (!currentItem.KeepLoaded)
            {
                Content.Unload(currentItem.Scene);
                currentItem.Scene = null;
            }

            if (rememberCurrent)
            {
                navigationToStack.Push(currentItem);
            }

            SceneSystem.SceneInstance.RootScene.Children.Add(navTo.Scene);

            currentItem  = navTo;
            IsNavigating = false;
            return(true);
        }
Exemplo n.º 6
0
        private void Navigate(SceneHistoryItem navTo, bool rememberCurrent)
        {
            if (currentItem.Scene != null)
            {
                SceneSystem.SceneInstance.RootScene.Children.Remove(currentItem.Scene);

                if (!currentItem.KeepLoaded)
                {
                    Content.Unload(currentItem.Scene);
                    currentItem.Scene = null;
                }

                if (rememberCurrent)
                {
                    back.Push(currentItem);
                }
            }

            SceneSystem.SceneInstance.RootScene.Children.Add(navTo.Scene);

            currentItem = navTo;
        }