A game about forced loneliness, made by TACStudios
1using System;
2
3using UnityEditor;
4using UnityEditor.VersionControl;
5
6using Unity.PlasticSCM.Editor.AssetUtils;
7
8namespace Unity.PlasticSCM.Editor.AssetMenu
9{
10 internal class ProjectViewAssetSelection : AssetVcsOperations.IAssetSelection
11 {
12 internal ProjectViewAssetSelection(Action assetSelectionChangedAction)
13 {
14 mAssetSelectionChangedAction = assetSelectionChangedAction;
15
16 Selection.selectionChanged += SelectionChanged;
17 }
18
19 internal void Dispose()
20 {
21 Selection.selectionChanged -= SelectionChanged;
22 }
23
24 void SelectionChanged()
25 {
26 // Selection.selectionChanged gets triggered on both
27 // project view and scene view. We only want to trigger
28 // the action if user selects on project view (has assets)
29 if (HasSelectedAssets())
30 mAssetSelectionChangedAction();
31 }
32
33 AssetList AssetVcsOperations.IAssetSelection.GetSelectedAssets()
34 {
35 if (Selection.assetGUIDs.Length == 0)
36 return new AssetList();
37
38 AssetList result = new AssetList();
39
40 foreach (string guid in Selection.assetGUIDs)
41 {
42 string assetPath = AssetsPath.GetFullPath.ForGuid(guid);
43
44 if (string.IsNullOrEmpty(assetPath))
45 continue;
46
47 result.Add(new Asset(assetPath));
48 }
49
50 return result;
51 }
52
53 bool HasSelectedAssets()
54 {
55 // Objects in project view have GUIDs, objects in scene view don't
56 return Selection.assetGUIDs.Length > 0;
57 }
58
59 Action mAssetSelectionChangedAction;
60 }
61}