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; } }
public IComponentManager GetComponentManager() { return(currentState.GetComponentManager()); }