private static async UniTask Start(IHostScreen screen) { UniTask.Void(async() => { await foreach (var _ in screen.Frames(FrameTiming.Update)) { if (screen.Keyboard.IsPress(Elffy.InputSystem.Keys.Escape)) { screen.Close(); } } }); var(drLayer, wLayer, uiLayer) = await LayerPipelines.CreateBuilder(screen).Build( () => new DeferredRenderingLayer(), () => new WorldLayer(), () => new UILayer()); InitializeLights(screen); var uiRoot = uiLayer.UIRoot; var timings = screen.TimingPoints; uiRoot.Background = Color4.Black; try { await ParallelOperation.WhenAll( //Sample.CreateUI(uiLayer.UIRoot), CreateDice2(drLayer), CreateCameraMouse(wLayer, new Vector3(0, 3, 0)), CreateDice(wLayer), CreateModel2(wLayer), CreateBox(wLayer), CreateFloor(wLayer), //CreateFloor2(wLayer), CreateSky(wLayer), timings.Update.DelayTime(800)); var time = TimeSpanF.FromMilliseconds(200); await foreach (var frame in timings.Update.Frames()) { if (frame.Time >= time) { break; } uiRoot.Background.A = 1f - frame.Time / time; } } finally { uiRoot.Background = Color4.Transparent; } }
private static async void OnScreenInitialized(IHostScreen screen) { //Timing.Initialize(screen); //Game.Initialize(screen); ExceptionDispatchInfo?edi = null; try { await(_func?.Invoke(screen) ?? throw new InvalidOperationException("func is null")); } catch (Exception ex) { edi = ExceptionDispatchInfo.Capture(ex); await screen.TimingPoints.Update.Next(); } finally { screen.Close(); //Timing.Clear(); //Game.Clear(); _func = null; } edi?.Throw(); }