Esempio n. 1
0
		private void ParseSkinSet(BinaryParser parser, AnimSkin skin)
		{
			var name = parser.ConsumeUInt32();
			var numVerts = parser.ConsumeUInt32();
			var numBones = parser.ConsumeByte();
			parser.Expect(1);
			var boneIds = parser.ConsumeByteArray(numBones);
			var vertIds = parser.ConsumeUInt16Array((int)numVerts);
			var preMultipliedPositions = parser.ConsumeVector3Array((int)numVerts * numBones);
			var weights = parser.ConsumeFloatArray((int)numVerts * numBones);

			for (int index = 0; index < vertIds.Length; index++)
			{
				var id = vertIds[index];
				skin.Weights.EnsureAt(id);
				var vertexWeights = new VertexWeights { };
				if (numBones > 0)
				{
					vertexWeights.Bone0 = new VertexWeight { BoneIndex = boneIds[0], Weight = weights[0 + index * numBones] };
				}
				if (numBones > 1)
				{
					vertexWeights.Bone1 = new VertexWeight { BoneIndex = boneIds[1], Weight = weights[1 + index * numBones] };
				}
				if (numBones > 2)
				{
					vertexWeights.Bone2 = new VertexWeight { BoneIndex = boneIds[2], Weight = weights[2 + index * numBones] };
				}
				if (numBones > 3)
				{
					vertexWeights.Bone3 = new VertexWeight { BoneIndex = boneIds[3], Weight = weights[3 + index * numBones] };
				}
				skin.Weights[id] = vertexWeights;
			}
		}
Esempio n. 2
0
		private void ParseModelBlockCols(BinaryParser parser, Model model, uint name, uint size, uint numItems, ushort flags)
		{
			var streamMesh = (model.Meshes[0]);
			int num = (int)numItems;
			streamMesh.Colors.Clear();
			streamMesh.Colors.Capacity = num;
			if (parser.ConsumeBool())
			{
				for (int i = 0; i < num; ++i)
				{
					byte b = parser.ConsumeByte();
					streamMesh.Colors.Add(Color.FromArgb(255, b, b, b));
				}
			}
			else
			{
				var c = parser.ConsumeByteArray(num * 4);
				for (int i = 0; i < num; ++i)
				{
					streamMesh.Colors.Add(Color.FromArgb(c[i + num * 3], c[i + num * 0], c[i + num * 1], c[i + num * 2]));
				}
			}
		}
Esempio n. 3
0
		private Image ParseImage(BinaryParser parser)
		{
			var image = new Image();

			image.Format = (ImageFormat)parser.ConsumeUInt8();

			image.Flags = parser.ConsumeUInt16();

			image.width = parser.ConsumeUInt16();
			image.height = parser.ConsumeUInt16();
			image.pitch = parser.ConsumeUInt16();
			image.palette = parser.ConsumeUInt32();

			byte[] d = new byte[image.height * image.pitch];
			parser.ConsumeArray(d);
			image.data = d;

			switch (image.Format)
			{
				case ImageFormat.ABGR_8888:
				case ImageFormat.BGR_888:
				case ImageFormat.RGB_888:
					return image;
					//case Image.PALETTE4_ABGR_1555:
					//    format = (new Palette4Abgr1555(image.width, image.height, image.pitch));
					//    Debug.WriteLine(string.Format("Image PALETTE4_ABGR_1555 {0}x{1}", image.width, image.height));
					//    break;
					//case Image.PALETTE4_RGB_888:
					//    format = (new Palette4Rgb888(image.width, image.height, image.pitch));
					//    Debug.WriteLine(string.Format("Image PALETTE4_RGB_888 {0}x{1}", image.width, image.height));
					//    break;
					//case Image.PALETTE8_ABGR_1555:
					//    format = (new Palette8Abgr1555(image.width, image.height, image.pitch));
					//    Debug.WriteLine(string.Format("Image PALETTE8_ABGR_1555 {0}x{1}", image.width, image.height));
					//    break;
					//case Image.ABGR_1555:
					//    Debug.WriteLine(string.Format("Image ABGR_1555 {0}x{1}", image.width, image.height));
					//    LoadABGR1555(serialise);
					//    return;
					//case Image.RGBA_6666:
					//    Debug.WriteLine(string.Format("Image RGBA_6666 {0}x{1}", image.width, image.height));
					//    LoadRgba6666(serialise);
					//    return;
				case ImageFormat.PALETTE8_RGB_888:
					image.PaletteData = parser.ConsumeByteArray(256 * 3);
					return image;
				case ImageFormat.PALETTE8_ABGR_8888:
				case ImageFormat.PALETTE8_ARGB_8888:
				case ImageFormat.PALETTE8_RGBA_8888:
					image.PaletteData = parser.ConsumeByteArray(256 * 4);
					return image;
				case ImageFormat.PALETTE4_RGB_888:
					image.PaletteData = parser.ConsumeByteArray(16 * 3);
					return image;
				case ImageFormat.PALETTE4_ABGR_8888:
				case ImageFormat.PALETTE4_ARGB_8888:
				case ImageFormat.PALETTE4_RGBA_8888:
					image.PaletteData = parser.ConsumeByteArray(16 * 4);
					return image;
				default:
					throw new FormatException(string.Format(CultureInfo.CurrentCulture, "Unknown image format 0x{0:x}", image.Format));
			}
		}