コード例 #1
0
        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;
            }
        }
コード例 #2
0
        //--------------- 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();
        }
コード例 #3
0
        //--------------- 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();
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        public static InputCommand Deserialize(ref ComposedByteStream stream)
        {
            InputCommand result = new InputCommand();
            result.id = stream.ReadNextStream();
            float[] data = stream.ReadNextStream<float>();

            result.state = (HumanInputState)data[0];
            result.position.x = data[1];
            result.position.y = data[2];
            result.axis = data[3];
            return result;
        }
コード例 #6
0
 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();
 }
コード例 #7
0
 protected static void DeserializeExposedObject(ref ComposedByteStream stream, ExposedObject storeTo)
 {
     storeTo.fieldName = stream.ReadNextStream();
     storeTo.typeName = stream.ReadNextStream();
     storeTo.isStruct = stream.ReadNextStream<byte>()[0] == byte.MaxValue;
     storeTo.primitiveMembers = SerializeSharedHelper.DeserializeStrings(stream.ReadNextStream<byte>());
     storeTo.objectMembers = ExposedObject.DeserializeArray(stream.ReadNextStream<byte>());
     storeTo.collectionMembers = ExposedCollection.Deserialize(stream.ReadNextStream<byte>());
     storeTo.unityObjectMembers = ExposedUnityObjectPointer.DeserializeArray(stream.ReadNextStream<byte>());
 }