Exemplo n.º 1
0
        public static Material RestoreMaterialFromData(MaterialRestoreData data, MaterialFactory factory)
        {
            Assert.IsNotNull(factory);
            // no data supplied, return nothing
            if (data == null)
            {
                return(null);
            }

            // preserve data consistency of material factor
            var mat = data.isRestorableMaterial
                ? factory.GetRestorableMaterial(data.shaderName)
                : factory.Get(data.shaderName);

            foreach (var c in data.colorDatas)
            {
                mat.SetColor(c.Key, c.Value);
            }

            foreach (var v in data.vectorDatas)
            {
                mat.SetVector(v.Key, v.Value);
            }

            foreach (var f in data.floatDatas)
            {
                mat.SetFloat(f.Key, f.Value);
            }

            foreach (var so in data.textureScaleOffsets)
            {
                var name = so.Key;
                so.Value.Split(out var s, out var o);
                mat.SetTextureScale(name, s);
                mat.SetTextureOffset(name, o);
            }

            if (!data.isRestorableMaterial)
            {
                return(mat);
            }

            var res = mat as RestorableMaterial;

            Assert.IsNotNull(res);
            foreach (var t in data.textureNames)
            {
                res.SetTexturePath(t.Key, t.Value);
            }

            return(res);
        }