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); }
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; } }
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); }