Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        public void AddChild(UTinyAssetInfo assetInfo)
        {
            if (m_Children.Contains(assetInfo))
            {
                return;
            }

            m_Children.Add(assetInfo);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #8
0
 public UTinyExportInfo(UTinyAssetInfo assetInfo)
 {
     AssetInfo = assetInfo;
 }
Пример #9
0
        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);
            }
        }