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(); } }); }
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); }
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); }
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); } }
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); }
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; }