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