예제 #1
0
        public async Task Run()
        {
            var rf      = Graphics.Device.ResourceFactory;
            var ninject = new StandardKernel(new FluentNinjectModule(_ => _
                                                                     .BindExisting(Graphics)
                                                                     .BindExisting(Assets)
                                                                     .BindExisting(Spatial)
                                                                     ));
            var layers = new IViewLayer[]
            {
                // order is bottom to top!
                ninject.Get <SpatialViewLayer>(),
                ninject.Get <DebugViewLayer>()
            }.ToImmutableArray();

            using var commands     = new Commands(Graphics);
            using var intermediate = new IntermediateFramebuffer(Graphics, Assets, Blend.Override, DepthTest.Off,
                                                                 Graphics.Device.SwapchainFramebuffer.OutputDescription);
            while (!Window.ShouldQuit)
            {
                if (Graphics.FrameReady)
                {
                    continue;                      // main thread hadn't sent last frame to screen yet
                }
                try
                {
                    intermediate.Validate();

                    // ReSharper disable AccessToDisposedClosure
                    commands.Submit(x =>
                    {
                        x.SetFramebuffer(intermediate);
                        x.ClearColorTarget(0, RgbaFloat.White);
                        x.ClearDepthStencil(1);
                    });

                    foreach (var layer in layers)
                    {
                        await layer.Draw(intermediate);
                    }
                    await intermediate.Draw(Graphics.Device.SwapchainFramebuffer);

                    Graphics.FrameReady = true;
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Error rendering frame.");
                }
            }

            foreach (var viewLayer in layers)
            {
                viewLayer.Dispose();
            }
        }
예제 #2
0
        private void _RegisterViewLayerByView(IViewLayer layer)
        {
            var view = layer.GetView();

            if (!_viewLayersByView.ContainsKey(view))
            {
                _viewLayersByView.Add(view, new List <IViewLayer>());
            }

            _viewLayersByView[view].Add(layer);
        }
예제 #3
0
        private void InitViewProperties(IViewport viewport, IViewLayer layer)
        {
            var view = viewport.View;

            Debug.Assert(view != null, nameof(view) + " != null");
            Scene        = layer.VisibleScene;
            ViewportSize = new IntSize2(viewport.Width, viewport.Height);
            AspectRatio  = viewport.AspectRatio;
            var camera  = layer.Camera;
            var viewMat = camera.GetViewMat();
            var projMat = camera.GetProjectionMat(AspectRatio);

            ViewProjection = viewMat * projMat;
        }
예제 #4
0
        public ModuleConstructor(IViewLayer vl, params PointF[] addPoints)
        {
            InfoLine = new ReactiveShape<Line>(new Line { Render = new LineRender { Pen = new Pen(Color.Gray, 0.1f), IsVisible = true } });
            AreaPic = new ReactiveShape<Circle>(new Circle
                                                    {
                                                        Radius = 10,
                                                        Render =
                                                        {
                                                            Pen = new Pen(Color.DimGray, 0.5f),
                                                            Brush = Brushes.AliceBlue,
                                                            IsFulled = true
                                                        }
                                                    });
            FillerConstraint = new Dictionary<string, Func<Polygon, bool>>
                                   {
                                       {"TriangleOrMore",       polygon => polygon.Count > 2},          // треугольник или больше
                                       {"NotSelfIntersection",  polygon => !polygon.IsSelfIntersection},// без самопересечений
                                       {"Clockwise",            polygon => polygon.OrientedArea < 0},   // ориентирован по часовой
                                   };

            ViewLayer = vl;

            ViewLayer.AddShape(InfoLine);
            ViewLayer.AddShape(Filler = CreatePolygon(addPoints));
            Filler.Shape.PointMoving += filler_PointMoving;
            Filler.Shape.PointAdding += Filler_PointAdding;
            Filler.Shape.PointRemoving += Filler_PointRemoving;
            Filler.Shape.PointAdded += Filler_PointAdded;
            Filler.Shape.PointRemoved += Filler_PointRemoved;
            Filler.MouseSenseEnter += Filler_MouseSenseEnter;
            Filler.MouseSenseLeave += Filler_MouseSenseLeave;
            Filler.MouseSense += Filler_MouseSense;
            Filler.IsSenseMouse = true;
            Filler.ExternalDistanceSense = 10;
            Filler.InternalDistanceSense = 10;
            if (addPoints != null && addPoints.Length > 0)
            {
                Markers.AddRange(addPoints.Select(CreateMarker));
            }
            ViewLayer.AddShape(Caption = CreateCaption());

            FitchInfoPics();
            ViewLayer.AddShape(AreaPic);
            AreaPic.MouseEnter += AreaPic_MouseEnter;
            AreaPic.MouseLeave += AreaPic_MouseLeave;
            CreateAddingPointMaker();
            Filler.CommandHandlers["EndDrag"].FinishHnd += (shape, code, args) => AdjustFiller();
            AdjustFiller();
        }
예제 #5
0
        public void Init()
        {
            _aHomeViewLayer = Substitute.For <IViewLayer>();
            _aHomeViewLayer.GetView().Returns(View.Home);

            _anotherHomeViewLayer = Substitute.For <IViewLayer>();
            _anotherHomeViewLayer.GetView().Returns(View.Home);

            _aLobbyViewLayer = Substitute.For <IViewLayer>();
            _aLobbyViewLayer.GetView().Returns(View.Lobby);

            var allViewLayers = new List <IViewLayer> {
                _aHomeViewLayer, _anotherHomeViewLayer, _aLobbyViewLayer
            };

            _viewManager = new ViewManager(allViewLayers, Substitute.For <IAnalyticsSubmitter>());
        }
예제 #6
0
 public static IHandler Layer(this IHandler handler, IViewLayer layer)
 {
     return(new RegionOptions
     {
         Layer = new LayerOptions
         {
             Selector = layers =>
             {
                 if (!layers.Contains(layer))
                 {
                     throw new ArgumentException("Layer not found");
                 }
                 return layer;
             }
         }
     }.Decorate(handler));
 }
예제 #7
0
 public RayCastInfo(IViewport viewport, IViewLayer layer, Ray3 globalRay)
 {
     InitViewProperties(viewport, layer);
     GlobalRay = globalRay;
 }
예제 #8
0
 public RayCastInfo(IViewport viewport, IViewLayer layer, IntVector2 pointerPixelPos)
 {
     InitViewProperties(viewport, layer);
     GlobalRay = GenGlobalRayFromMousePos(layer.Camera, ViewportSize, AspectRatio, pointerPixelPos);
 }
예제 #9
0
        public RollChoice(IViewLayer vl)
        {

        }
예제 #10
0
 public ModuleContainer(IViewLayer vl, params PointF[] addPoints) : base(vl, addPoints)
 {
 }
예제 #11
0
 /// <summary>
 /// ѕолучить слой на уровень ниже, чем текущий
 /// </summary>
 /// <returns></returns>
 public IViewLayer GetUnderLayer(IViewLayer vl)
 {
     return this[vl.Index - 1];
 }
예제 #12
0
 /// <summary>
 /// ѕолучить слой на уровень выше, чем текущий
 /// </summary>
 /// <returns></returns>
 public IViewLayer GetAboveLayer(IViewLayer vl)
 {
     return this[vl.Index + 1];
 }
예제 #13
0
 public MvvmPattern(ILogicLayer logicLayer, IViewModelLayer viewModelLayer, IViewLayer viewLayer)
 {
     _logicLayer     = logicLayer;
     _viewModelLayer = viewModelLayer;
     _viewLayer      = viewLayer;
 }
예제 #14
0
 public virtual IViewLayer Show(IView view)
 {
     return(ViewLayer = view.Display(Inner));
 }