public override void Attach(Item item)
 {
     Detach(item);
     item.ScaleChanged += Item_ScaleChanged;
     item.RotationChanged += Item_RotationChanged;
     item.PositionChanged += Item_PositionChanged;
 }
 public override void Render(Item item, Effect shader)
 {
     Mesh.Transform = Matrix.Scaling(Scale)
                    * Matrix.RotationYawPitchRoll(Rotation.Y, Rotation.X, Rotation.Z)
                    * Matrix.Translation(Position);
     base.Render(item, shader);
 }
 protected virtual void Item_RotationChanged(Item item)
 {
     Rotation = item.Rotation;
     RotationMatrix = item.RotationMatrix;
 }
 protected virtual void Item_PositionChanged(Item item)
 {
     Position = item.Position;
 }
 public override void Detach(Item item)
 {
     item.ScaleChanged -= Item_ScaleChanged;
     item.RotationChanged -= Item_RotationChanged;
     item.PositionChanged -= Item_PositionChanged;
 }
 protected override void ItemRotationChanged(Item item)
 {
     base.ItemRotationChanged(item);
     UpdateTranslation();
     Animation.RotationMatrix *= _RotationMatrixRelativ;
 }
 protected override void Item_ScaleChanged(Item item)
 {
     base.Item_ScaleChanged(item);
     UpdateTranslation();
 }
 protected override void Item_ScaleChanged(Item item)
 {
 }
 public override void Detach(Item item)
 {
 }
 public override void Attach(Item item)
 {
 }
 protected void UpdateTranslation(Item item)
 {
     _TranslationCurrent = Vector3.TransformCoordinate(Translation.MemberwiseMult(_ItemScale), RotationMatrix);
     Position = item.Position + _TranslationCurrent;
 }
 protected override void Item_ScaleChanged(Item item)
 {
     Scale = ScaleFactor.MemberwiseMult(_ItemScale = item.Scale);
     UpdateTranslation(item);
 }
 protected override void Item_RotationChanged(Item item)
 {
     base.Item_RotationChanged(item);
     UpdateTranslation(item);
 }
 protected override void Item_PositionChanged(Item item)
 {
     Position = item.Position + _TranslationCurrent;
 }
 protected virtual void Item_ScaleChanged(Item item)
 {
     Scale = item.Scale;
 }
 protected override void Item_PositionChanged(Item item)
 {
 }
 public override void Render(Item item, Effect shader)
 {
     Mesh.Transform = item.RenderMatrix;
     base.Render(item, shader);
 }
 protected override void Item_PositionChanged(Item item)
 {
     base.Item_PositionChanged(item);
     Obb.Center += _TranslationCurrent;
 }
 protected override void Item_RotationChanged(Item item)
 {
     UpdateTranslation();
 }
 protected override void Item_RotationChanged(Item item)
 {
 }
 protected override void ItemPositionChanged(Item item)
 {
     base.ItemPositionChanged(item);
     if (Animation != null)
         Animation.Position += _TranslationCurrent;
 }