private static byte[] WriteGroup(int id, VoxelData.GroupData group) { List <byte> bytes = new List <byte>(); bytes.AddRange(GetBytes(id)); bytes.AddRange(GetBytes(group.Attributes.Count)); foreach (var att in group.Attributes) { AddVoxStringBytes(ref bytes, att.Key); AddVoxStringBytes(ref bytes, att.Value); } bytes.AddRange(GetBytes(group.ChildNodeId.Length)); for (int i = 0; i < group.ChildNodeId.Length; i++) { bytes.AddRange(GetBytes(group.ChildNodeId[i])); } return(ToChrunkByte(bytes, "nGRP")); }
public VoxelData GetVoxelData() { var data = new VoxelData() { Version = Version, Voxels = new List <int[, , ]>(), Palette = new List <Color>(Palette), Materials = new List <VoxelData.MaterialData>(Materials), Transforms = new Dictionary <int, VoxelData.TransformData>(), Groups = new Dictionary <int, VoxelData.GroupData>(), Shapes = new Dictionary <int, VoxelData.ShapeData>(), Rigs = new Dictionary <int, VoxelData.RigData>(), }; // Voxels for (int i = 0; i < Voxels.Length; i++) { var sourceV = Voxels[i]; int[,,] vs = new int[sourceV.SizeX, sourceV.SizeY, sourceV.SizeZ]; for (int x = 0; x < sourceV.SizeX; x++) { for (int y = 0; y < sourceV.SizeY; y++) { for (int z = 0; z < sourceV.SizeZ; z++) { vs[x, y, z] = sourceV.Get(x, y, z); } } } data.Voxels.Add(vs); } // Transforms for (int i = 0; i < Transforms.Length; i++) { data.Transforms.Add(TransformIndexs[i], Transforms[i]); } // Groups for (int i = 0; i < Groups.Length; i++) { var groupData = new VoxelData.GroupData() { ChildNodeId = Groups[i].ChildNodeId, Attributes = new Dictionary <string, string>(), }; for (int j = 0; j < Groups[i].AttKeys.Length; j++) { groupData.Attributes.Add(Groups[i].AttKeys[j], Groups[i].Attributes[j]); } data.Groups.Add(Groups[i].Index, groupData); } // Shapes for (int i = 0; i < Shapes.Length; i++) { var sourceShape = Shapes[i]; var shapeData = new VoxelData.ShapeData() { Attributes = new Dictionary <string, string>(), ModelData = new KeyValuePair <int, Dictionary <string, string> > [sourceShape.ModelDatas.Length], }; for (int j = 0; j < sourceShape.Attributes.Length; j++) { shapeData.Attributes.Add(sourceShape.AttKeys[j], sourceShape.Attributes[j]); } for (int j = 0; j < sourceShape.ModelDatas.Length; j++) { shapeData.ModelData[j] = new KeyValuePair <int, Dictionary <string, string> >( sourceShape.ModelDataIndexs[j], new Dictionary <string, string>() ); var sourceData = sourceShape.ModelDatas[j]; for (int k = 0; k < sourceData.Value.Length; k++) { shapeData.ModelData[j].Value.Add(sourceData.Key[k], sourceData.Value[k]); } } data.Shapes.Add(sourceShape.Index, shapeData); } // Rig for (int i = 0; i < Rigs.Length; i++) { var bones = Rigs[i].Bones; for (int j = 0; j < bones.Count; j++) { bones[j].Parent = null; int pIndex = bones[j].ParentIndex; if (pIndex >= 0 && pIndex < bones.Count) { bones[j].Parent = bones[pIndex]; } } data.Rigs.Add(RigIndexs[i], Rigs[i]); } return(data); }