void MigrateSoundCollisionShapeProperties(ShapeObject3D oldShape, FmodCollisionMeshShape newShape)
        {
            MigrateBaseProperties(oldShape, newShape);

            // Sound-Collision specific
            newShape.MeshFilename    = (string)oldShape.GetType().GetProperty("ModelFilename").GetValue(oldShape, null);
            newShape.DirectOcclusion = (float)oldShape.GetType().GetProperty("DirectOcclusion").GetValue(oldShape, null);
            newShape.ReverbOcclusion = (float)oldShape.GetType().GetProperty("ReverbOcclusion").GetValue(oldShape, null);
        }
        void MigrateBaseProperties(ShapeObject3D oldShape, ShapeObject3D newShape)
        {
            // Shape settings
            newShape.UserDataString = (string)oldShape.GetType().GetProperty("UserDataString").GetValue(oldShape, null);
            newShape.ExportShape    = (bool)oldShape.GetType().GetProperty("ExportShape").GetValue(oldShape, null);
            newShape.Visible        = (bool)oldShape.GetType().GetProperty("Visible").GetValue(oldShape, null);
            newShape.TextLabel      = (string)oldShape.GetType().GetProperty("TextLabel").GetValue(oldShape, null);
            newShape.ObjectKey      = (string)oldShape.GetType().GetProperty("ObjectKey").GetValue(oldShape, null);
            newShape.LocalID        = oldShape.LocalID; // preserve the ID as sound instances might be identified by this in customer plugins [#5893]

            // Components
            if (oldShape.ComponentCount > 0)
            {
                foreach (ShapeComponent comp in oldShape.Components)
                {
                    if (comp.Missing)
                    {
                        continue;
                    }
                    newShape.AddComponentInternal((ShapeComponent)comp.Clone());
                }
            }

            // Transformation
            newShape.Position    = (Vector3F)oldShape.GetType().GetProperty("Position").GetValue(oldShape, null);
            newShape.Orientation = (Vector3F)oldShape.GetType().GetProperty("Orientation").GetValue(oldShape, null);
            newShape.Scaling     = (Vector3F)oldShape.GetType().GetProperty("Scaling").GetValue(oldShape, null);
        }
        void MigrateSoundShapeProperties(ShapeObject3D oldShape, FmodSoundShape newShape)
        {
            MigrateBaseProperties(oldShape, newShape);

              // Sound specific
              newShape.Filename = (string)oldShape.GetType().GetProperty("Filename").GetValue(oldShape, null);
              newShape.Is3D = (bool)oldShape.GetType().GetProperty("Is3D").GetValue(oldShape, null);
              newShape.Streaming = (bool)oldShape.GetType().GetProperty("Streaming").GetValue(oldShape, null);
              newShape.Looped = (bool)oldShape.GetType().GetProperty("Looped").GetValue(oldShape, null);
              {
            PropertyInfo propInfo = oldShape.GetType().GetProperty("StartPaused");
            if (propInfo != null)
              newShape.StartPaused = (bool)propInfo.GetValue(oldShape, null);
              }
              {
            PropertyInfo propInfo = oldShape.GetType().GetProperty("DisposeWhenFinished");
            if (propInfo != null)
              newShape.DisposeWhenFinished = (bool)propInfo.GetValue(oldShape, null);
              }
              newShape.Volume = (float)oldShape.GetType().GetProperty("Volume").GetValue(oldShape, null);
              newShape.MinDistance = (float)oldShape.GetType().GetProperty("MinDistance").GetValue(oldShape, null);
              newShape.MaxDistance = (float)oldShape.GetType().GetProperty("MaxDistance").GetValue(oldShape, null);
              newShape.Pan = (float)oldShape.GetType().GetProperty("Pan").GetValue(oldShape, null);
              newShape.Priority = (int)oldShape.GetType().GetProperty("Priority").GetValue(oldShape, null);
              newShape.Directional = (bool)oldShape.GetType().GetProperty("Directional").GetValue(oldShape, null);
              newShape.ConeInside = (float)oldShape.GetType().GetProperty("ConeInside").GetValue(oldShape, null);
              newShape.ConeOutside = (float)oldShape.GetType().GetProperty("ConeOutside").GetValue(oldShape, null);
              {
            PropertyInfo propInfo = oldShape.GetType().GetProperty("BackgroundMusic");
            if (propInfo != null)
              newShape.BackgroundMusic = (bool)propInfo.GetValue(oldShape, null);
              }
        }
        void MigrateSoundCollisionShapeProperties(ShapeObject3D oldShape, FmodCollisionMeshShape newShape)
        {
            MigrateBaseProperties(oldShape, newShape);

              // Sound-Collision specific
              newShape.MeshFilename = (string)oldShape.GetType().GetProperty("ModelFilename").GetValue(oldShape, null);
              newShape.DirectOcclusion = (float)oldShape.GetType().GetProperty("DirectOcclusion").GetValue(oldShape, null);
              newShape.ReverbOcclusion = (float)oldShape.GetType().GetProperty("ReverbOcclusion").GetValue(oldShape, null);
        }
        void MigrateBaseProperties(ShapeObject3D oldShape, ShapeObject3D newShape)
        {
            // Shape settings
              newShape.UserDataString = (string)oldShape.GetType().GetProperty("UserDataString").GetValue(oldShape, null);
              newShape.ExportShape = (bool)oldShape.GetType().GetProperty("ExportShape").GetValue(oldShape, null);
              newShape.Visible = (bool)oldShape.GetType().GetProperty("Visible").GetValue(oldShape, null);
              newShape.TextLabel = (string)oldShape.GetType().GetProperty("TextLabel").GetValue(oldShape, null);
              newShape.ObjectKey = (string)oldShape.GetType().GetProperty("ObjectKey").GetValue(oldShape, null);
              newShape.LocalID = oldShape.LocalID; // preserve the ID as sound instances might be identified by this in customer plugins [#5893]

              // Components
              if (oldShape.ComponentCount > 0)
              {
            foreach (ShapeComponent comp in oldShape.Components)
            {
              if (comp.Missing)
            continue;
              newShape.AddComponentInternal((ShapeComponent)comp.Clone());
            }
              }

              // Transformation
              newShape.Position = (Vector3F)oldShape.GetType().GetProperty("Position").GetValue(oldShape, null);
              newShape.Orientation = (Vector3F)oldShape.GetType().GetProperty("Orientation").GetValue(oldShape, null);
              newShape.Scaling = (Vector3F)oldShape.GetType().GetProperty("Scaling").GetValue(oldShape, null);
        }
        void MigrateSoundShapeProperties(ShapeObject3D oldShape, FmodSoundShape newShape)
        {
            MigrateBaseProperties(oldShape, newShape);

            // Sound specific
            newShape.Filename  = (string)oldShape.GetType().GetProperty("Filename").GetValue(oldShape, null);
            newShape.Is3D      = (bool)oldShape.GetType().GetProperty("Is3D").GetValue(oldShape, null);
            newShape.Streaming = (bool)oldShape.GetType().GetProperty("Streaming").GetValue(oldShape, null);
            newShape.Looped    = (bool)oldShape.GetType().GetProperty("Looped").GetValue(oldShape, null);
            {
                PropertyInfo propInfo = oldShape.GetType().GetProperty("StartPaused");
                if (propInfo != null)
                {
                    newShape.StartPaused = (bool)propInfo.GetValue(oldShape, null);
                }
            }
            {
                PropertyInfo propInfo = oldShape.GetType().GetProperty("DisposeWhenFinished");
                if (propInfo != null)
                {
                    newShape.DisposeWhenFinished = (bool)propInfo.GetValue(oldShape, null);
                }
            }
            newShape.Volume      = (float)oldShape.GetType().GetProperty("Volume").GetValue(oldShape, null);
            newShape.MinDistance = (float)oldShape.GetType().GetProperty("MinDistance").GetValue(oldShape, null);
            newShape.MaxDistance = (float)oldShape.GetType().GetProperty("MaxDistance").GetValue(oldShape, null);
            newShape.Pan         = (float)oldShape.GetType().GetProperty("Pan").GetValue(oldShape, null);
            newShape.Priority    = (int)oldShape.GetType().GetProperty("Priority").GetValue(oldShape, null);
            newShape.Directional = (bool)oldShape.GetType().GetProperty("Directional").GetValue(oldShape, null);
            newShape.ConeInside  = (float)oldShape.GetType().GetProperty("ConeInside").GetValue(oldShape, null);
            newShape.ConeOutside = (float)oldShape.GetType().GetProperty("ConeOutside").GetValue(oldShape, null);
            {
                PropertyInfo propInfo = oldShape.GetType().GetProperty("BackgroundMusic");
                if (propInfo != null)
                {
                    newShape.BackgroundMusic = (bool)propInfo.GetValue(oldShape, null);
                }
            }
        }