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; } }
public FrameAsyncEnumerable Frames(CancellationToken cancellationToken = default) { return(_screen.Frames(_timing, cancellationToken)); }