コード例 #1
0
ファイル: AssetWorkspace.cs プロジェクト: nesrak1/UABEA
        public AssetContainer GetAssetContainer(AssetsFileInstance fileInst, int fileId, long pathId, bool onlyInfo = true)
        {
            if (fileId != 0)
            {
                fileInst = fileInst.GetDependency(am, fileId - 1);
            }

            if (fileInst != null)
            {
                AssetID assetId = new AssetID(fileInst.path, pathId);
                if (LoadedAssets.TryGetValue(assetId, out AssetContainer? cont))
                {
                    if (!onlyInfo && !cont.HasInstance)
                    {
                        AssetTypeTemplateField tempField = GetTemplateField(cont.FileInstance.file, cont.ClassId, cont.MonoId);
                        AssetTypeInstance typeInst = new AssetTypeInstance(tempField, cont.FileReader, cont.FilePosition);
                        cont = new AssetContainer(cont, typeInst);
                    }
                    return cont;
                }
            }
            return null;
        }
コード例 #2
0
ファイル: DataWindow.axaml.cs プロジェクト: nesrak1/UABEA
        private void SetPPtrEvents(TreeViewItem item, AssetsFileInstance fromFile, AssetContainer cont)
        {
            item.Tag = false;
            var expandObs = item.GetObservable(TreeViewItem.IsExpandedProperty);

            expandObs.Subscribe(isExpanded =>
            {
                if (isExpanded && !(bool)item.Tag)
                {
                    item.Tag = true; //don't load this again

                    if (cont != null)
                    {
                        AssetTypeValueField baseField = workspace.GetBaseField(cont);
                        TreeViewItem baseItem         = CreateTreeItem($"{baseField.GetFieldType()} {baseField.GetName()}");

                        TreeViewItem arrayIndexTreeItem = CreateTreeItem("Loading...");
                        baseItem.Items = new List <TreeViewItem>()
                        {
                            arrayIndexTreeItem
                        };
                        item.Items = new List <TreeViewItem>()
                        {
                            baseItem
                        };
                        SetTreeItemEvents(baseItem, cont.FileInstance, baseField);
                    }
                    else
                    {
                        item.Items = new List <TreeViewItem>()
                        {
                            CreateTreeItem("[null asset]")
                        };
                    }
                }
            });
        }
コード例 #3
0
ファイル: Extensions.cs プロジェクト: nesrak1/UABEA
 public static void GetUABENameFast(AssetContainer cont, ClassDatabaseFile cldb, out string assetName, out string typeName)
 {
     GetUABENameFast(cont.FileInstance.file, cldb, cont.FileReader, cont.FilePosition, cont.ClassId, cont.MonoId, out assetName, out typeName);
 }
コード例 #4
0
 public static AssetsReplacer CreateAssetReplacer(AssetContainer cont, byte[] data)
 {
     return(new AssetsReplacerFromMemory(0, cont.PathId, (int)cont.ClassId, cont.MonoId, data));
 }
コード例 #5
0
ファイル: DataWindow.axaml.cs プロジェクト: nesrak1/UABEA
        private void TreeLoad(AssetsFileInstance fromFile, AssetTypeValueField assetField, TreeViewItem treeItem)
        {
            if (assetField.childrenCount == 0)
            {
                return;
            }

            int arrayIdx = 0;
            List <TreeViewItem> items = new List <TreeViewItem>(assetField.childrenCount + 1);

            AssetTypeTemplateField assetFieldTemplate = assetField.GetTemplateField();
            bool isArray = assetFieldTemplate.isArray;

            if (isArray)
            {
                int size = assetField.GetValue().AsArray().size;
                AssetTypeTemplateField sizeTemplate       = assetFieldTemplate.children[0];
                TreeViewItem           arrayIndexTreeItem = CreateTreeItem($"{sizeTemplate.type} {sizeTemplate.name} = {size}");
                items.Add(arrayIndexTreeItem);
            }

            foreach (AssetTypeValueField childField in assetField.children)
            {
                if (childField == null)
                {
                    return;
                }
                string value = "";
                if (childField.GetValue() != null)
                {
                    EnumValueTypes evt   = childField.GetValue().GetValueType();
                    string         quote = "";
                    if (evt == EnumValueTypes.String)
                    {
                        quote = "\"";
                    }
                    if (1 <= (int)evt && (int)evt <= 12)
                    {
                        value = $" = {quote}{childField.GetValue().AsString()}{quote}";
                    }
                    if (evt == EnumValueTypes.Array ||
                        evt == EnumValueTypes.ByteArray)
                    {
                        value = $" (size {childField.childrenCount})";
                    }
                }

                if (isArray)
                {
                    TreeViewItem arrayIndexTreeItem = CreateTreeItem($"{arrayIdx}");
                    items.Add(arrayIndexTreeItem);

                    TreeViewItem childTreeItem = CreateTreeItem($"{childField.GetFieldType()} {childField.GetName()}{value}");
                    arrayIndexTreeItem.Items = new List <TreeViewItem>()
                    {
                        childTreeItem
                    };

                    if (childField.childrenCount > 0)
                    {
                        TreeViewItem dummyItem = CreateTreeItem("Loading...");
                        childTreeItem.Items = new List <TreeViewItem>()
                        {
                            dummyItem
                        };
                        SetTreeItemEvents(childTreeItem, fromFile, childField);
                    }

                    arrayIdx++;
                }
                else
                {
                    TreeViewItem childTreeItem = CreateTreeItem($"{childField.GetFieldType()} {childField.GetName()}{value}");
                    items.Add(childTreeItem);

                    if (childField.childrenCount > 0)
                    {
                        TreeViewItem dummyItem = CreateTreeItem("Loading...");
                        childTreeItem.Items = new List <TreeViewItem>()
                        {
                            dummyItem
                        };
                        SetTreeItemEvents(childTreeItem, fromFile, childField);
                    }
                }
            }

            string templateFieldType = assetField.templateField.type;

            if (templateFieldType.StartsWith("PPtr<") && templateFieldType.EndsWith(">"))
            {
                var  fileIdField = assetField.Get("m_FileID");
                var  pathIdField = assetField.Get("m_PathID");
                bool pptrValid   = !fileIdField.IsDummy() && !pathIdField.IsDummy();

                if (pptrValid)
                {
                    int  fileId = fileIdField.GetValue().AsInt();
                    long pathId = pathIdField.GetValue().AsInt64();

                    AssetContainer cont = workspace.GetAssetContainer(fromFile, fileId, pathId, false);

                    TreeViewItem childTreeItem = CreateTreeItem($"[view asset]");
                    items.Add(childTreeItem);

                    TreeViewItem dummyItem = CreateTreeItem("Loading...");
                    childTreeItem.Items = new List <TreeViewItem>()
                    {
                        dummyItem
                    };
                    SetPPtrEvents(childTreeItem, fromFile, cont);
                }
            }

            treeItem.Items = items;
        }