private static void WriteEffectInstance(XEffectInstance effect, XofFileSaveData saveData) { byte[] data; using (var ms = new MemoryStream()) using (var writer = new BinaryWriter(ms)) { WriteString(effect.EffectFilename, writer); data = ms.ToArray(); } using (var child = saveData.AddData(XofFileDefaultTemplates.EffectInstanceId, effect.Name, null, data)) { foreach (var param in effect.IntegerParameters) { WriteEffectParamDWord(param, child); } foreach (var param in effect.FloatParameters) { WriteEffectParamFloats(param, child); } foreach (var param in effect.StringParameters) { WriteEffectParamString(param, child); } } }
private static XEffectInstance ReadEffectInstance(XofFileEnumData enumData) { var effect = new XEffectInstance { Name = enumData.GetName() }; byte[] data = enumData.GetData(); using (var ms = new MemoryStream(data, false)) using (var reader = new BinaryReader(ms)) { effect.EffectFilename = ReadString(reader); if (ms.Position != ms.Length) { throw new InvalidDataException(); } } int childrenCount = enumData.GetChildrenCount(); for (int childIndex = 0; childIndex < childrenCount; childIndex++) { using (var child = enumData.GetChild(childIndex)) { Guid type = child.GetTemplateType(); if (type == XofFileDefaultTemplates.EffectParamDWordId) { effect.IntegerParameters.Add(ReadEffectParamDWord(child)); } else if (type == XofFileDefaultTemplates.EffectParamFloatsId) { effect.FloatParameters.Add(ReadEffectParamFloats(child)); } else if (type == XofFileDefaultTemplates.EffectParamStringId) { effect.StringParameters.Add(ReadEffectParamString(child)); } else { throw new InvalidDataException(); } } } return(effect); }