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; }
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]") }; } } }); }
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); }
public static AssetsReplacer CreateAssetReplacer(AssetContainer cont, byte[] data) { return(new AssetsReplacerFromMemory(0, cont.PathId, (int)cont.ClassId, cont.MonoId, data)); }
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; }