static void ConvertSpriteType(GameObject go, System.Type targetType) { tk2dBaseSprite spr = go.GetComponent <tk2dBaseSprite>(); System.Type sourceType = spr.GetType(); if (sourceType != targetType) { tk2dBatchedSprite batchedSprite = new tk2dBatchedSprite(); tk2dStaticSpriteBatcherEditor.FillBatchedSprite(batchedSprite, go); if (targetType == typeof(tk2dSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.Sprite; } else if (targetType == typeof(tk2dTiledSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.TiledSprite; } else if (targetType == typeof(tk2dSlicedSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.SlicedSprite; } else if (targetType == typeof(tk2dClippedSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.ClippedSprite; } Object.DestroyImmediate(spr, true); bool sourceHasDimensions = sourceType == typeof(tk2dSlicedSprite) || sourceType == typeof(tk2dTiledSprite); bool targetHasDimensions = targetType == typeof(tk2dSlicedSprite) || targetType == typeof(tk2dTiledSprite); // Some minor fixups if (!sourceHasDimensions && targetHasDimensions) { batchedSprite.Dimensions = new Vector2(100, 100); } if (targetType == typeof(tk2dClippedSprite)) { batchedSprite.ClippedSpriteRegionBottomLeft = Vector2.zero; batchedSprite.ClippedSpriteRegionTopRight = Vector2.one; } if (targetType == typeof(tk2dSlicedSprite)) { batchedSprite.SlicedSpriteBorderBottomLeft = new Vector2(0.1f, 0.1f); batchedSprite.SlicedSpriteBorderTopRight = new Vector2(0.1f, 0.1f); } tk2dStaticSpriteBatcherEditor.RestoreBatchedSprite(go, batchedSprite); } }
static void ConvertSpriteType(GameObject go, System.Type targetType) { tk2dBaseSprite spr = go.GetComponent <tk2dBaseSprite>(); System.Type sourceType = spr.GetType(); if (sourceType != targetType) { tk2dBatchedSprite batchedSprite = new tk2dBatchedSprite(); tk2dStaticSpriteBatcherEditor.FillBatchedSprite(batchedSprite, go); if (targetType == typeof(tk2dSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.Sprite; } else if (targetType == typeof(tk2dTiledSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.TiledSprite; } else if (targetType == typeof(tk2dSlicedSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.SlicedSprite; } else if (targetType == typeof(tk2dClippedSprite)) { batchedSprite.type = tk2dBatchedSprite.Type.ClippedSprite; } #if (UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2) if (spr.collider != null) { Object.DestroyImmediate(spr.collider); } Object.DestroyImmediate(spr, true); #else { Collider[] colliders = spr.GetComponents <Collider>(); foreach (Collider c in colliders) { Undo.DestroyObjectImmediate(c); } Collider2D[] collider2Ds = spr.GetComponents <Collider2D>(); foreach (Collider2D c in collider2Ds) { Undo.DestroyObjectImmediate(c); } } Undo.DestroyObjectImmediate(spr); #endif bool sourceHasDimensions = sourceType == typeof(tk2dSlicedSprite) || sourceType == typeof(tk2dTiledSprite); bool targetHasDimensions = targetType == typeof(tk2dSlicedSprite) || targetType == typeof(tk2dTiledSprite); // Some minor fixups if (!sourceHasDimensions && targetHasDimensions) { batchedSprite.Dimensions = new Vector2(100, 100); } if (targetType == typeof(tk2dClippedSprite)) { batchedSprite.ClippedSpriteRegionBottomLeft = Vector2.zero; batchedSprite.ClippedSpriteRegionTopRight = Vector2.one; } if (targetType == typeof(tk2dSlicedSprite)) { batchedSprite.SlicedSpriteBorderBottomLeft = new Vector2(0.1f, 0.1f); batchedSprite.SlicedSpriteBorderTopRight = new Vector2(0.1f, 0.1f); } tk2dStaticSpriteBatcherEditor.RestoreBatchedSprite(go, batchedSprite); #if !(UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2) { tk2dBaseSprite tmpSprite = go.GetComponent <tk2dBaseSprite>(); if (tmpSprite != null) { Undo.RegisterCreatedObjectUndo(tmpSprite, "Convert Sprite Type"); } } #endif } }
protected void DrawSpriteEditorGUI(tk2dBaseSprite sprite) { var newCollection = tk2dSpriteGuiUtility.SpriteCollectionPopup("Collection", sprite.Collection, true, sprite.spriteId); if (sprite.Collection != newCollection) { if (sprite.Collection == null) sprite.Collection = newCollection; int spriteId = sprite.spriteId; if (sprite.spriteId < 0 || sprite.spriteId >= sprite.Collection.Count || !sprite.Collection.inst.spriteDefinitions[sprite.spriteId].Valid) spriteId = sprite.Collection.FirstValidDefinitionIndex; sprite.SwitchCollectionAndSprite(newCollection, spriteId); sprite.ForceBuild(); } if (sprite.Collection) { int newSpriteId = sprite.spriteId; // sanity check sprite id if (sprite.spriteId < 0 || sprite.spriteId >= sprite.Collection.Count || !sprite.Collection.inst.spriteDefinitions[sprite.spriteId].Valid) { newSpriteId = sprite.Collection.inst.FirstValidDefinitionIndex; } newSpriteId = tk2dSpriteGuiUtility.SpriteSelectorPopup("Sprite", sprite.spriteId, sprite.Collection); if (tk2dPreferences.inst.displayTextureThumbs) { tk2dSpriteDefinition def = sprite.GetCurrentSpriteDef(); if (sprite.Collection.version < 1 || def.texelSize == Vector2.zero) { string message = ""; message = "No thumbnail data."; if (sprite.Collection.version < 1) message += "\nPlease rebuild Sprite Collection."; tk2dGuiUtility.InfoBox(message, tk2dGuiUtility.WarningLevel.Info); } else { GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); Vector2 texSize = thumbnailCache.GetSpriteSizePixels(def); float w = texSize.x; float h = texSize.y; float maxSize = 128.0f; if (w > maxSize) { h = h / w * maxSize; w = maxSize; } Rect r = GUILayoutUtility.GetRect(w, h, GUILayout.ExpandWidth(false)); thumbnailCache.DrawSpriteTexture(r, def); GUILayout.EndHorizontal(); } } if (newSpriteId != sprite.spriteId) { sprite.spriteId = newSpriteId; sprite.EditMode__CreateCollider(); GUI.changed = true; } sprite.color = EditorGUILayout.ColorField("Color", sprite.color); Vector3 newScale = EditorGUILayout.Vector3Field("Scale", sprite.scale); if (newScale != sprite.scale) { sprite.scale = newScale; sprite.EditMode__CreateCollider(); } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("HFlip")) { Vector3 s = sprite.scale; s.x *= -1.0f; sprite.scale = s; GUI.changed = true; } if (GUILayout.Button("VFlip")) { Vector3 s = sprite.scale; s.y *= -1.0f; sprite.scale = s; GUI.changed = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("Reset Scale", "Set scale to 1"))) { Vector3 s = sprite.scale; s.x = Mathf.Sign(s.x); s.y = Mathf.Sign(s.y); s.z = Mathf.Sign(s.z); sprite.scale = s; GUI.changed = true; } if (GUILayout.Button(new GUIContent("Bake Scale", "Transfer scale from transform.scale -> sprite"))) { tk2dScaleUtility.Bake(sprite.transform); GUI.changed = true; } GUIContent pixelPerfectButton = new GUIContent("1:1", "Make Pixel Perfect"); if ( GUILayout.Button(pixelPerfectButton )) { if (tk2dPixelPerfectHelper.inst) tk2dPixelPerfectHelper.inst.Setup(); sprite.MakePixelPerfect(); GUI.changed = true; } sprite.pixelPerfect = GUILayout.Toggle(sprite.pixelPerfect, new GUIContent("Always", "Always keep pixel perfect"), GUILayout.Width(60.0f)); EditorGUILayout.EndHorizontal(); } else { EditorGUILayout.IntSlider("Need a collection bound", 0, 0, 1); } bool needUpdatePrefabs = false; if (GUI.changed) { EditorUtility.SetDirty(sprite); #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) if (PrefabUtility.GetPrefabType(sprite) == PrefabType.Prefab) needUpdatePrefabs = true; #endif } // This is a prefab, and changes need to be propagated. This isn't supported in Unity 3.4 if (needUpdatePrefabs) { #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) // Rebuild prefab instances tk2dBaseSprite[] allSprites = Resources.FindObjectsOfTypeAll(sprite.GetType()) as tk2dBaseSprite[]; foreach (var spr in allSprites) { if (PrefabUtility.GetPrefabType(spr) == PrefabType.PrefabInstance && PrefabUtility.GetPrefabParent(spr.gameObject) == sprite.gameObject) { // Reset all prefab states var propMod = PrefabUtility.GetPropertyModifications(spr); PrefabUtility.ResetToPrefabState(spr); PrefabUtility.SetPropertyModifications(spr, propMod); spr.ForceBuild(); } } #endif } }
protected void DrawSpriteEditorGUI(tk2dBaseSprite sprite) { var newCollection = tk2dSpriteGuiUtility.SpriteCollectionPopup("Collection", sprite.collection, true, sprite.spriteId); if (sprite.collection != newCollection) { if (sprite.collection == null) { sprite.collection = newCollection; } int spriteId = sprite.spriteId; if (sprite.spriteId < 0 || sprite.spriteId >= sprite.collection.Count || !sprite.collection.spriteDefinitions[sprite.spriteId].Valid) { spriteId = sprite.collection.FirstValidDefinitionIndex; } sprite.SwitchCollectionAndSprite(newCollection, spriteId); sprite.ForceBuild(); } if (sprite.collection) { int newSpriteId = sprite.spriteId; // sanity check sprite id if (sprite.spriteId < 0 || sprite.spriteId >= sprite.collection.Count || !sprite.collection.spriteDefinitions[sprite.spriteId].Valid) { newSpriteId = sprite.collection.FirstValidDefinitionIndex; } newSpriteId = tk2dSpriteGuiUtility.SpriteSelectorPopup("Sprite", sprite.spriteId, sprite.collection); if (tk2dPreferences.inst.displayTextureThumbs) { if (sprite.collection.version < 1 || sprite.collection.dataGuid == tk2dSpriteGuiUtility.TransientGUID) { string message = ""; message = "No thumbnail data."; if (sprite.collection.version < 1 && sprite.collection.dataGuid != tk2dSpriteGuiUtility.TransientGUID) { message += "\nPlease rebuild Sprite Collection."; } tk2dGuiUtility.InfoBox(message, tk2dGuiUtility.WarningLevel.Info); } else { var tex = tk2dSpriteThumbnailCache.GetThumbnailTexture(sprite.collection, sprite.spriteId); if (tex) { float w = tex.width; float h = tex.height; float maxSize = 128.0f; if (w > maxSize) { h = h / w * maxSize; w = maxSize; } Rect r = GUILayoutUtility.GetRect(w, h); GUI.DrawTexture(r, tex, ScaleMode.ScaleToFit); } } } if (newSpriteId != sprite.spriteId) { sprite.spriteId = newSpriteId; sprite.EditMode__CreateCollider(); GUI.changed = true; } sprite.color = EditorGUILayout.ColorField("Color", sprite.color); Vector3 newScale = EditorGUILayout.Vector3Field("Scale", sprite.scale); if (newScale != sprite.scale) { sprite.scale = newScale; sprite.EditMode__CreateCollider(); } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("HFlip")) { Vector3 s = sprite.scale; s.x *= -1.0f; sprite.scale = s; GUI.changed = true; } if (GUILayout.Button("VFlip")) { Vector3 s = sprite.scale; s.y *= -1.0f; sprite.scale = s; GUI.changed = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("Reset Scale", "Set scale to 1"))) { Vector3 s = sprite.scale; s.x = Mathf.Sign(s.x); s.y = Mathf.Sign(s.y); s.z = Mathf.Sign(s.z); sprite.scale = s; GUI.changed = true; } if (GUILayout.Button(new GUIContent("Bake Scale", "Transfer scale from transform.scale -> sprite"))) { tk2dScaleUtility.Bake(sprite.transform); GUI.changed = true; } GUIContent pixelPerfectButton = new GUIContent("1:1", "Make Pixel Perfect"); if (GUILayout.Button(pixelPerfectButton)) { if (tk2dPixelPerfectHelper.inst) { tk2dPixelPerfectHelper.inst.Setup(); } sprite.MakePixelPerfect(); GUI.changed = true; } sprite.pixelPerfect = GUILayout.Toggle(sprite.pixelPerfect, new GUIContent("Always", "Always keep pixel perfect"), GUILayout.Width(60.0f)); EditorGUILayout.EndHorizontal(); } else { EditorGUILayout.IntSlider("Need a collection bound", 0, 0, 1); } bool needUpdatePrefabs = false; if (GUI.changed) { EditorUtility.SetDirty(sprite); #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) if (PrefabUtility.GetPrefabType(sprite) == PrefabType.Prefab) { needUpdatePrefabs = true; } #endif } // This is a prefab, and changes need to be propagated. This isn't supported in Unity 3.4 if (needUpdatePrefabs) { #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) // Rebuild prefab instances tk2dBaseSprite[] allSprites = Resources.FindObjectsOfTypeAll(sprite.GetType()) as tk2dBaseSprite[]; foreach (var spr in allSprites) { if (PrefabUtility.GetPrefabType(spr) == PrefabType.PrefabInstance && PrefabUtility.GetPrefabParent(spr.gameObject) == sprite.gameObject) { // Reset all prefab states var propMod = PrefabUtility.GetPropertyModifications(spr); PrefabUtility.ResetToPrefabState(spr); PrefabUtility.SetPropertyModifications(spr, propMod); spr.ForceBuild(); } } #endif } }
protected void DrawSpriteEditorGUI(tk2dBaseSprite sprite) { Event ev = Event.current; tk2dSpriteGuiUtility.SpriteSelector( sprite.Collection, sprite.spriteId, spriteChangedCallbackInstance, null ); if (sprite.Collection != null) { if (tk2dPreferences.inst.displayTextureThumbs) { tk2dSpriteDefinition def = sprite.GetCurrentSpriteDef(); if (sprite.Collection.version < 1 || def.texelSize == Vector2.zero) { string message = ""; message = "No thumbnail data."; if (sprite.Collection.version < 1) message += "\nPlease rebuild Sprite Collection."; tk2dGuiUtility.InfoBox(message, tk2dGuiUtility.WarningLevel.Info); } else { GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); int tileSize = 128; Rect r = GUILayoutUtility.GetRect(tileSize, tileSize, GUILayout.ExpandWidth(false)); tk2dGrid.Draw(r); thumbnailCache.DrawSpriteTextureInRect(r, def, Color.white); GUILayout.EndHorizontal(); r = GUILayoutUtility.GetLastRect(); if (ev.type == EventType.MouseDown && ev.button == 0 && r.Contains(ev.mousePosition)) { tk2dSpriteGuiUtility.SpriteSelectorPopup( sprite.Collection, sprite.spriteId, spriteChangedCallbackInstance, null ); } } } sprite.color = EditorGUILayout.ColorField("Color", sprite.color); Vector3 newScale = EditorGUILayout.Vector3Field("Scale", sprite.scale); if (newScale != sprite.scale) { sprite.scale = newScale; sprite.EditMode__CreateCollider(); } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("HFlip")) { Vector3 s = sprite.scale; s.x *= -1.0f; sprite.scale = s; GUI.changed = true; } if (GUILayout.Button("VFlip")) { Vector3 s = sprite.scale; s.y *= -1.0f; sprite.scale = s; GUI.changed = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("Reset Scale", "Set scale to 1"))) { Vector3 s = sprite.scale; s.x = Mathf.Sign(s.x); s.y = Mathf.Sign(s.y); s.z = Mathf.Sign(s.z); sprite.scale = s; GUI.changed = true; } if (GUILayout.Button(new GUIContent("Bake Scale", "Transfer scale from transform.scale -> sprite"))) { tk2dScaleUtility.Bake(sprite.transform); GUI.changed = true; } GUIContent pixelPerfectButton = new GUIContent("1:1", "Make Pixel Perfect"); if ( GUILayout.Button(pixelPerfectButton )) { if (tk2dPixelPerfectHelper.inst) tk2dPixelPerfectHelper.inst.Setup(); sprite.MakePixelPerfect(); GUI.changed = true; } sprite.pixelPerfect = GUILayout.Toggle(sprite.pixelPerfect, new GUIContent("Always", "Always keep pixel perfect"), GUILayout.Width(60.0f)); EditorGUILayout.EndHorizontal(); } else { EditorGUILayout.IntSlider("Need a collection bound", 0, 0, 1); } bool needUpdatePrefabs = false; if (GUI.changed) { EditorUtility.SetDirty(sprite); #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) if (PrefabUtility.GetPrefabType(sprite) == PrefabType.Prefab) needUpdatePrefabs = true; #endif } // This is a prefab, and changes need to be propagated. This isn't supported in Unity 3.4 if (needUpdatePrefabs) { #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) // Rebuild prefab instances tk2dBaseSprite[] allSprites = Resources.FindObjectsOfTypeAll(sprite.GetType()) as tk2dBaseSprite[]; foreach (var spr in allSprites) { if (PrefabUtility.GetPrefabType(spr) == PrefabType.PrefabInstance && PrefabUtility.GetPrefabParent(spr.gameObject) == sprite.gameObject) { // Reset all prefab states var propMod = PrefabUtility.GetPropertyModifications(spr); PrefabUtility.ResetToPrefabState(spr); PrefabUtility.SetPropertyModifications(spr, propMod); spr.ForceBuild(); } } #endif } }
protected void DrawSpriteEditorGUI(tk2dBaseSprite sprite) { Event ev = Event.current; tk2dSpriteGuiUtility.SpriteSelector(sprite.Collection, sprite.spriteId, spriteChangedCallbackInstance, null); if (sprite.Collection != null) { if (tk2dPreferences.inst.displayTextureThumbs) { tk2dSpriteDefinition def = sprite.GetCurrentSpriteDef(); if (sprite.Collection.version < 1 || def.texelSize == Vector2.zero) { string message = ""; message = "No thumbnail data."; if (sprite.Collection.version < 1) { message += "\nPlease rebuild Sprite Collection."; } tk2dGuiUtility.InfoBox(message, tk2dGuiUtility.WarningLevel.Info); } else { GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(" "); int tileSize = 128; Rect r = GUILayoutUtility.GetRect(tileSize, tileSize, GUILayout.ExpandWidth(false)); tk2dGrid.Draw(r); thumbnailCache.DrawSpriteTextureInRect(r, def, Color.white); GUILayout.EndHorizontal(); r = GUILayoutUtility.GetLastRect(); if (ev.type == EventType.MouseDown && ev.button == 0 && r.Contains(ev.mousePosition)) { tk2dSpriteGuiUtility.SpriteSelectorPopup(sprite.Collection, sprite.spriteId, spriteChangedCallbackInstance, null); } } } sprite.color = EditorGUILayout.ColorField("Color", sprite.color); Vector3 newScale = EditorGUILayout.Vector3Field("Scale", sprite.scale); if (newScale != sprite.scale) { sprite.scale = newScale; sprite.EditMode__CreateCollider(); } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("HFlip")) { Vector3 s = sprite.scale; s.x *= -1.0f; sprite.scale = s; GUI.changed = true; } if (GUILayout.Button("VFlip")) { Vector3 s = sprite.scale; s.y *= -1.0f; sprite.scale = s; GUI.changed = true; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("Reset Scale", "Set scale to 1"))) { Vector3 s = sprite.scale; s.x = Mathf.Sign(s.x); s.y = Mathf.Sign(s.y); s.z = Mathf.Sign(s.z); sprite.scale = s; GUI.changed = true; } if (GUILayout.Button(new GUIContent("Bake Scale", "Transfer scale from transform.scale -> sprite"))) { tk2dScaleUtility.Bake(sprite.transform); GUI.changed = true; } GUIContent pixelPerfectButton = new GUIContent("1:1", "Make Pixel Perfect"); if (GUILayout.Button(pixelPerfectButton)) { if (tk2dPixelPerfectHelper.inst) { tk2dPixelPerfectHelper.inst.Setup(); } sprite.MakePixelPerfect(); GUI.changed = true; } sprite.pixelPerfect = GUILayout.Toggle(sprite.pixelPerfect, new GUIContent("Always", "Always keep pixel perfect"), GUILayout.Width(60.0f)); EditorGUILayout.EndHorizontal(); } else { EditorGUILayout.IntSlider("Need a collection bound", 0, 0, 1); } bool needUpdatePrefabs = false; if (GUI.changed) { EditorUtility.SetDirty(sprite); #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) if (PrefabUtility.GetPrefabType(sprite) == PrefabType.Prefab) { needUpdatePrefabs = true; } #endif } // This is a prefab, and changes need to be propagated. This isn't supported in Unity 3.4 if (needUpdatePrefabs) { #if !(UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4) // Rebuild prefab instances tk2dBaseSprite[] allSprites = Resources.FindObjectsOfTypeAll(sprite.GetType()) as tk2dBaseSprite[]; foreach (var spr in allSprites) { if (PrefabUtility.GetPrefabType(spr) == PrefabType.PrefabInstance && PrefabUtility.GetPrefabParent(spr.gameObject) == sprite.gameObject) { // Reset all prefab states var propMod = PrefabUtility.GetPropertyModifications(spr); PrefabUtility.ResetToPrefabState(spr); PrefabUtility.SetPropertyModifications(spr, propMod); spr.ForceBuild(); } } #endif } }