Skip to content

Commit 8d47fa8

Browse files
committed
LayoutViewerにもGroup並び順を反映
1 parent 8b14189 commit 8d47fa8

File tree

3 files changed

+61
-15
lines changed

3 files changed

+61
-15
lines changed

Assets/SmartAddresser/Editor/Core/Tools/Addresser/LayoutRuleEditor/LayoutRuleEditorPresenter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private void SetupActiveView(LayoutRuleData data)
112112
_assetSaveService.SetAsset(data);
113113

114114
var groups = addressableAssetSettings.groups;
115-
115+
116116
#if AAS_SORT_ORDER
117117
var orderSettings = AddressableAssetGroupSortSettings.GetSettings(addressableAssetSettings);
118118
groups = addressableAssetSettings.groups

Assets/SmartAddresser/Editor/Core/Tools/Addresser/LayoutViewer/LayoutViewerPresenter.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
using SmartAddresser.Editor.Foundation.TinyRx;
1010
using SmartAddresser.Editor.Foundation.TinyRx.ObservableProperty;
1111
using UnityEditor;
12+
using UnityEditor.AddressableAssets;
13+
using UnityEditor.AddressableAssets.Settings.GroupSchemas;
1214
using UnityEngine;
1315
using UnityEngine.Assertions;
1416

@@ -47,13 +49,6 @@ public void Dispose()
4749
_editingData.Dispose();
4850
}
4951

50-
private void AddGroupView(Group group, bool reload = true)
51-
{
52-
_view.TreeView.AddGroup(group);
53-
if (reload)
54-
_view.TreeView.Reload();
55-
}
56-
5752
public void SetupView(ILayoutRuleDataRepository dataRepository)
5853
{
5954
_setupViewDisposables.Clear();
@@ -84,9 +79,7 @@ private void SetupActiveView(LayoutRuleData data)
8479
layout.Validate(false, validationSettings.DuplicateAddresses, validationSettings.DuplicateAssetPaths,
8580
validationSettings.EntryHasMultipleVersions);
8681
_layout = layout;
87-
foreach (var group in layout.Groups)
88-
AddGroupView(group);
89-
_view.TreeView.Reload();
82+
ApplyGroupsToTreeView();
9083
_view.ActiveMode.Value = LayoutViewerView.Mode.Viewer;
9184
_view.ActiveAssetName.Value = data.name;
9285

@@ -185,15 +178,32 @@ void OnRefreshButtonClicked()
185178
validationSettings.EntryHasMultipleVersions);
186179
_layout = layout;
187180

188-
_view.TreeView.ClearItems();
189-
foreach (var group in layout.Groups)
190-
AddGroupView(group);
191-
_view.TreeView.Reload();
181+
ApplyGroupsToTreeView();
192182
}
193183

194184
#endregion
195185
}
196186

187+
public void ApplyGroupsToTreeView()
188+
{
189+
_view.TreeView.ClearItems();
190+
191+
if (_layout == null)
192+
{
193+
return;
194+
}
195+
196+
var addressableAssetSettings = AddressableAssetSettingsDefaultObject.Settings;
197+
var orderSettings = AddressableAssetGroupSortSettings.GetSettings(addressableAssetSettings);
198+
foreach (var group in _layout.Groups.OrderBy(g =>
199+
Array.IndexOf(orderSettings.sortOrder, g.AddressableGroup.Guid)))
200+
{
201+
_view.TreeView.AddGroup(group);
202+
}
203+
204+
_view.TreeView.Reload();
205+
}
206+
197207
private void CleanupViewEventHandlers()
198208
{
199209
_view.TreeView.OnSelectionChanged -= OnTreeViewSelectionChanged;

Assets/SmartAddresser/Editor/Core/Tools/Addresser/LayoutViewer/LayoutViewerWindow.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using SmartAddresser.Editor.Foundation.EditorSplitView;
66
using SmartAddresser.Editor.Foundation.TinyRx;
77
using UnityEditor;
8+
using UnityEditor.AddressableAssets;
9+
using UnityEditor.AddressableAssets.Settings;
810
using UnityEngine;
911

1012
namespace SmartAddresser.Editor.Core.Tools.Addresser.LayoutViewer
@@ -21,14 +23,28 @@ internal sealed class LayoutViewerWindow : EditorWindow
2123
private LayoutViewerPresenter _presenter;
2224
private LayoutViewerView _view;
2325

26+
private AddressableAssetSettings _addressableAssetSettings;
27+
2428
private void OnEnable()
2529
{
2630
minSize = new Vector2(600, 200);
2731
Setup();
32+
33+
_addressableAssetSettings = AddressableAssetSettingsDefaultObject.Settings;
34+
if (_addressableAssetSettings)
35+
{
36+
_addressableAssetSettings.OnModification += OnAddressableAssetSettingsModified;
37+
}
2838
}
2939

3040
private void OnDisable()
3141
{
42+
if (_addressableAssetSettings)
43+
{
44+
_addressableAssetSettings.OnModification -= OnAddressableAssetSettingsModified;
45+
_addressableAssetSettings = null;
46+
}
47+
3248
_presenter?.Dispose();
3349
_view?.Dispose();
3450
}
@@ -66,5 +82,25 @@ public static void Open()
6682
{
6783
GetWindow<LayoutViewerWindow>(WindowName);
6884
}
85+
86+
private void OnAddressableAssetSettingsModified(
87+
AddressableAssetSettings settings,
88+
AddressableAssetSettings.ModificationEvent e,
89+
object obj)
90+
{
91+
// AssetGroupの並び順反映
92+
if (e == AddressableAssetSettings.ModificationEvent.GroupMoved)
93+
{
94+
_presenter.ApplyGroupsToTreeView();
95+
}
96+
97+
// コールバックを末尾に登録しなおす
98+
// AssetGroupの並び順はOnModificationコールバック内でシリアライズされるので、それより後に更新しないと反映できないため
99+
if (_addressableAssetSettings)
100+
{
101+
_addressableAssetSettings.OnModification -= OnAddressableAssetSettingsModified;
102+
_addressableAssetSettings.OnModification += OnAddressableAssetSettingsModified;
103+
}
104+
}
69105
}
70106
}

0 commit comments

Comments
 (0)