示例#1
0
 private void OnResized()
 {
     synchronizer.Add((_this, size) => {
         _this.Device.Resize(size.Width, size.Height);
         Changed(_this.Device);
     }, new Size {
         Height = window.Height, Width = window.Width
     });
 }
示例#2
0
        public void Change(IGraphicComponent com)
        {
            switch (com)
            {
            case HittableGeometryComponent geo:    // TODO remove this IF, remake additing to Manager base on Generic type
                if (geo.IsDisposed)
                {
                    synchronizer.Add((_, cc) => {
                        _.Remove(cc.EntityTag);
                        _.isActualStateDrawed = false;
                    }, geo);
                }
                else
                {
                    geo.BuildTreeAsync()
                    .ContinueWith(x => {
                        synchronizer.Add((_, cc) => {
                            var g = (HittableGeometryComponent)cc;

                            var tr = context
                                     .GetComponentManager()
                                     .GetComponents <TransformComponent>(cc.EntityTag);
                            var b = g.Box;
                            if (tr.Any())
                            {
                                b = b.Transform(tr.Single().MatrixWorld);
                            }
                            _.Add(b, g.EntityTag);
                            _.isActualStateDrawed = false;
                        }, x.Result);
                    });
                }
                break;

            case TransformComponent tr when TryGet(tr.EntityTag, out var found):
                var entity = tr.EntityTag;

                var box = context
                          .GetComponentManager()
                          .GetComponent <HittableGeometryComponent>(entity).Box;

                synchronizer.Add((_, cc) => {
                    var t = (TransformComponent)cc;
                    _.Remove(entity);
                    var worldBox = box.Transform(t.MatrixWorld);
                    _.Add(worldBox, entity);
                    _.isActualStateDrawed = false;
                }, tr);

                break;
            }
        }
示例#3
0
        private void OnResized()
        {
            var size = new Size {
                Height = surface.Size.Height, Width = surface.Size.Width
            };

            if (!size.IsValid)
            {
            }
            synchronizer.Add((_this, size) => {
                _this.Device.Resize(size.Width, size.Height);
                Changed(_this.Device);
            }, size);
        }
示例#4
0
 public void PushCommand(IInputCommand cmd)
 {
     synchronization.Add((own, input) => own.observer.PushCommand(input), cmd);
 }