using System; using System.Collections.Generic; using System.IO; public class SkinThickness { public void Serialize(BinaryWriter bw) { bw.Write("SkinThickness"); bw.Write(SkinThickness.VER); bw.Write(this.use); bw.Write(this.groups.Count); foreach (KeyValuePair keyValuePair in this.groups) { bw.Write(keyValuePair.Key); keyValuePair.Value.Serialize(bw); } } public void Deserialize(BinaryReader br) { this.groups = new Dictionary(); string a = br.ReadString(); NDebug.Assert(a == "SkinThickness", "表皮までの距離ファイル破損。"); int num = br.ReadInt32(); this.use = br.ReadBoolean(); int num2 = br.ReadInt32(); for (int i = 0; i < num2; i++) { string key = br.ReadString(); SkinThickness.Group group = new SkinThickness.Group(); group.Deserialize(br); this.groups.Add(key, group); } } public bool use; public Dictionary groups; private static readonly int VER = 100; public class Group { public void Serialize(BinaryWriter bw) { bw.Write(this.groupName); bw.Write(this.startBoneName); bw.Write(this.endBoneName); bw.Write(this.stepAngleDgree); bw.Write(this.points.Count); for (int i = 0; i < this.points.Count; i++) { this.points[i].Serialize(bw); } } public void Deserialize(BinaryReader br) { this.points = new List(); this.groupName = br.ReadString(); this.startBoneName = br.ReadString(); this.endBoneName = br.ReadString(); this.stepAngleDgree = br.ReadInt32(); int num = br.ReadInt32(); for (int i = 0; i < num; i++) { SkinThickness.Group.Point point = new SkinThickness.Group.Point(); point.Deserialize(br); this.points.Add(point); } } public string groupName; public string startBoneName; public string endBoneName; public int stepAngleDgree; public List points; public class Point { public void Serialize(BinaryWriter bw) { bw.Write(this.targetBoneName); bw.Write(this.ratioSegmentStartToEnd); bw.Write(this.distanceParAngle.Count); for (int i = 0; i < this.distanceParAngle.Count; i++) { this.distanceParAngle[i].Serialize(bw); } } public void Deserialize(BinaryReader br) { this.distanceParAngle = new List(); this.targetBoneName = br.ReadString(); this.ratioSegmentStartToEnd = br.ReadSingle(); int num = br.ReadInt32(); for (int i = 0; i < num; i++) { SkinThickness.Group.Point.DefPerAngle defPerAngle = new SkinThickness.Group.Point.DefPerAngle(); defPerAngle.Deserialize(br); this.distanceParAngle.Add(defPerAngle); } } public string targetBoneName; public float ratioSegmentStartToEnd; public List distanceParAngle; public class DefPerAngle { public void Serialize(BinaryWriter bw) { bw.Write(this.angleDgree); bw.Write(this.vidx); bw.Write(this.defaultDistance); } public void Deserialize(BinaryReader br) { this.angleDgree = br.ReadInt32(); this.vidx = br.ReadInt32(); this.defaultDistance = br.ReadSingle(); } public int angleDgree; public int vidx; public float defaultDistance; } } } }