// Adds a new platform group to the set of platforms. public void AddPlatformGroup(string displayName) { PlatformGroup group = PlatformGroup.Create(displayName, Legacy.Platform.None); Platforms.Add(group.Identifier, group); AssetDatabase.AddObjectToAsset(group, this); LinkPlatform(group); }
// Adds a new platform group to the set of platforms. public PlatformGroup AddPlatformGroup(string displayName, int sortOrder) { PlatformGroup group = PlatformGroup.Create(displayName, Legacy.Platform.None); group.DisplaySortOrder = sortOrder; RuntimeSettings.AddPlatform(group); AssetDatabase.AddObjectToAsset(group, RuntimeSettings); RuntimeSettings.LinkPlatform(group); return(group); }
// Adds any missing platforms: // * From the template collection // * From the legacy settings private void AddMissingPlatforms() { var newPlatforms = new List <Platform>(); foreach (PlatformTemplate template in platformTemplates) { if (!Platforms.ContainsKey(template.Identifier)) { newPlatforms.Add(template.CreateInstance()); } } // Ensure that the default platform exists if (!defaultPlatform) { defaultPlatform = CreateInstance <PlatformDefault>(); newPlatforms.Add(defaultPlatform); } // Ensure that the Play In Editor platform exists if (!playInEditorPlatform) { playInEditorPlatform = CreateInstance <PlatformPlayInEditor>(); newPlatforms.Add(playInEditorPlatform); } // Ensure that the default and Play In Editor platforms have properties AffirmPlatformProperties(defaultPlatform); AffirmPlatformProperties(playInEditorPlatform); // Migrate plugins if necessary var PluginsProperty = Platform.PropertyAccessors.Plugins; if (!MigratedPlatforms.Contains(defaultPlatform.LegacyIdentifier)) { PluginsProperty.Set(defaultPlatform, Plugins); } else if (!PluginsProperty.HasValue(defaultPlatform)) { PluginsProperty.Set(defaultPlatform, new List <string>()); } // Migrate LiveUpdatePort if (!Platform.PropertyAccessors.LiveUpdatePort.HasValue(defaultPlatform)) { Platform.PropertyAccessors.LiveUpdatePort.Set(defaultPlatform, LiveUpdatePort); } // Create a map for migrating legacy settings var platformMap = new Dictionary <Legacy.Platform, Platform>(); foreach (Platform platform in Platforms.Values.Concat(newPlatforms)) { if (platform.LegacyIdentifier != Legacy.Platform.None) { platformMap.Add(platform.LegacyIdentifier, platform); } } Func <Legacy.Platform, Platform> AffirmPlatform = null; // Ensures that all of the platform's ancestors exist. Action <Platform> AffirmAncestors = (platform) => { Legacy.Platform legacyParent = Legacy.Parent(platform.LegacyIdentifier); if (legacyParent != Legacy.Platform.None) { platform.ParentIdentifier = AffirmPlatform(legacyParent).Identifier; } }; // Gets the platform corresponding to legacyPlatform (or creates it if it is a group), // and ensures that it has properties and all of its ancestors exist. // Returns null if legacyPlatform is unknown. AffirmPlatform = (legacyPlatform) => { Platform platform; if (platformMap.TryGetValue(legacyPlatform, out platform)) { platform.AffirmProperties(); } else if (Legacy.IsGroup(legacyPlatform)) { PlatformGroup group = PlatformGroup.Create(Legacy.DisplayName(legacyPlatform), legacyPlatform); platformMap.Add(legacyPlatform, group); newPlatforms.Add(group); platform = group; } else { // This is an unknown platform return(null); } AffirmAncestors(platform); return(platform); }; // Gets the target plaform to use when migrating settings from legacyPlatform. // Returns null if legacyPlatform is unknown or has already been migrated. Func <Legacy.Platform, Platform> getMigrationTarget = (legacyPlatform) => { if (MigratedPlatforms.Contains(legacyPlatform)) { // Already migrated return(null); } return(AffirmPlatform(legacyPlatform)); }; var speakerModeSettings = SpeakerModeSettings.ConvertAll( setting => new Legacy.PlatformSetting <FMOD.SPEAKERMODE>() { Value = (FMOD.SPEAKERMODE)setting.Value, Platform = setting.Platform } ); // Migrate all the legacy settings, creating platforms as we need them via AffirmPlatform MigrateLegacyPlatforms(speakerModeSettings, Platform.PropertyAccessors.SpeakerMode, getMigrationTarget); MigrateLegacyPlatforms(SampleRateSettings, Platform.PropertyAccessors.SampleRate, getMigrationTarget); MigrateLegacyPlatforms(LiveUpdateSettings, Platform.PropertyAccessors.LiveUpdate, getMigrationTarget); MigrateLegacyPlatforms(OverlaySettings, Platform.PropertyAccessors.Overlay, getMigrationTarget); MigrateLegacyPlatforms(BankDirectorySettings, Platform.PropertyAccessors.BuildDirectory, getMigrationTarget); MigrateLegacyPlatforms(VirtualChannelSettings, Platform.PropertyAccessors.VirtualChannelCount, getMigrationTarget); MigrateLegacyPlatforms(RealChannelSettings, Platform.PropertyAccessors.RealChannelCount, getMigrationTarget); // Now we ensure that if a legacy group has settings, all of its descendants exist // and inherit from it (even if they have no settings of their own), so that the // inheritance structure matches the old system. // We look at all groups (not just newly created ones), because a newly created platform // may need to inherit from a preexisting group. var groupsToProcess = new Queue <Platform>(platformMap.Values.Where( platform => platform is PlatformGroup && platform.LegacyIdentifier != Legacy.Platform.None && platform.HasAnyOverriddenProperties)); while (groupsToProcess.Count > 0) { Platform group = groupsToProcess.Dequeue(); // Ensure that all descendants exist foreach (var child in platformMap.Values) { if (child.Active) { // Don't overwrite existing settings continue; } var legacyPlatform = child.LegacyIdentifier; if (legacyPlatform == Legacy.Platform.iOS || legacyPlatform == Legacy.Platform.Android) { // These platforms were overridden by MobileHigh and MobileLow in the old system continue; } if (MigratedPlatforms.Contains(legacyPlatform)) { // The user may have deleted this platform since migration, so don't mess with it continue; } if (Legacy.Parent(legacyPlatform) == group.LegacyIdentifier) { child.AffirmProperties(); child.ParentIdentifier = group.Identifier; if (child is PlatformGroup) { groupsToProcess.Enqueue(child as PlatformGroup); } } } } // Add all of the new platforms to the set of known platforms foreach (Platform platform in newPlatforms) { Platforms.Add(platform.Identifier, platform); } UpdateMigratedPlatforms(); }