예제 #1
0
		/// <summary>
		/// Parse text block.
		/// </summary>
		public virtual void SerializeContent(TextSerializer parser, Managed managed)
		{
			parser.WriteAttribute("name");
			parser.WriteStringValue(managed.Name);

		}
예제 #2
0
		/// <summary>
		/// Parse text block.
		/// </summary>
		public override void SerializeContent(TextSerializer parser, Managed managed)
		{
			base.SerializeContent(parser, managed);
			var variables = (Model)managed;
			int i = 1;
			foreach (var mesh in variables.Meshes)
			{
				parser.WriteAttribute("CMesh");
				parser.OpenBlock();
				parser.WriteAttribute("name");
				parser.WriteStringValue(mesh.Name,"mesh"+i);

				parser.WriteAttribute("scale");
				parser.WriteFloatValue(1);

				if (mesh.IsVertexStreamAvailable)
				{
					parser.WriteAttribute("CVerts");
					parser.OpenBlock();
					parser.WriteAttribute("numVerts");
					parser.WriteIntValue(mesh.Vertices.Count);
					foreach (var vector3 in mesh.Vertices)
					{
						parser.WriteAttribute("v");
						parser.WriteRaw(" {");
						parser.WriteFloatValue(vector3.X);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.Y);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.Z);
						parser.WriteRaw(" }");
					}
					parser.CloseBlock();
				}

				if (mesh.IsNormalStreamAvailable)
				{
					parser.WriteAttribute("CVertNorms");
					parser.OpenBlock();
					parser.WriteAttribute("numVertNorms");
					parser.WriteIntValue(mesh.Normals.Count);
					foreach (var vector3 in mesh.Normals)
					{
						parser.WriteAttribute("vn");
						parser.WriteRaw(" {");
						parser.WriteFloatValue(vector3.X);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.Y);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.Z);
						parser.WriteRaw(" }");
					}
					parser.CloseBlock();
				}

				if (mesh.IsColorStreamAvailable)
				{
					parser.WriteAttribute("CVertCols");
					parser.OpenBlock();
					parser.WriteAttribute("numVertCols");
					parser.WriteIntValue(mesh.Colors.Count);
					foreach (var vector3 in mesh.Colors)
					{
						parser.WriteAttribute("col");
						parser.WriteRaw(" {");
						parser.WriteFloatValue(vector3.R / 255.0f);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.G / 255.0f);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.B / 255.0f);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.A/255.0f);
						parser.WriteRaw(" }");
					}
					parser.CloseBlock();
				}

				if (mesh.IsUV0StreamAvailable)
				{
					parser.WriteAttribute("CUVs");
					parser.OpenBlock();
					parser.WriteAttribute("setID");
					parser.WriteIntValue(0);
					parser.WriteAttribute("numUVs");
					parser.WriteIntValue(mesh.UV0.Count);
					foreach (var vector3 in mesh.UV0)
					{
						parser.WriteAttribute("uv");
						parser.WriteRaw(" {");
						parser.WriteFloatValue(vector3.X);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.Y);
						parser.WriteRaw(" }");
					}
					parser.CloseBlock();
				}

				if (mesh.IsUV1StreamAvailable)
				{
					parser.WriteAttribute("CUVs");
					parser.OpenBlock();
					parser.WriteAttribute("setID");
					parser.WriteIntValue(1);
					parser.WriteAttribute("numUVs");
					parser.WriteIntValue(mesh.UV1.Count);
					foreach (var vector3 in mesh.UV1)
					{
						parser.WriteAttribute("uv");
						parser.WriteRaw(" {");
						parser.WriteFloatValue(vector3.X);
						parser.WriteRaw(",");
						parser.WriteFloatValue(vector3.Y);
						parser.WriteRaw(" }");
					}
					parser.CloseBlock();
				}
				foreach (var surface in mesh.Surfaces)
				{
					parser.WriteAttribute("CSurface");
					parser.OpenBlock();
					parser.WriteAttribute("material");
					parser.WriteStringValue(surface.Material.NameReference,"noskin");

					switch (surface.VertexSourceType)
					{
						case VertexSourceType.TriangleList:
							WriteTriList(parser, surface, mesh);
							break;
						//case VertexSourceType.TrianleStrip:
						//	break;
						//case VertexSourceType.QuadList:
						//	break;
						//case VertexSourceType.QuadStrip:
						//	break;
						//case VertexSourceType.LineLine:
						//	break;
						//case VertexSourceType.LineStrip:
						//	break;
						default:
							throw new ArgumentOutOfRangeException();
					}

					WriteTriList(parser, surface, mesh);
					parser.CloseBlock();
				}

				parser.CloseBlock();
				++i;
			}
		}