public static SMaterial FromMaterial(Material mat) { if (mat == null) return null; Shader shader = mat.shader; if (shader == null) return null; SMaterial result = new SMaterial(); result.instanceID = mat.GetInstanceID(); result.materialName = mat.name; result.shaderName = shader.name; ShaderProperties.Info info = ShaderPropertyHelper.GetShaderInfo(shader.name); if (info != null){ ComposedByteStream rawData = new ComposedByteStream(); int iMax = info.propertyNames.Length; for (int i = 0; i < iMax; i++) { string propName = info.propertyNames[i]; switch (info.propertyTypes[i]) { case ShaderProperties.PropType.Color: Color color = mat.GetColor(propName); rawData.AddStream(new float[] { color.r, color.g, color.b, color.a }); break; case ShaderProperties.PropType.Range: case ShaderProperties.PropType.Float: rawData.AddStream(new float[] { mat.GetFloat(propName) }); break; case ShaderProperties.PropType.TexEnv: Texture texture = mat.GetTexture(propName); Vector2 offset = mat.GetTextureOffset(propName); Vector2 scale = mat.GetTextureScale(propName); rawData.AddStream(new int[] { texture != null ? texture.GetInstanceID() : -1 }); rawData.AddStream(texture != null ? texture.name : "" ); rawData.AddStream(new float[] { offset.x, offset.y }); rawData.AddStream(new float[] { scale.x, scale.y }); break; case ShaderProperties.PropType.Vector: Vector4 vector = mat.GetVector(propName); rawData.AddStream(new float[] { vector.x, vector.y, vector.z, vector.w }); break; } } result.rawData = rawData.Compose(); return result; } else { if (vBug.settings.general.debugMode) Debug.LogError("No shader-info found @" + shader.name); return null; } }
//--------------- Serialize / Deserialize -------------------- public static byte[] Serialize(SWorldObject input) { ComposedPrimitives prims = new ComposedPrimitives(); prims.AddValue(input.instanceID); prims.AddValue(input.activeInHierarchy); prims.AddValue(input.color.r); prims.AddValue(input.color.g); prims.AddValue(input.color.b); prims.AddValue(input.color.a); ComposedByteStream stream = new ComposedByteStream(input.meshes.Count + 2); stream.AddStream(prims.Compose()); stream.AddStream(input.name); foreach (SMesh mesh in input.meshes) stream.AddStream(SMesh.Serialize(mesh)); return stream.Compose(); }
public static void Serialize(InputCommand input, ref ComposedByteStream storeTo) { float[] data = new float[4]; data[0] = (int)input.state; data[1] = input.position.x; data[2] = input.position.y; data[3] = input.axis; storeTo.AddStream(input.id); storeTo.AddStream(data); }
//--------------- Serialize / Deserialize -------------------- public static byte[] Serialize(SSubMeshArray input) { if (input == null || input.triangles == null || input.materialIDs == null) return null; //--------------- Triangles -------------------- int i = input.triangles.Length; ComposedByteStream triangleStream = new ComposedByteStream(i); while (--i > -1) triangleStream.AddStream(input.triangles[i]); //--------------- Triangles -------------------- ComposedByteStream merged = new ComposedByteStream(2); merged.AddStream(triangleStream.Compose()); merged.AddStream(input.materialIDs); return merged.Compose(); }
public static byte[] Serialize(ExposedUnityObjectPointer input) { ComposedByteStream stream = new ComposedByteStream(3); stream.AddStream(input.fieldName); stream.AddStream(BitConverter.GetBytes(input.instanceID)); stream.AddStream(input.objectName); stream.AddStream(input.typeName); return stream.Compose(); }