void ResolveTableCollection() { m_PossibleTableCollection.Clear(); m_Collection = LocalizationEditorSettings.GetCollectionFromTable(m_TargetTable); if (m_TargetTable.SharedData == null) { return; } m_SharedTableDataSerializedObject = new SerializedObject(m_TargetTable.SharedData); m_TableCollectionName = m_SharedTableDataSerializedObject.FindProperty("m_TableCollectionName"); if (m_Collection != null) { m_CollectionButton = new GUIContent("Select Collection", EditorGUIUtility.ObjectContent(m_Collection, m_Collection.GetType()).image); return; } m_SharedTableDataCollection = LocalizationEditorSettings.GetCollectionForSharedTableData(m_TargetTable.SharedData); if (m_SharedTableDataCollection != null) { return; } LocalizationEditorSettings.FindLooseStringTablesUsingSharedTableData(m_TargetTable.SharedData, m_PossibleTableCollection); }
static StringTableCollection FindProjectCollection(IGroup group) { // Is the Id the Shared table data GUID? if (!string.IsNullOrEmpty(group.Id)) { var path = AssetDatabase.GUIDToAssetPath(group.Id); if (!string.IsNullOrEmpty(path)) { var sharedTableData = AssetDatabase.LoadAssetAtPath <SharedTableData>(path); if (sharedTableData != null) { return(LocalizationEditorSettings.GetCollectionForSharedTableData(sharedTableData) as StringTableCollection); } } } // Try table name instead return(LocalizationEditorSettings.GetStringTableCollection(group.Id) ?? LocalizationEditorSettings.GetStringTableCollection(group.Name)); }
void Init(SerializedProperty property) { if (m_PlatformOverridesList == null) { m_PlatformOverridesList = new ReorderableList(property.serializedObject, property.FindPropertyRelative("m_PlatformOverrides")) { drawElementCallback = DrawListElement, drawHeaderCallback = DrawListHeader, onAddDropdownCallback = DrawAddDropdown, elementHeightCallback = GetHeight }; var target = m_PlatformOverridesList.serializedProperty.serializedObject.targetObject; SharedTableData sharedTableData = target as SharedTableData ?? (target as LocalizationTable)?.SharedData; Debug.Assert(sharedTableData != null, "Shared Table Data is null. Platform Override can only be used on a Shared Table Entry."); m_Collection = LocalizationEditorSettings.GetCollectionForSharedTableData(sharedTableData); m_TableType = m_Collection.GetType() == typeof(StringTableCollection) ? typeof(StringTable) : typeof(AssetTable); } }
protected virtual void Analyze(AddressableAssetSettings settings, GroupResolver resolver) { try { EditorUtility.DisplayProgressBar(ruleName, "Finding Tables", 0); var tables = AssetDatabase.FindAssets($"t:{typeof(TTable).Name}"); // Collate the groups so we can check them at the end. var groups = new HashSet <AddressableAssetGroup>(); for (var i = 0; i < tables.Length; ++i) { var progress = i / (float)tables.Length; var guid = tables[i]; var entry = settings.FindAssetEntry(guid); var path = AssetDatabase.GUIDToAssetPath(guid); var table = AssetDatabase.LoadAssetAtPath <TTable>(path); var label = $"{table} - {path}"; EditorUtility.DisplayProgressBar(ruleName, $"Checking Table {path}", progress); var collection = LocalizationEditorSettings.GetCollectionForSharedTableData(table.SharedData); if (collection == null) { m_Results.Add(new TableResult { resultName = $"{table} - {path}:Loose Table.", severity = MessageType.Info, // TODO: Create collection for it? }); continue; } CheckContents(table, label, settings, collection); if (entry == null) { m_Results.Add(new TableResult { resultName = $"{label}:Not Marked as Addressable", severity = MessageType.Error, FixAction = () => { collection.AddTable(table); collection.AddSharedTableDataToAddressables(); } }); continue; } groups.Add(entry.parentGroup); // Group Name var groupName = resolver.GetExpectedGroupName(new[] { table.LocaleIdentifier }, table, settings); if (entry.parentGroup.Name != groupName) { m_Results.Add(new TableResult { resultName = $"{label}:Incorrect Group:Expected `{groupName}` but was `{entry.parentGroup.Name}`", severity = MessageType.Warning, FixAction = () => resolver.AddToGroup(table, new[] { table.LocaleIdentifier }, settings, false) }); } // Label var expectedLabel = AddressHelper.FormatAssetLabel(table.LocaleIdentifier); if (!entry.labels.Contains(expectedLabel)) { m_Results.Add(new TableResult { resultName = $"{label}:Missing Locale label.", severity = MessageType.Warning, FixAction = () => entry.SetLabel(expectedLabel, true, true) }); } // Address var expectedAddress = AddressHelper.GetTableAddress(table.TableCollectionName, table.LocaleIdentifier); if (!entry.labels.Contains(expectedLabel)) { m_Results.Add(new TableResult { resultName = $"{label}:Incorrect Address:Expected `{expectedAddress}` but was `{entry.address}`", severity = MessageType.Error, FixAction = () => entry.address = expectedAddress }); } // Shared Table Data var sharedGuid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(table.SharedData)); var g = new Guid(sharedGuid); if (table.SharedData.TableCollectionNameGuid != g) { m_Results.Add(new TableResult { resultName = $"{label}:Incorrect Shared Table Guid:Expected {g} but was {table.SharedData.TableCollectionNameGuid}", severity = MessageType.Error, FixAction = () => { table.SharedData.TableCollectionNameGuid = g; EditorUtility.SetDirty(table.SharedData); } }); } var sharedEntry = settings.FindAssetEntry(sharedGuid); if (sharedEntry == null) { m_Results.Add(new TableResult { resultName = $"{label}:Shared Table Not Marked as Addressable", severity = MessageType.Warning, FixAction = () => resolver.AddToGroup(table.SharedData, null, settings, false) }); continue; } groups.Add(sharedEntry.parentGroup); // Shared Group Name var sharedGroupName = resolver.GetExpectedGroupName(null, table.SharedData, settings); if (sharedEntry.parentGroup.Name != sharedGroupName) { m_Results.Add(new TableResult { resultName = $"{label}:Incorrect Shared Table Data Group:Expected `{sharedGroupName}` but was `{sharedEntry.parentGroup.Name}`", severity = MessageType.Warning, FixAction = () => resolver.AddToGroup(table.SharedData, null, settings, false) }); } var expectedSharedGroupName = resolver.GetExpectedGroupName(null, table.SharedData, settings); if (sharedEntry.parentGroup.Name != expectedSharedGroupName) { m_Results.Add(new TableResult { resultName = $"{label}:Incorrect Group:Expected `{expectedSharedGroupName}` but was `{sharedEntry.parentGroup.Name}`", severity = MessageType.Warning, FixAction = () => resolver.AddToGroup(table.SharedData, null, settings, false) }); } } if (groups.Count > 0) { foreach (var g in groups) { if (g.Schemas.Count == 0 || g.Schemas.All(s => s == null)) { m_Results.Add(new TableResult { resultName = $"{g.Name}:Addressables Group Contains No Schemas", severity = MessageType.Error, FixAction = () => { g.AddSchema <BundledAssetGroupSchema>(); g.AddSchema <ContentUpdateGroupSchema>(); } }); } } } } finally { EditorUtility.ClearProgressBar(); } }