Esempio n. 1
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;
            }
        }
Esempio n. 2
0
 public IComponentManager GetComponentManager()
 {
     return(currentState.GetComponentManager());
 }