Skip to content

Commit 1cc688b

Browse files
author
Unity Technologies
committed
Unity 2017.3.0b1 C# reference source code
1 parent 3412229 commit 1cc688b

File tree

235 files changed

+8392
-3898
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

235 files changed

+8392
-3898
lines changed

Editor/Mono/2D/Interface/IAssetImporter.cs

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
using UnityEngine;
66
using UnityEditor;
77
using System;
8+
using UnityEditor.Experimental.U2D;
9+
using UnityEditor.U2D;
810
using UnityAssetImporter = UnityEditor.AssetImporter;
911
using UnityTextureImporter = UnityEditor.TextureImporter;
12+
using System.Collections.Generic;
1013

1114
namespace UnityEditor.U2D.Interface
1215
{
@@ -50,9 +53,12 @@ public override int GetHashCode()
5053
}
5154
}
5255

53-
internal class TextureImporter : ITextureImporter
56+
internal class TextureImporter : ITextureImporter, ISpriteEditorDataProvider
5457
{
5558
protected UnityAssetImporter m_AssetImporter;
59+
List<SpriteDataMultipleMode> m_SpritesMultiple;
60+
SpriteDataSingleMode m_SpriteSingle;
61+
SerializedObject m_TextureImporterSO;
5662

5763
public TextureImporter(UnityTextureImporter textureImporter)
5864
{
@@ -96,5 +102,103 @@ public override Vector2 spritePivot
96102
{
97103
get { return ((UnityTextureImporter)m_AssetImporter).spritePivot; }
98104
}
105+
106+
public void InitSpriteEditorDataProvider(SerializedObject so)
107+
{
108+
m_TextureImporterSO = so;
109+
var spriteSheetSO = m_TextureImporterSO.FindProperty("m_SpriteSheet.m_Sprites");
110+
m_SpritesMultiple = new List<SpriteDataMultipleMode>();
111+
m_SpriteSingle = new SpriteDataSingleMode();
112+
m_SpriteSingle.Load(m_TextureImporterSO);
113+
for (int i = 0; i < spriteSheetSO.arraySize; ++i)
114+
{
115+
var data = new SpriteDataMultipleMode();
116+
var sp = spriteSheetSO.GetArrayElementAtIndex(i);
117+
data.Load(sp);
118+
m_SpritesMultiple.Add(data);
119+
}
120+
}
121+
122+
public int spriteDataCount
123+
{
124+
get
125+
{
126+
switch (spriteImportMode)
127+
{
128+
case SpriteImportMode.Multiple:
129+
return m_SpritesMultiple.Count;
130+
case SpriteImportMode.Single:
131+
case SpriteImportMode.Polygon:
132+
return 1;
133+
}
134+
return 0;
135+
}
136+
137+
set
138+
{
139+
if (spriteImportMode != SpriteImportMode.Multiple)
140+
{
141+
Debug.LogError("SetSpriteDataSize can only be called when in SpriteImportMode.Multiple");
142+
return;
143+
}
144+
145+
while (m_SpritesMultiple.Count < value)
146+
m_SpritesMultiple.Add(new SpriteDataMultipleMode());
147+
if (m_SpritesMultiple.Count > value)
148+
{
149+
var diff = m_SpritesMultiple.Count - value;
150+
m_SpritesMultiple.RemoveRange(m_SpritesMultiple.Count - diff, diff);
151+
}
152+
}
153+
}
154+
155+
public UnityEngine.Object targetObject
156+
{
157+
get
158+
{
159+
return m_AssetImporter;
160+
}
161+
}
162+
163+
public SpriteDataBase GetSpriteData(int i)
164+
{
165+
switch (spriteImportMode)
166+
{
167+
case SpriteImportMode.Multiple:
168+
if (m_SpritesMultiple.Count > i)
169+
return m_SpritesMultiple[i];
170+
break;
171+
case SpriteImportMode.Single:
172+
case SpriteImportMode.Polygon:
173+
return m_SpriteSingle;
174+
}
175+
return null;
176+
}
177+
178+
public void Apply(SerializedObject so)
179+
{
180+
m_SpriteSingle.Apply(so);
181+
182+
var spriteSheetSO = so.FindProperty("m_SpriteSheet.m_Sprites");
183+
for (int i = 0; i < m_SpritesMultiple.Count; ++i)
184+
{
185+
if (spriteSheetSO.arraySize < m_SpritesMultiple.Count)
186+
{
187+
spriteSheetSO.InsertArrayElementAtIndex(spriteSheetSO.arraySize);
188+
}
189+
var sp = spriteSheetSO.GetArrayElementAtIndex(i);
190+
m_SpritesMultiple[i].Apply(sp);
191+
}
192+
while (m_SpritesMultiple.Count < spriteSheetSO.arraySize)
193+
{
194+
spriteSheetSO.DeleteArrayElementAtIndex(m_SpritesMultiple.Count);
195+
}
196+
}
197+
198+
public void GetTextureActualWidthAndHeight(out int width, out int height)
199+
{
200+
width = height = 0;
201+
((UnityTextureImporter)m_AssetImporter).GetWidthAndHeight(ref width, ref height);
202+
}
99203
}
100204
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Unity C# reference source
2+
// Copyright (c) Unity Technologies. For terms of use, see
3+
// https://unity3d.com/legal/licenses/Unity_Reference_Only_License
4+
5+
using System.Collections.Generic;
6+
using UnityEngine;
7+
using UnityEditor.Experimental.AssetImporters;
8+
9+
namespace UnityEditor.Experimental.U2D
10+
{
11+
internal interface ISpriteEditorDataProvider
12+
{
13+
SpriteImportMode spriteImportMode { get; }
14+
int spriteDataCount { get; set; }
15+
SpriteDataBase GetSpriteData(int i);
16+
void Apply(SerializedObject so);
17+
Object targetObject { get; }
18+
19+
void GetTextureActualWidthAndHeight(out int width, out int height);
20+
void InitSpriteEditorDataProvider(SerializedObject so);
21+
}
22+
23+
// We are doing this so that we don't have public interface API
24+
internal abstract class ScriptedSpriteEditorDataProviderImporter : ScriptedImporter, ISpriteEditorDataProvider
25+
{
26+
public abstract SpriteImportMode spriteImportMode { get; }
27+
public abstract int spriteDataCount { get; set; }
28+
public abstract SpriteDataBase GetSpriteData(int i);
29+
public abstract void Apply(SerializedObject so);
30+
public abstract Object targetObject { get; }
31+
32+
public abstract void GetTextureActualWidthAndHeight(out int width, out int height);
33+
public abstract void InitSpriteEditorDataProvider(SerializedObject so);
34+
}
35+
36+
37+
internal abstract class SpriteDataBase
38+
{
39+
public abstract string name { get; set; }
40+
public abstract Rect rect { get; set; }
41+
public abstract SpriteAlignment alignment { get; set; }
42+
public abstract Vector2 pivot { get; set; }
43+
public abstract Vector4 border { get; set; }
44+
public abstract float tessellationDetail { get; set; }
45+
public abstract List<Vector2[]> outline { get; set; }
46+
public abstract List<Vector2[]> physicsShape { get; set; }
47+
}
48+
}

Editor/Mono/2D/SpriteAtlas/SpriteAtlasInspector.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class Styles
6464
public readonly GUIContent disabledPackLabel = EditorGUIUtility.TextContent("Sprite Atlas packing is disabled. Enable it in Edit > Project Settings > Editor.");
6565
public readonly GUIContent packableListLabel = EditorGUIUtility.TextContent("Objects for Packing|Only accept Folder, Sprite Sheet(Texture) and Sprite.");
6666

67+
public readonly GUIContent notPowerOfTwoWarning = EditorGUIUtility.TextContent("This scale will produce a Sprite Atlas variant with a packed texture that is NPOT (non - power of two). This may cause visual artifacts in certain compression/texture formats.");
68+
6769
public readonly GUIContent smallZoom = EditorGUIUtility.IconContent("PreTextureMipMapLow");
6870
public readonly GUIContent largeZoom = EditorGUIUtility.IconContent("PreTextureMipMapHigh");
6971
public readonly GUIContent alphaIcon = EditorGUIUtility.IconContent("PreTextureAlpha");
@@ -383,6 +385,10 @@ private void HandleVariantSettingUI()
383385
{
384386
EditorGUILayout.LabelField(s_Styles.variantSettingLabel, EditorStyles.boldLabel);
385387
EditorGUILayout.PropertyField(m_VariantMultiplier, s_Styles.variantMultiplierLabel);
388+
389+
// Test if the multiplier scale a power of two size (1024) into another power of 2 size.
390+
if (!Mathf.IsPowerOfTwo((int)(m_VariantMultiplier.floatValue * 1024)))
391+
EditorGUILayout.HelpBox(s_Styles.notPowerOfTwoWarning.text, MessageType.Warning, true);
386392
}
387393

388394
private void HandleBoolToIntPropertyField(SerializedProperty prop, GUIContent content)

Editor/Mono/2D/SpriteEditorModule/ISpriteEditorModule.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Copyright (c) Unity Technologies. For terms of use, see
33
// https://unity3d.com/legal/licenses/Unity_Reference_Only_License
44

5+
using UnityEditor.Experimental.U2D;
56
using UnityEngine;
67
using UnityEditor.U2D.Interface;
78
using UnityEngine.U2D.Interface;
@@ -38,6 +39,7 @@ internal interface ISpriteEditor
3839
Rect windowDimension { get; }
3940
ITexture2D selectedTexture { get; }
4041
ITexture2D previewTexture { get; }
42+
ISpriteEditorDataProvider spriteEditorDataProvider { get; }
4143

4244
void HandleSpriteSelection();
4345
void RequestRepaint();
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
// Unity C# reference source
2+
// Copyright (c) Unity Technologies. For terms of use, see
3+
// https://unity3d.com/legal/licenses/Unity_Reference_Only_License
4+
5+
using System;
6+
using System.Collections.Generic;
7+
using UnityEditor;
8+
using UnityEditor.Experimental.U2D;
9+
using UnityEditorInternal;
10+
using UnityEngine;
11+
12+
namespace UnityEditor.U2D
13+
{
14+
internal class SpriteDataSingleMode : SpriteDataBase
15+
{
16+
public void Apply(SerializedObject so)
17+
{
18+
so.FindProperty("m_Alignment").intValue = (int)alignment;
19+
so.FindProperty("m_SpriteBorder").vector4Value = border;
20+
so.FindProperty("m_SpritePivot").vector2Value = pivot;
21+
so.FindProperty("m_SpriteTessellationDetail").floatValue = tessellationDetail;
22+
23+
SerializedProperty outlineSP = so.FindProperty("m_SpriteSheet.m_Outline");
24+
25+
if (outline != null)
26+
ApplyOutlineChanges(outlineSP, outline);
27+
else
28+
outlineSP.ClearArray();
29+
30+
SerializedProperty physicsShapeSP = so.FindProperty("m_SpriteSheet.m_PhysicsShape");
31+
32+
if (physicsShape != null)
33+
ApplyOutlineChanges(physicsShapeSP, physicsShape);
34+
else
35+
physicsShapeSP.ClearArray();
36+
}
37+
38+
public void Load(SerializedObject so)
39+
{
40+
var ti = so.targetObject as TextureImporter;
41+
name = ti.name;
42+
alignment = (SpriteAlignment)so.FindProperty("m_Alignment").intValue;
43+
border = ti.spriteBorder;
44+
pivot = SpriteEditorUtility.GetPivotValue(alignment, ti.spritePivot);
45+
tessellationDetail = so.FindProperty("m_SpriteTessellationDetail").floatValue;
46+
SerializedProperty outlineSP = so.FindProperty("m_SpriteSheet.m_Outline");
47+
outline = AcquireOutline(outlineSP);
48+
SerializedProperty physicsShapeSP = so.FindProperty("m_SpriteSheet.m_PhysicsShape");
49+
physicsShape = AcquireOutline(physicsShapeSP);
50+
var texture = AssetDatabase.LoadAssetAtPath<Texture2D>(ti.assetPath);
51+
rect = new Rect(0, 0, texture.width, texture.height);
52+
}
53+
54+
static protected List<Vector2[]> AcquireOutline(SerializedProperty outlineSP)
55+
{
56+
var outline = new List<Vector2[]>();
57+
for (int j = 0; j < outlineSP.arraySize; ++j)
58+
{
59+
SerializedProperty outlinePathSO = outlineSP.GetArrayElementAtIndex(j);
60+
var o = new Vector2[outlinePathSO.arraySize];
61+
for (int k = 0; k < outlinePathSO.arraySize; ++k)
62+
{
63+
o[k] = outlinePathSO.GetArrayElementAtIndex(k).vector2Value;
64+
}
65+
outline.Add(o);
66+
}
67+
68+
return outline;
69+
}
70+
71+
static protected void ApplyOutlineChanges(SerializedProperty outlineSP, List<Vector2[]> outline)
72+
{
73+
outlineSP.ClearArray();
74+
for (int j = 0; j < outline.Count; ++j)
75+
{
76+
outlineSP.InsertArrayElementAtIndex(j);
77+
var o = outline[j];
78+
SerializedProperty outlinePathSO = outlineSP.GetArrayElementAtIndex(j);
79+
outlinePathSO.ClearArray();
80+
for (int k = 0; k < o.Length; ++k)
81+
{
82+
outlinePathSO.InsertArrayElementAtIndex(k);
83+
outlinePathSO.GetArrayElementAtIndex(k).vector2Value = o[k];
84+
}
85+
}
86+
}
87+
88+
public override SpriteAlignment alignment
89+
{
90+
get; set;
91+
}
92+
93+
public override Vector4 border { get; set; }
94+
95+
public override string name { get; set; }
96+
97+
public override List<Vector2[]> outline { get; set; }
98+
99+
public override List<Vector2[]> physicsShape { get; set; }
100+
101+
public override Vector2 pivot { get; set; }
102+
103+
public override Rect rect { get; set; }
104+
105+
public override float tessellationDetail { get; set; }
106+
}
107+
108+
internal class SpriteDataMultipleMode : SpriteDataSingleMode
109+
{
110+
public void Load(SerializedProperty sp)
111+
{
112+
rect = sp.FindPropertyRelative("m_Rect").rectValue;
113+
border = sp.FindPropertyRelative("m_Border").vector4Value;
114+
name = sp.FindPropertyRelative("m_Name").stringValue;
115+
alignment = (SpriteAlignment)sp.FindPropertyRelative("m_Alignment").intValue;
116+
pivot = SpriteEditorUtility.GetPivotValue(alignment, sp.FindPropertyRelative("m_Pivot").vector2Value);
117+
tessellationDetail = sp.FindPropertyRelative("m_TessellationDetail").floatValue;
118+
SerializedProperty outlineSP = sp.FindPropertyRelative("m_Outline");
119+
outline = AcquireOutline(outlineSP);
120+
outlineSP = sp.FindPropertyRelative("m_PhysicsShape");
121+
physicsShape = AcquireOutline(outlineSP);
122+
}
123+
124+
public void Apply(SerializedProperty sp)
125+
{
126+
sp.FindPropertyRelative("m_Rect").rectValue = rect;
127+
sp.FindPropertyRelative("m_Border").vector4Value = border;
128+
sp.FindPropertyRelative("m_Name").stringValue = name;
129+
sp.FindPropertyRelative("m_Alignment").intValue = (int)alignment;
130+
sp.FindPropertyRelative("m_Pivot").vector2Value = pivot;
131+
sp.FindPropertyRelative("m_TessellationDetail").floatValue = tessellationDetail;
132+
133+
SerializedProperty outlineSP = sp.FindPropertyRelative("m_Outline");
134+
outlineSP.ClearArray();
135+
if (outline != null)
136+
ApplyOutlineChanges(outlineSP, outline);
137+
138+
SerializedProperty physicsShapeSP = sp.FindPropertyRelative("m_PhysicsShape");
139+
physicsShapeSP.ClearArray();
140+
if (physicsShape != null)
141+
ApplyOutlineChanges(physicsShapeSP, physicsShape);
142+
}
143+
}
144+
}

Editor/Mono/2D/SpriteEditorModule/SpriteFrameModule/SpriteFrameModule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public override void OnModuleDeactivate()
4343

4444
public override bool CanBeActivated()
4545
{
46-
return SpriteUtility.GetSpriteImportMode(assetDatabase, spriteEditor.selectedTexture) != SpriteImportMode.Polygon;
46+
return SpriteUtility.GetSpriteImportMode(spriteEditor.spriteEditorDataProvider) != SpriteImportMode.Polygon;
4747
}
4848

4949
private string GetUniqueName(string prefix, int startIndex)

Editor/Mono/2D/SpriteEditorModule/SpriteFrameModule/SpriteFrameModuleBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ protected SpriteFrameModuleBase(string name, ISpriteEditor sw, IEventSystem es,
2828

2929
public virtual void OnModuleActivate()
3030
{
31-
spriteImportMode = SpriteUtility.GetSpriteImportMode(assetDatabase, spriteEditor.selectedTexture);
31+
spriteImportMode = SpriteUtility.GetSpriteImportMode(spriteEditor.spriteEditorDataProvider);
3232
}
3333

3434
public abstract void OnModuleDeactivate();

Editor/Mono/2D/SpriteEditorModule/SpriteFrameModule/SpritePolygonModeModule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public override void OnModuleDeactivate()
3030

3131
public override bool CanBeActivated()
3232
{
33-
return SpriteUtility.GetSpriteImportMode(assetDatabase, spriteEditor.selectedTexture) == SpriteImportMode.Polygon;
33+
return SpriteUtility.GetSpriteImportMode(spriteEditor.spriteEditorDataProvider) == SpriteImportMode.Polygon;
3434
}
3535

3636
private bool polygonSprite

0 commit comments

Comments
 (0)