1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . Reflection ;
4
+ using System . Linq ;
4
5
using UnityEditor . Sprites ;
5
6
using UnityEditorInternal ;
6
7
using UnityEngine ;
10
11
11
12
namespace UnityEditor
12
13
{
13
- [ CustomEditor ( typeof ( RuleTile ) ) ]
14
+ [ CustomEditor ( typeof ( RuleTile ) , true ) ]
14
15
[ CanEditMultipleObjects ]
15
16
internal class RuleTileEditor : Editor
16
17
{
17
- private const string s_XIconString = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAABoSURBVDhPnY3BDcAgDAOZhS14dP1O0x2C/LBEgiNSHvfwyZabmV0jZRUpq2zi6f0DJwdcQOEdwwDLypF0zHLMa9+NQRxkQ+ACOT2STVw/q8eY1346ZlE54sYAhVhSDrjwFymrSFnD2gTZpls2OvFUHAAAAABJRU5ErkJggg==" ;
18
- private const string s_Arrow0 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAACYSURBVDhPzZExDoQwDATzE4oU4QXXcgUFj+YxtETwgpMwXuFcwMFSRMVKKwzZcWzhiMg91jtg34XIntkre5EaT7yjjhI9pOD5Mw5k2X/DdUwFr3cQ7Pu23E/BiwXyWSOxrNqx+ewnsayam5OLBtbOGPUM/r93YZL4/dhpR/amwByGFBz170gNChA6w5bQQMqramBTgJ+Z3A58WuWejPCaHQAAAABJRU5ErkJggg==" ;
19
- private const string s_Arrow1 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAABqSURBVDhPxYzBDYAgEATpxYcd+PVr0fZ2siZrjmMhFz6STIiDs8XMlpEyi5RkO/d66TcgJUB43JfNBqRkSEYDnYjhbKD5GIUkDqRDwoH3+NgTAw+bL/aoOP4DOgH+iwECEt+IlFmkzGHlAYKAWF9R8zUnAAAAAElFTkSuQmCC" ;
20
- private const string s_Arrow2 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAC0SURBVDhPjVE5EsIwDMxPKFKYF9CagoJH8xhaMskLmEGsjOSRkBzYmU2s9a58TUQUmCH1BWEHweuKP+D8tphrWcAHuIGrjPnPNY8X2+DzEWE+FzrdrkNyg2YGNNfRGlyOaZDJOxBrDhgOowaYW8UW0Vau5ZkFmXbbDr+CzOHKmLinAXMEePyZ9dZkZR+s5QX2O8DY3zZ/sgYcdDqeEVp8516o0QQV1qeMwg6C91toYoLoo+kNt/tpKQEVvFQAAAAASUVORK5CYII=" ;
21
- private const string s_Arrow3 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAB2SURBVDhPzY1LCoAwEEPnLi48gW5d6p31bH5SMhp0Cq0g+CCLxrzRPqMZ2pRqKG4IqzJc7JepTlbRZXYpWTg4RZE1XAso8VHFKNhQuTjKtZvHUNCEMogO4K3BhvMn9wP4EzoPZ3n0AGTW5fiBVzLAAYTP32C2Ay3agtu9V/9PAAAAAElFTkSuQmCC" ;
22
- private const string s_Arrow5 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAABqSURBVDhPnY3BCYBADASvFx924NevRdvbyoLBmNuDJQMDGjNxAFhK1DyUQ9fvobCdO+j7+sOKj/uSB+xYHZAxl7IR1wNTXJeVcaAVU+614uWfCT9mVUhknMlxDokd15BYsQrJFHeUQ0+MB5ErsPi/6hO1AAAAAElFTkSuQmCC" ;
23
- private const string s_Arrow6 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAACaSURBVDhPxZExEkAwEEVzE4UiTqClUDi0w2hlOIEZsV82xCZmQuPPfFn8t1mirLWf7S5flQOXjd64vCuEKWTKVt+6AayH3tIa7yLg6Qh2FcKFB72jBgJeziA1CMHzeaNHjkfwnAK86f3KUafU2ClHIJSzs/8HHLv09M3SaMCxS7ljw/IYJWzQABOQZ66x4h614ahTCL/WT7BSO51b5Z5hSx88AAAAAElFTkSuQmCC" ;
24
- private const string s_Arrow7 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAABQSURBVDhPYxh8QNle/T8U/4MKEQdAmsz2eICx6W530gygr2aQBmSMphkZYxqErAEXxusKfAYQ7XyyNMIAsgEkaYQBkAFkaYQBsjXSGDAwAAD193z4luKPrAAAAABJRU5ErkJggg==" ;
25
- private const string s_Arrow8 = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAACYSURBVDhPxZE9DoAwCIW9iUOHegJXHRw8tIdx1egJTMSHAeMPaHSR5KVQ+KCkCRF91mdz4VDEWVzXTBgg5U1N5wahjHzXS3iFFVRxAygNVaZxJ6VHGIl2D6oUXP0ijlJuTp724FnID1Lq7uw2QM5+thoKth0N+GGyA7IA3+yM77Ag1e2zkey5gCdAg/h8csy+/89v7E+YkgUntOWeVt2SfAAAAABJRU5ErkJggg==" ;
26
18
private const string s_MirrorX = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAG1JREFUOE+lj9ENwCAIRB2IFdyRfRiuDSaXAF4MrR9P5eRhHGb2Gxp2oaEjIovTXSrAnPNx6hlgyCZ7o6omOdYOldGIZhAziEmOTSfigLV0RYAB9y9f/7kO8L3WUaQyhCgz0dmCL9CwCw172HgBeyG6oloC8fAAAAAASUVORK5CYII=" ;
27
19
private const string s_MirrorY = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAG9JREFUOE+djckNACEMAykoLdAjHbPyw1IOJ0L7mAejjFlm9hspyd77Kk+kBAjPOXcakJIh6QaKyOE0EB5dSPJAiUmOiL8PMVGxugsP/0OOib8vsY8yYwy6gRyC8CB5QIWgCMKBLgRSkikEUr5h6wOPWfMoCYILdgAAAABJRU5ErkJggg==" ;
28
20
private const string s_Rotated = "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAHdJREFUOE+djssNwCAMQxmIFdgx+2S4Vj4YxWlQgcOT8nuG5u5C732Sd3lfLlmPMR4QhXgrTQaimUlA3EtD+CJlBuQ7aUAUMjEAv9gWCQNEPhHJUkYfZ1kEpcxDzioRzGIlr0Qwi0r+Q5rTgM+AAVcygHgt7+HtBZs/2QVWP8ahAAAAAElFTkSuQmCC" ;
29
-
30
- private static Texture2D [ ] s_Arrows ;
31
- public static Texture2D [ ] arrows
32
- {
33
- get
34
- {
35
- if ( s_Arrows == null )
36
- {
37
- s_Arrows = new Texture2D [ 10 ] ;
38
- s_Arrows [ 0 ] = Base64ToTexture ( s_Arrow0 ) ;
39
- s_Arrows [ 1 ] = Base64ToTexture ( s_Arrow1 ) ;
40
- s_Arrows [ 2 ] = Base64ToTexture ( s_Arrow2 ) ;
41
- s_Arrows [ 3 ] = Base64ToTexture ( s_Arrow3 ) ;
42
- s_Arrows [ 5 ] = Base64ToTexture ( s_Arrow5 ) ;
43
- s_Arrows [ 6 ] = Base64ToTexture ( s_Arrow6 ) ;
44
- s_Arrows [ 7 ] = Base64ToTexture ( s_Arrow7 ) ;
45
- s_Arrows [ 8 ] = Base64ToTexture ( s_Arrow8 ) ;
46
- s_Arrows [ 9 ] = Base64ToTexture ( s_XIconString ) ;
47
- }
48
- return s_Arrows ;
49
- }
50
- }
51
21
52
22
private static Texture2D [ ] s_AutoTransforms ;
53
23
public static Texture2D [ ] autoTransforms
@@ -57,9 +27,9 @@ public static Texture2D[] autoTransforms
57
27
if ( s_AutoTransforms == null )
58
28
{
59
29
s_AutoTransforms = new Texture2D [ 3 ] ;
60
- s_AutoTransforms [ 0 ] = Base64ToTexture ( s_Rotated ) ;
61
- s_AutoTransforms [ 1 ] = Base64ToTexture ( s_MirrorX ) ;
62
- s_AutoTransforms [ 2 ] = Base64ToTexture ( s_MirrorY ) ;
30
+ s_AutoTransforms [ 0 ] = RuleTile . Base64ToTexture ( s_Rotated ) ;
31
+ s_AutoTransforms [ 1 ] = RuleTile . Base64ToTexture ( s_MirrorX ) ;
32
+ s_AutoTransforms [ 2 ] = RuleTile . Base64ToTexture ( s_MirrorY ) ;
63
33
}
64
34
return s_AutoTransforms ;
65
35
}
@@ -121,7 +91,7 @@ private void OnDrawElement(Rect rect, int index, bool isactive, bool isfocused)
121
91
122
92
EditorGUI . BeginChangeCheck ( ) ;
123
93
RuleInspectorOnGUI ( inspectorRect , rule ) ;
124
- RuleMatrixOnGUI ( matrixRect , rule ) ;
94
+ RuleMatrixOnGUI ( tile , matrixRect , rule ) ;
125
95
SpriteOnGUI ( spriteRect , rule ) ;
126
96
if ( EditorGUI . EndChangeCheck ( ) )
127
97
SaveTile ( ) ;
@@ -151,13 +121,19 @@ public override void OnInspectorGUI()
151
121
{
152
122
tile . m_DefaultSprite = EditorGUILayout . ObjectField ( "Default Sprite" , tile . m_DefaultSprite , typeof ( Sprite ) , false ) as Sprite ;
153
123
tile . m_DefaultColliderType = ( Tile . ColliderType ) EditorGUILayout . EnumPopup ( "Default Collider" , tile . m_DefaultColliderType ) ;
124
+
125
+ var baseFields = typeof ( RuleTile ) . GetFields ( ) . Select ( field => field . Name ) ;
126
+ var fields = target . GetType ( ) . GetFields ( ) . Select ( field => field . Name ) . Where ( field => ! baseFields . Contains ( field ) ) ;
127
+ foreach ( var field in fields )
128
+ EditorGUILayout . PropertyField ( serializedObject . FindProperty ( field ) , true ) ;
129
+
154
130
EditorGUILayout . Space ( ) ;
155
131
156
132
if ( m_ReorderableList != null && tile . m_TilingRules != null )
157
133
m_ReorderableList . DoLayoutList ( ) ;
158
134
}
159
135
160
- internal static void RuleMatrixOnGUI ( Rect rect , RuleTile . TilingRule tilingRule )
136
+ internal static void RuleMatrixOnGUI ( RuleTile tile , Rect rect , RuleTile . TilingRule tilingRule )
161
137
{
162
138
Handles . color = EditorGUIUtility . isProSkin ? new Color ( 1f , 1f , 1f , 0.2f ) : new Color ( 0f , 0f , 0f , 0.2f ) ;
163
139
int index = 0 ;
@@ -183,21 +159,20 @@ internal static void RuleMatrixOnGUI(Rect rect, RuleTile.TilingRule tilingRule)
183
159
Rect r = new Rect ( rect . xMin + x * w , rect . yMin + y * h , w - 1 , h - 1 ) ;
184
160
if ( x != 1 || y != 1 )
185
161
{
186
- switch ( tilingRule . m_Neighbors [ index ] )
187
- {
188
- case RuleTile . TilingRule . Neighbor . This :
189
- GUI . DrawTexture ( r , arrows [ y * 3 + x ] ) ;
190
- break ;
191
- case RuleTile . TilingRule . Neighbor . NotThis :
192
- GUI . DrawTexture ( r , arrows [ 9 ] ) ;
193
- break ;
194
- }
162
+ tile . RuleOnGUI ( r , new Vector2Int ( x , y ) , tilingRule . m_Neighbors [ index ] ) ;
195
163
if ( Event . current . type == EventType . MouseDown && r . Contains ( Event . current . mousePosition ) )
196
164
{
197
165
int change = 1 ;
198
166
if ( Event . current . button == 1 )
199
167
change = - 1 ;
200
- tilingRule . m_Neighbors [ index ] = ( RuleTile . TilingRule . Neighbor ) ( ( ( int ) tilingRule . m_Neighbors [ index ] + change ) % 3 ) ;
168
+
169
+ var allConsts = tile . m_NeighborType . GetFields ( BindingFlags . Public | BindingFlags . Static | BindingFlags . FlattenHierarchy ) ;
170
+ var neighbors = allConsts . Select ( c => ( int ) c . GetValue ( null ) ) . ToList ( ) ;
171
+ neighbors . Sort ( ) ;
172
+
173
+ int oldIndex = neighbors . IndexOf ( tilingRule . m_Neighbors [ index ] ) ;
174
+ int newIndex = ( int ) Mathf . Repeat ( oldIndex + change , neighbors . Count ) ;
175
+ tilingRule . m_Neighbors [ index ] = neighbors [ newIndex ] ;
201
176
GUI . changed = true ;
202
177
Event . current . Use ( ) ;
203
178
}
@@ -351,14 +326,6 @@ private static Type GetType(string TypeName)
351
326
}
352
327
return null ;
353
328
}
354
-
355
- private static Texture2D Base64ToTexture ( string base64 )
356
- {
357
- Texture2D t = new Texture2D ( 1 , 1 ) ;
358
- t . hideFlags = HideFlags . HideAndDontSave ;
359
- t . LoadImage ( System . Convert . FromBase64String ( base64 ) ) ;
360
- return t ;
361
- }
362
329
363
330
[ Serializable ]
364
331
class RuleTileRuleWrapper
0 commit comments