1
1
using System . Collections . Generic ;
2
2
using System . Linq ;
3
- using ToolBox . Serialization . OdinSerializer ;
4
3
#if UNITY_EDITOR
5
4
using UnityEditor ;
6
5
#endif
7
6
using UnityEngine ;
7
+ using Object = UnityEngine . Object ;
8
8
9
9
namespace ToolBox . Serialization
10
10
{
11
- internal sealed class AssetsContainer : ScriptableObject , IExternalStringReferenceResolver
12
- {
13
- [ SerializeField ] private AssetEntry [ ] _savedAssets = null ;
14
- [ SerializeField ] private string [ ] _paths = null ;
15
-
16
- public IExternalStringReferenceResolver NextResolver { get ; set ; }
17
-
18
- public bool CanReference ( object value , out string id )
19
- {
20
- id = null ;
21
-
22
- if ( ! ( value is Object obj ) || ! TryGetValue ( obj , out var entry ) )
23
- return false ;
24
-
25
- id = entry . Guid ;
26
- return true ;
27
- }
28
-
29
- public bool TryResolveReference ( string id , out object value )
30
- {
31
- value = null ;
32
-
33
- if ( id == null )
34
- return false ;
35
-
36
- bool contains = TryGetValue ( id , out var entry ) ;
37
- value = entry . Asset ;
38
-
39
- return contains ;
40
- }
11
+ public sealed class AssetsContainer : ScriptableObject
12
+ {
13
+ [ SerializeField ] private Object [ ] _savedAssets ;
14
+ [ SerializeField ] private string [ ] _paths ;
15
+
16
+ public bool TryGetObject ( ushort id , out Object entry )
17
+ {
18
+ entry = null ;
19
+
20
+ if ( id == 0 || id >= _savedAssets . Length )
21
+ {
22
+ return false ;
23
+ }
24
+
25
+ entry = _savedAssets [ id ] ;
26
+ return true ;
27
+ }
28
+
29
+ public bool TryGetId ( Object value , out ushort id )
30
+ {
31
+ id = 0 ;
32
+
33
+ for ( ushort i = 1 ; i < _savedAssets . Length ; i ++ )
34
+ {
35
+ if ( _savedAssets [ i ] != value )
36
+ {
37
+ continue ;
38
+ }
39
+
40
+ id = i ;
41
+ return true ;
42
+ }
43
+
44
+ return false ;
45
+ }
41
46
42
47
#if UNITY_EDITOR
43
- // TODO: Make everything with loops and lists instead of LINQ
44
- public void LoadAssets ( )
45
- {
46
- if ( _paths == null )
47
- return ;
48
-
49
- _paths = _paths . Where ( x => ! string . IsNullOrEmpty ( x ) && AssetDatabase . IsValidFolder ( x ) ) . ToArray ( ) ;
50
-
51
- if ( _paths . Length == 0 )
52
- return ;
53
-
54
- List < Object > assets ;
55
-
56
- assets = AssetDatabase
57
- . FindAssets ( "t:Object" , _paths )
58
- . Select ( AssetDatabase . GUIDToAssetPath )
59
- . Select ( AssetDatabase . LoadAssetAtPath < Object > )
60
- . Where ( x =>
61
- {
62
- string fileNamespace = x . GetType ( ) . Namespace ;
63
-
64
- return x != null && ( fileNamespace == null || ! fileNamespace . Contains ( "UnityEditor" ) ) ;
65
- } ) // Change UnityEditor to Editor?
66
- . ToList ( ) ;
67
-
68
- var newEntries = new List < AssetEntry > ( ) ;
69
-
70
- foreach ( var asset in assets )
71
- {
72
- string path = AssetDatabase . GetAssetPath ( asset ) ;
73
- string guid = AssetDatabase . AssetPathToGUID ( path ) ;
74
-
75
- if ( ! TryGetValue ( asset , out _ ) )
76
- newEntries . Add ( new AssetEntry ( guid , asset ) ) ;
77
-
78
- var childAssets = AssetDatabase . LoadAllAssetRepresentationsAtPath ( AssetDatabase . GetAssetPath ( asset ) ) ;
79
-
80
- for ( int i = 0 ; i < childAssets . Length ; i ++ )
81
- {
82
- var child = childAssets [ i ] ;
83
-
84
- if ( ! TryGetValue ( child , out _ ) )
85
- {
86
- string childGuid = System . Guid . NewGuid ( ) . ToString ( ) ;
87
- newEntries . Add ( new AssetEntry ( childGuid , child ) ) ;
88
- }
89
- }
90
- }
91
-
92
- ArrayUtility . AddRange ( ref _savedAssets , newEntries . ToArray ( ) ) ;
93
- EditorUtility . SetDirty ( this ) ;
94
- }
95
-
96
- public void Clear ( )
97
- {
98
- _savedAssets = new AssetEntry [ 0 ] ;
99
- EditorUtility . SetDirty ( this ) ;
100
- }
48
+ public void LoadAssets ( )
49
+ {
50
+ if ( _paths == null )
51
+ {
52
+ return ;
53
+ }
54
+
55
+ _paths = _paths . Where ( x => ! string . IsNullOrEmpty ( x ) && AssetDatabase . IsValidFolder ( x ) ) . ToArray ( ) ;
56
+
57
+ if ( _paths . Length == 0 )
58
+ {
59
+ return ;
60
+ }
61
+
62
+ // ReSharper disable once UseArrayEmptyMethod
63
+ _savedAssets ??= new Object [ 0 ] ;
64
+
65
+ var assets = AssetDatabase
66
+ . FindAssets ( "t:Object" , _paths )
67
+ . Select ( AssetDatabase . GUIDToAssetPath )
68
+ . Select ( AssetDatabase . LoadAssetAtPath < Object > )
69
+ . Where ( x =>
70
+ {
71
+ var fileNamespace = x . GetType ( ) . Namespace ;
72
+
73
+ return x != null && ( fileNamespace == null || ! fileNamespace . Contains ( "UnityEditor" ) ) ;
74
+ } )
75
+ . ToList ( ) ;
76
+
77
+ var newEntries = new List < Object > ( ) ;
78
+
79
+ foreach ( var asset in assets )
80
+ {
81
+ if ( ! TryGetId ( asset , out _ ) )
82
+ {
83
+ newEntries . Add ( asset ) ;
84
+ }
85
+
86
+ var children = AssetDatabase . LoadAllAssetRepresentationsAtPath ( AssetDatabase . GetAssetPath ( asset ) ) ;
87
+
88
+ foreach ( var child in children )
89
+ {
90
+ if ( TryGetId ( child , out _ ) )
91
+ {
92
+ continue ;
93
+ }
94
+
95
+ newEntries . Add ( child ) ;
96
+ }
97
+ }
98
+
99
+ ArrayUtility . AddRange ( ref _savedAssets , newEntries . ToArray ( ) ) ;
100
+
101
+ if ( _savedAssets . Length == 0 || _savedAssets [ 0 ] != null )
102
+ {
103
+ ArrayUtility . Insert ( ref _savedAssets , 0 , null ) ;
104
+ }
105
+
106
+ EditorUtility . SetDirty ( this ) ;
107
+ }
108
+
109
+ public void Clear ( )
110
+ {
111
+ _savedAssets = null ;
112
+ EditorUtility . SetDirty ( this ) ;
113
+ }
101
114
#endif
102
-
103
- private bool TryGetValue ( string guid , out AssetEntry entry )
104
- {
105
- for ( int i = 0 ; i < _savedAssets . Length ; i ++ )
106
- {
107
- var asset = _savedAssets [ i ] ;
108
-
109
- if ( asset . Guid == guid )
110
- {
111
- entry = asset ;
112
- return true ;
113
- }
114
- }
115
-
116
- entry = null ;
117
- return false ;
118
- }
119
-
120
- private bool TryGetValue ( Object obj , out AssetEntry entry )
121
- {
122
- for ( int i = 0 ; i < _savedAssets . Length ; i ++ )
123
- {
124
- var asset = _savedAssets [ i ] ;
125
-
126
- if ( asset . Asset == obj )
127
- {
128
- entry = asset ;
129
- return true ;
130
- }
131
- }
132
-
133
- entry = null ;
134
- return false ;
135
- }
136
- }
137
- }
115
+ }
116
+ }
0 commit comments