Beispiel #1
0
 protected override void EntityComponentChanged(object sender, ComponentPropertyChangedEventArgs e)
 {
     if (!(sender is Block block))
     {
         return;
     }
     if (SimulationRunning && e.Component.GetType() == typeof(TransformComponent))
     {
         return;
     }
     RemoveNode(block);
     AddNode(block);
 }
Beispiel #2
0
        protected override void EntityComponentChanged(object sender, ComponentPropertyChangedEventArgs e)
        {
            if (!(sender is Block block))
            {
                return;
            }

            if (e.Component is TransformComponent transform)
            {
                var oldLocalTransform = EntityInfo[block].LocalTransform;
                var newLocalTransform = CalculateMatrix(transform);
                var delta             = newLocalTransform * Matrix.Invert(oldLocalTransform);

                block.Traverse(b => EntityInfo[b].WorldTransform = delta * EntityInfo[b].WorldTransform);

                EntityInfo[block].LocalTransform = delta * EntityInfo[block].LocalTransform;
            }
        }
Beispiel #3
0
        protected override void EntityComponentChanged(object sender, ComponentPropertyChangedEventArgs e)
        {
            if (!(sender is Block block))
            {
                return;
            }

            if (e.Component.GetType() == typeof(TransformComponent))
            {
                var group = EntityInfo[block].Group;
                group.Dispatcher.Invoke(() =>
                                        group.Transform = new MatrixTransform3D(block.GetLocalTransform().ToMatrix3D()));
                return;
            }

            RemoveNode(block);
            AddNode(block);
        }