/// <summary> /// Generates a unique id for the given asset /// </summary> public int GenerateId(UTinyAssetInfo assetInfo) { var id = assetInfo.Object.GetInstanceID(); m_Assets.Add(id, assetInfo); return(id); }
private string GetAssetName(UTinyAssetInfo info) { if (null == info.Object) { return("(null)"); } if (info.ExplicitReferences.Count <= 0) { return(info.Object.name); } foreach (var reference in info.ExplicitReferences) { var module = reference.Dereference(Model.Registry); var asset = module.GetAsset(info.Object); if (!string.IsNullOrEmpty(asset?.Name)) { return(asset.Name); } } return(info.Object.name); }
private static UTinyExportInfo Export(UTinyProject project, string path, UTinyAssetInfo assetInfo) { var export = new UTinyExportInfo(assetInfo); var assetName = GetAssetName(project, assetInfo.Object); var isDebug = UTinyEditorApplication.EditorContext.Workspace.BuildConfiguration == UTinyBuildConfiguration.Debug; var texture = assetInfo.Object as Texture2D; if (texture != null) { var settings = UTinyUtility.GetAssetExportSettings(project, texture) as UTinyTextureSettings; TextureExporter.Export(path, assetName, texture, !isDebug, settings, export.Exported); return(export); } var audioClip = assetInfo.Object as AudioClip; if (audioClip != null) { FileExporter.Export(path, assetName, audioClip, export.Exported); return(export); } var font = assetInfo.Object as Font; if (font != null) { FontExporter.Export(path, assetName, font, export.Exported); return(export); } // Export the object as is FileExporter.Export(path, assetName, assetInfo.Object, export.Exported); return(export); }
public void AddChild(UTinyAssetInfo assetInfo) { if (m_Children.Contains(assetInfo)) { return; } m_Children.Add(assetInfo); }
private UTinyAssetTreeViewItem BuildItem(UTinyAssetInfo assetInfo, int depth) { var item = new UTinyAssetTreeViewItem(Model.Registry, Model.MainModule, Model.MainModule, assetInfo) { id = Model.GenerateId(assetInfo), Editable = assetInfo.ExplicitReferences.Contains(Model.MainModule), depth = depth }; if (assetInfo.Parent != null) { item.icon = EditorGUIUtility.ObjectContent(null, assetInfo.Object.GetType()).image as Texture2D; } foreach (var child in assetInfo.Children) { item.AddChild(BuildItem(child, depth + 1)); } return(item); }
private static UTinyAssetInfo GetOrAddAssetInfo(IDictionary <Object, UTinyAssetInfo> assets, Object @object, string name) { UTinyAssetInfo assetInfo; if (assets.TryGetValue(@object, out assetInfo)) { return(assetInfo); } assetInfo = new UTinyAssetInfo(@object, name); if (AssetDatabase.IsSubAsset(@object)) { var path = AssetDatabase.GetAssetPath(@object); var parentObject = AssetDatabase.LoadMainAssetAtPath(path); var parentAsset = GetOrAddAssetInfo(assets, parentObject, parentObject.name); parentAsset.AddChild(assetInfo); assetInfo.Parent = parentAsset; } assets.Add(@object, assetInfo); return(assetInfo); }
private static void CreateAssetExportInfo <TSettings>(UTinyProject project, UTinyModule module, UTinyAssetInfo assetInfo) where TSettings : UTinyAssetExportSettings, ICopyable <TSettings>, new() { var asset = module.GetAsset(assetInfo.Object) ?? module.AddAsset(assetInfo.Object); var settings = asset.CreateExportSettings <TSettings>(); settings.CopyFrom(UTinyUtility.GetAssetExportSettings(project, assetInfo.Object) as TSettings); }
public UTinyExportInfo(UTinyAssetInfo assetInfo) { AssetInfo = assetInfo; }
private static void CreateEntityForAsset(IRegistry registry, UTinyProject project, UTinyEntityGroup entityGroup, UTinyAssetInfo asset) { var @object = asset.Object; UTinyEntity entity = null; if (@object is Texture2D) { var texture = @object as Texture2D; var path = AssetDatabase.GetAssetPath(texture); var importer = (TextureImporter)AssetImporter.GetAtPath(path); entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Texture2D))}{asset.Name}"); var image2d = entity.AddComponent(registry.GetImage2DType()); image2d.Refresh(); image2d["imageFile"] = $"ut-asset:{asset.Name}"; var settings = UTinyUtility.GetAssetExportSettings(project, @object) as UTinyTextureSettings; if (settings != null && settings.FormatType == TextureFormatType.JPG && UTinyAssetExporter.TextureExporter.ReallyHasAlpha(texture)) { image2d["maskFile"] = $"ut-asset:{asset.Name}_a"; } image2d["disableSmoothing"] = importer.filterMode == FilterMode.Point; var sprite = AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().FirstOrDefault(); // @NOTE The `importer.spritePixelsPerUnit` is currently NOT used in the editor... // We ALWAYS draw sprites at 1 pixel to world unit in the editor. // When we switch to using SpriteRenderer as our editor drawer we can just pass `sprite.pixelsPerUnit` directly here. var pixelsToWorldUnits = sprite ? sprite.pixelsPerUnit : 1; image2d["pixelsToWorldUnits"] = 1.0f / pixelsToWorldUnits; } else if (@object is Sprite) { var sprite = (Sprite)@object; entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Sprite))}{asset.Name}"); var sprite2d = entity.AddComponent(registry.GetSprite2DType()); sprite2d.Refresh(); sprite2d["image"] = sprite.texture; var region = sprite2d["imageRegion"] as UTinyObject; if (null != region) { region["x"] = sprite.rect.x / sprite.texture.width; region["y"] = sprite.rect.y / sprite.texture.height; region["width"] = sprite.rect.width / sprite.texture.width; region["height"] = sprite.rect.height / sprite.texture.height; } var pivot = sprite2d["pivot"] as UTinyObject; if (null != pivot) { pivot["x"] = sprite.pivot.x / sprite.rect.width; pivot["y"] = sprite.pivot.y / sprite.rect.height; } } else if (@object is AudioClip) { entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(AudioClip))}{asset.Name}"); var audioClip = entity.AddComponent(registry.GetAudioClipType()); audioClip.Refresh(); audioClip["file"] = $"ut-asset:{asset.Name}"; } else if (@object is Font) { entity = registry.CreateEntity(UTinyId.New(), $"{GetAssetEntityPath(typeof(Font))}{asset.Name}"); var fontAsset = entity.AddComponent(registry.GetFontType()); fontAsset.Refresh(); fontAsset["file"] = $"ut-asset:{asset.Name}"; } if (null != entity) { entityGroup.AddEntityReference((UTinyEntity.Reference)entity); } foreach (var child in asset.Children) { CreateEntityForAsset(registry, project, entityGroup, child); } }