//save format: //write this element's position //for each sub-element //write their ID //write their element public static CharaIndexNode Load(BinaryReader reader) { CharaIndexNode node = new CharaIndexNode(); node.Position = reader.ReadInt64(); int count = reader.ReadInt32(); for (int ii = 0; ii < count; ii++) { int id = reader.ReadInt32(); CharaIndexNode subNode = CharaIndexNode.Load(reader); node.Nodes[id] = subNode; } return(node); }
private static CharaIndexNode LoadCharaIndices(string charaDir) { CharaIndexNode fullGuide = null; try { using (FileStream stream = File.OpenRead(charaDir + "index.idx")) { using (BinaryReader reader = new BinaryReader(stream)) fullGuide = CharaIndexNode.Load(reader); } } catch (Exception ex) { DiagManager.Instance.LogError(new Exception("Error reading header at " + charaDir + "\n", ex)); } return(fullGuide); }
public static MonsterID GetFallbackForm(CharaIndexNode guide, MonsterID data) { MonsterID fallback = MonsterID.Invalid; MonsterID buffer = MonsterID.Invalid; if (guide.Nodes.ContainsKey(data.Species)) { buffer.Species = data.Species; //if (guide.Nodes[data.Species].Position > 0) fallback = buffer; if (guide.Nodes[data.Species].Nodes.ContainsKey(data.Form)) { buffer.Form = data.Form; if (guide.Nodes[data.Species].Nodes[data.Form].Position > 0) { fallback = buffer; } int trialSkin = data.Skin; while (trialSkin > -1) { if (guide.Nodes[data.Species].Nodes[data.Form].Nodes.ContainsKey(trialSkin)) { buffer.Skin = trialSkin; if (guide.Nodes[data.Species].Nodes[data.Form].Nodes[trialSkin].Position > 0) { fallback = buffer; } if (guide.Nodes[data.Species].Nodes[data.Form].Nodes[trialSkin].Nodes.ContainsKey((int)data.Gender)) { buffer.Gender = data.Gender; if (guide.Nodes[data.Species].Nodes[data.Form].Nodes[trialSkin].Nodes[(int)data.Gender].Position > 0) { fallback = buffer; } } break; } trialSkin--; } } } return(fallback); }
private void addSubValue(long position, int[] subIDs, int subIDIndex) { if (subIDIndex < subIDs.Length) { int nodeIndex = subIDs[subIDIndex]; if (nodeIndex == -1) { Position = position; } else { if (!Nodes.ContainsKey(nodeIndex)) { Nodes[nodeIndex] = new CharaIndexNode(); } Nodes[nodeIndex].addSubValue(position, subIDs, subIDIndex + 1); } } else { Position = position; } }