public static void ParseManifest() { DiscardUnityManifests(); CollapsedManifest.DiscardAllNodes(); var manibundlenames = GetAllResManiBundleNames(); // the mod "" ParseManifest("", manibundlenames); var dflags = GetValidDistributeFlags(); for (int i = 0; i < dflags.Length; ++i) { ParseManifest(dflags[i], manibundlenames); } CollapsedManifest.CollapseManifest(dflags); CollapsedManifest.TrimExcess(); ParseBuiltinScenes(); }
public static CapsResManifest Load(CapsResOnDiskManifest ondisk) { if (ondisk == null) { return(null); } CapsResManifest rv = new CapsResManifest(); rv.MFlag = ondisk.MFlag; rv.DFlag = ondisk.DFlag; rv.InMain = ondisk.InMain; if (ondisk.Assets != null && ondisk.Assets.Length > 0) { List <CapsResManifestNode> nodeStack = new List <CapsResManifestNode>(); var parsedNodes = new CapsResManifestNode[ondisk.Assets.Length]; for (int i = 0; i < ondisk.Assets.Length; ++i) { var curDiskNode = ondisk.Assets[i]; var curlvl = curDiskNode.Level; if (nodeStack.Count > curlvl) { var removecnt = nodeStack.Count - curlvl; nodeStack.RemoveRange(nodeStack.Count - removecnt, removecnt); } while (nodeStack.Count < curlvl) { // something goes wrong here. nodeStack.Add(null); } CapsResManifestNode curNode; if (curlvl == 0) { curNode = new CapsResManifestNode(rv); rv.Root = curNode; //curNode.PPath = curDiskNode.PPath; } else { var parNode = nodeStack[curlvl - 1]; var ppath = curDiskNode.PPath; curNode = new CapsResManifestNode(parNode, ppath); if (parNode.Children == null) { parNode.Children = new SortedList <string, CapsResManifestNode>(); } parNode.Children[ppath] = curNode; } nodeStack.Add(curNode); parsedNodes[i] = curNode; if (curDiskNode.Item != null && curDiskNode.Item.Type != 0) { var item = new CapsResManifestItem(curNode); curNode.Item = item; item.Type = curDiskNode.Item.Type; if (curDiskNode.Item.BRef > 0) { if (ondisk.Bundles != null && ondisk.Bundles.Length > curDiskNode.Item.BRef) { item.BRef = ondisk.Bundles[curDiskNode.Item.BRef]; } } if (curDiskNode.Item.ExInfo != null) { item.ExInfo = UnityEngine.Object.Instantiate <ScriptableObject>(curDiskNode.Item.ExInfo); } } } for (int i = 0; i < ondisk.Assets.Length; ++i) { var curDiskNode = ondisk.Assets[i]; if (curDiskNode.Item != null && curDiskNode.Item.Type != 0 && curDiskNode.Item.Ref > 0) { parsedNodes[i].Item.Ref = parsedNodes[curDiskNode.Item.Ref].Item; } } } rv.TrimExcess(); return(rv); }