public bool CreateItem(CapsResManifestNode node) { if (_Building != null) { return(true); } return(false); }
public void ModifyItem(CapsResManifestItem item) { if (_Building != null) { var asset = _Building.Asset; string rootpath = "Assets/CapsRes/"; bool inPackage = false; if (asset.StartsWith("Assets/Mods/") || (inPackage = asset.StartsWith("Packages/"))) { int index; if (inPackage) { index = asset.IndexOf('/', "Packages/".Length); } else { index = asset.IndexOf('/', "Assets/Mods/".Length); } if (index > 0) { rootpath = asset.Substring(0, index) + "/CapsRes/"; } } var dist = _Building.Dist; if (string.IsNullOrEmpty(dist)) { rootpath += "atlas/"; } else { rootpath = rootpath + "dist/" + dist + "/atlas/"; } var newpath = rootpath + _Building.AtlasName; CapsResManifestNode newnode = item.Manifest.AddOrGetItem(newpath); var newitem = new CapsResManifestItem(newnode); newitem.Type = (int)CapsResManifestItemType.Redirect; newitem.BRef = item.BRef; newitem.Ref = item; newnode.Item = newitem; } }
private static void MergeRuntimeManifestInMod(CapsResManifest target, CapsResManifestNode root) { var flags = ResManager.GetValidDistributeFlags(); if (root.Children != null) { CapsResManifestNode modNode; if (root.Children.TryGetValue("mod", out modNode)) { if (modNode != null && modNode.Children != null) { var modChildren = modNode.Children; // merge - critical mod for (int i = 0; i < modChildren.Count; ++i) { var modChild = modChildren.Values[i]; var mod = modChild.PPath; var moddesc = ResManager.GetDistributeDesc(mod); if (moddesc == null || (moddesc.InMain && !moddesc.IsOptional)) { CapsResManifest.MergeManifestNode(target.Root, modChild, true); } } // merge - opt mod for (int i = 0; i < flags.Length; ++i) { var flag = flags[i]; CapsResManifestNode modChild; if (modChildren.TryGetValue(flag, out modChild)) { if (modChild != null) { CapsResManifest.MergeManifestNode(target.Root, modChild, true); } } } } } } }
private static void GetCriticalLuaMods(CapsResManifestNode root, List <string> cmods) { CapsResManifestNode modnode; if (root.Children.TryGetValue("mod", out modnode)) { var modChildren = modnode.Children; if (modChildren != null) { for (int i = 0; i < modChildren.Count; ++i) { var modChild = modChildren.Values[i]; var mod = modChild.PPath; var moddesc = ResManager.GetDistributeDesc(mod); if (moddesc == null || (moddesc.InMain && !moddesc.IsOptional)) { cmods.Add(mod); } } } } }
// This will judge whether a mod is optional, so this should be called in UnityMain thread. private static CapsResManifest MergeAndCollapseRuntimeManifest(CapsResManifest rawmani) { var root = rawmani.Root; var rmani = new CapsResManifest(); if (root != null) { rmani.Root = new CapsResManifestNode(rmani); CapsResManifestNode tmpNode = new CapsResManifestNode(rawmani); CapsResManifestNode archNode = null; if (root.Children != null) { tmpNode.Children = new SortedList <string, CapsResManifestNode>(); for (int i = 0; i < root.Children.Count; ++i) { var child = root.Children.Values[i]; if (child.PPath == "mod") { continue; } else if (child.PPath == "@64") { if (Environment.Is64BitProcess) { archNode = child; } continue; } else if (child.PPath == "@32") { if (!Environment.Is64BitProcess) { archNode = child; } continue; } tmpNode.Children[child.PPath] = child; } } // merge - no mod CapsResManifest.MergeManifestNode(rmani.Root, tmpNode, true); // merge - no mod on arch if (archNode != null) { tmpNode = new CapsResManifestNode(rawmani); if (archNode.Children != null) { tmpNode.Children = new SortedList <string, CapsResManifestNode>(); for (int i = 0; i < archNode.Children.Count; ++i) { var child = archNode.Children.Values[i]; if (child.PPath == "mod") { continue; } tmpNode.Children[child.PPath] = child; } } CapsResManifest.MergeManifestNode(rmani.Root, tmpNode, true); } // merge - mod MergeRuntimeManifestInMod(rmani, root); // merge - mod on arch if (archNode != null) { MergeRuntimeManifestInMod(rmani, archNode); } // Collapse var flags = ResManager.GetValidDistributeFlags(); rmani.CollapseManifest(flags); rmani.TrimExcess(); } return(rmani); }
public static CapsResManifest LoadManifest(string file) { CapsResManifest mani = new CapsResManifest(); if (PlatDependant.IsFileExist(file)) { using (var sr = PlatDependant.OpenReadText(file)) { if (sr != null) { List <CapsResManifestNode> nodeStack = new List <CapsResManifestNode>(); var root = new CapsResManifestNode(mani); mani.Root = root; nodeStack.Add(root); int nxtChar = -1; while ((nxtChar = sr.Peek()) > 0) { int lvl = 0; while (nxtChar == '*') { sr.Read(); ++lvl; nxtChar = sr.Peek(); } string ppath = sr.ReadLine(); if (string.IsNullOrEmpty(ppath)) { continue; } if (nodeStack.Count > lvl) { var last = nodeStack[nodeStack.Count - 1]; if (last.Children == null || last.Children.Count <= 0) { CapsResManifestItem item; item = new CapsResManifestItem(last); last.Item = item; } nodeStack.RemoveRange(lvl, nodeStack.Count - lvl); } { var last = nodeStack[nodeStack.Count - 1]; if (last.Children == null) { last.Children = new SortedList <string, CapsResManifestNode>(); } var child = new CapsResManifestNode(last, ppath); last.Children[ppath] = child; nodeStack.Add(child); } } if (nodeStack.Count > 1) { var last = nodeStack[nodeStack.Count - 1]; CapsResManifestItem item; item = new CapsResManifestItem(last); last.Item = item; } mani.TrimExcess(); } } } return(mani); }
public void ModifyItem(CapsResManifestItem item) { if (_Building != null) { var node = item.Node; var asset = _Building.Asset; string rootpath = "Assets/CapsRes/"; bool inPackage = false; if (asset.StartsWith("Assets/Mods/") || (inPackage = asset.StartsWith("Packages/"))) { int index; if (inPackage) { index = asset.IndexOf('/', "Packages/".Length); } else { index = asset.IndexOf('/', "Assets/Mods/".Length); } if (index > 0) { rootpath = asset.Substring(0, index) + "/CapsRes/"; } } var dist = _Building.Dist; if (string.IsNullOrEmpty(dist)) { rootpath += "font/"; } else { rootpath = rootpath + "dist/" + dist + "/font/"; } var newpath = rootpath + node.PPath; CapsResManifestNode newnode = item.Manifest.AddOrGetItem(newpath); var newitem = new CapsResManifestItem(newnode); newitem.Type = (int)CapsResManifestItemType.Redirect; newitem.BRef = item.BRef; newitem.Ref = item; newnode.Item = newitem; if (_PHFontDescs.Contains(asset)) { newpath = rootpath + "placeholder"; newnode = item.Manifest.AddOrGetItem(newpath); if (newnode.Item == null) { newitem = new CapsResManifestItem(newnode); newitem.Type = (int)CapsResManifestItemType.Redirect; newitem.BRef = item.BRef; newitem.Ref = item; newnode.Item = newitem; } } else if (_ReplacementDescs.Contains(asset)) { newpath = rootpath + "replacement"; newnode = item.Manifest.AddOrGetItem(newpath); if (newnode.Item == null) { newitem = new CapsResManifestItem(newnode); newitem.Type = (int)CapsResManifestItemType.Redirect; newitem.BRef = item.BRef; newitem.Ref = item; newnode.Item = newitem; } } } }
public bool CreateItem(CapsResManifestNode node) { return(false); }