SkinThickness.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. public class SkinThickness
  5. {
  6. public void Serialize(BinaryWriter bw)
  7. {
  8. bw.Write("SkinThickness");
  9. bw.Write(SkinThickness.VER);
  10. bw.Write(this.use);
  11. bw.Write(this.groups.Count);
  12. foreach (KeyValuePair<string, SkinThickness.Group> keyValuePair in this.groups)
  13. {
  14. bw.Write(keyValuePair.Key);
  15. keyValuePair.Value.Serialize(bw);
  16. }
  17. }
  18. public void Deserialize(BinaryReader br)
  19. {
  20. this.groups = new Dictionary<string, SkinThickness.Group>();
  21. string a = br.ReadString();
  22. NDebug.Assert(a == "SkinThickness", "表皮までの距離ファイル破損。");
  23. int num = br.ReadInt32();
  24. this.use = br.ReadBoolean();
  25. int num2 = br.ReadInt32();
  26. for (int i = 0; i < num2; i++)
  27. {
  28. string key = br.ReadString();
  29. SkinThickness.Group group = new SkinThickness.Group();
  30. group.Deserialize(br);
  31. this.groups.Add(key, group);
  32. }
  33. }
  34. public bool use;
  35. public Dictionary<string, SkinThickness.Group> groups;
  36. private static readonly int VER = 100;
  37. public class Group
  38. {
  39. public void Serialize(BinaryWriter bw)
  40. {
  41. bw.Write(this.groupName);
  42. bw.Write(this.startBoneName);
  43. bw.Write(this.endBoneName);
  44. bw.Write(this.stepAngleDgree);
  45. bw.Write(this.points.Count);
  46. for (int i = 0; i < this.points.Count; i++)
  47. {
  48. this.points[i].Serialize(bw);
  49. }
  50. }
  51. public void Deserialize(BinaryReader br)
  52. {
  53. this.points = new List<SkinThickness.Group.Point>();
  54. this.groupName = br.ReadString();
  55. this.startBoneName = br.ReadString();
  56. this.endBoneName = br.ReadString();
  57. this.stepAngleDgree = br.ReadInt32();
  58. int num = br.ReadInt32();
  59. for (int i = 0; i < num; i++)
  60. {
  61. SkinThickness.Group.Point point = new SkinThickness.Group.Point();
  62. point.Deserialize(br);
  63. this.points.Add(point);
  64. }
  65. }
  66. public string groupName;
  67. public string startBoneName;
  68. public string endBoneName;
  69. public int stepAngleDgree;
  70. public List<SkinThickness.Group.Point> points;
  71. public class Point
  72. {
  73. public void Serialize(BinaryWriter bw)
  74. {
  75. bw.Write(this.targetBoneName);
  76. bw.Write(this.ratioSegmentStartToEnd);
  77. bw.Write(this.distanceParAngle.Count);
  78. for (int i = 0; i < this.distanceParAngle.Count; i++)
  79. {
  80. this.distanceParAngle[i].Serialize(bw);
  81. }
  82. }
  83. public void Deserialize(BinaryReader br)
  84. {
  85. this.distanceParAngle = new List<SkinThickness.Group.Point.DefPerAngle>();
  86. this.targetBoneName = br.ReadString();
  87. this.ratioSegmentStartToEnd = br.ReadSingle();
  88. int num = br.ReadInt32();
  89. for (int i = 0; i < num; i++)
  90. {
  91. SkinThickness.Group.Point.DefPerAngle defPerAngle = new SkinThickness.Group.Point.DefPerAngle();
  92. defPerAngle.Deserialize(br);
  93. this.distanceParAngle.Add(defPerAngle);
  94. }
  95. }
  96. public string targetBoneName;
  97. public float ratioSegmentStartToEnd;
  98. public List<SkinThickness.Group.Point.DefPerAngle> distanceParAngle;
  99. public class DefPerAngle
  100. {
  101. public void Serialize(BinaryWriter bw)
  102. {
  103. bw.Write(this.angleDgree);
  104. bw.Write(this.vidx);
  105. bw.Write(this.defaultDistance);
  106. }
  107. public void Deserialize(BinaryReader br)
  108. {
  109. this.angleDgree = br.ReadInt32();
  110. this.vidx = br.ReadInt32();
  111. this.defaultDistance = br.ReadSingle();
  112. }
  113. public int angleDgree;
  114. public int vidx;
  115. public float defaultDistance;
  116. }
  117. }
  118. }
  119. }