Exemplo n.º 1
0
        public static ResU.ShaderParamAnim FSHUConvertSwitchToWiiU(ResNX.MaterialAnim materialAnim)
        {
            var shaderParamAnim = new ResU.ShaderParamAnim();

            shaderParamAnim.Name        = materialAnim.Name;
            shaderParamAnim.Path        = materialAnim.Path;
            shaderParamAnim.BindIndices = materialAnim.BindIndices;
            shaderParamAnim.FrameCount  = materialAnim.FrameCount;
            if (materialAnim.Loop)
            {
                shaderParamAnim.Flags |= ResU.ShaderParamAnimFlags.Looping;
            }

            for (int m = 0; m < materialAnim.MaterialAnimDataList.Count; m++)
            {
                if (materialAnim.MaterialAnimDataList[m].Constants == null)
                {
                    materialAnim.MaterialAnimDataList[m].Constants = new List <ResNX.AnimConstant>();
                }
                if (materialAnim.MaterialAnimDataList[m].Curves == null)
                {
                    materialAnim.MaterialAnimDataList[m].Curves = new List <ResNX.AnimCurve>();
                }

                ResU.ShaderParamMatAnim matAnimData = new ResU.ShaderParamMatAnim();
                shaderParamAnim.ShaderParamMatAnims.Add(matAnimData);
                matAnimData.Name   = materialAnim.MaterialAnimDataList[m].Name;
                matAnimData.Curves = ConvertAnimCurveSwitchToWiiU(materialAnim.MaterialAnimDataList[m].Curves);

                foreach (var constants in materialAnim.MaterialAnimDataList[m].Constants)
                {
                    matAnimData.Constants.Add(new ResU.AnimConstant()
                    {
                        AnimDataOffset = constants.AnimDataOffset,
                        Value          = (float)constants.Value,
                    });
                }

                foreach (var paramInfoNX in materialAnim.MaterialAnimDataList[m].ParamAnimInfos)
                {
                    var paramInfoU = new ResU.ParamAnimInfo();
                    paramInfoU.Name            = paramInfoNX.Name;
                    paramInfoU.BeginCurve      = paramInfoNX.BeginCurve;
                    paramInfoU.BeginConstant   = paramInfoNX.BeginConstant;
                    paramInfoU.FloatCurveCount = paramInfoNX.FloatCurveCount;
                    paramInfoU.IntCurveCount   = paramInfoNX.IntCurveCount;
                    paramInfoU.SubBindIndex    = paramInfoNX.SubBindIndex;
                    paramInfoU.ConstantCount   = paramInfoNX.ConstantCount;
                    matAnimData.ParamAnimInfos.Add(paramInfoU);
                }
            }

            return(shaderParamAnim);
        }
Exemplo n.º 2
0
        public static ResU.ShaderParamMatAnim Clr0Entry2ShaderMatAnim(CLR0Node clr0, CLR0MaterialNode clrMaterial)
        {
            ResU.ShaderParamMatAnim matAnim = new ResU.ShaderParamMatAnim();
            matAnim.Name = clrMaterial.Name;
            foreach (var entry in clrMaterial.Children)
            {
                ushort curveIndex    = 0;
                ushort constantIndex = 0;

                CLR0MaterialEntryNode ParamEntry = (CLR0MaterialEntryNode)entry;

                //Add constants for RGBA if constant
                if (ParamEntry.Constant)
                {
                    //Red
                    matAnim.Constants.Add(new ResU.AnimConstant()
                    {
                        AnimDataOffset = 0,
                        Value          = (float)ParamEntry.Colors[0].R / 255f,
                    });

                    //Green
                    matAnim.Constants.Add(new ResU.AnimConstant()
                    {
                        AnimDataOffset = 4,
                        Value          = (float)ParamEntry.Colors[0].G / 255f,
                    });

                    //Blue
                    matAnim.Constants.Add(new ResU.AnimConstant()
                    {
                        AnimDataOffset = 8,
                        Value          = (float)ParamEntry.Colors[0].B / 255f,
                    });

                    //Alpha
                    matAnim.Constants.Add(new ResU.AnimConstant()
                    {
                        AnimDataOffset = 12,
                        Value          = (float)ParamEntry.Colors[0].A / 255f,
                    });
                }

                var RedCurve   = GenerateCurve(0, clr0, ParamEntry);
                var GreenCurve = GenerateCurve(4, clr0, ParamEntry);
                var BlueCurve  = GenerateCurve(8, clr0, ParamEntry);
                var AlphaCurve = GenerateCurve(12, clr0, ParamEntry);

                if (RedCurve != null)
                {
                    matAnim.Curves.Add(RedCurve);
                }
                if (GreenCurve != null)
                {
                    matAnim.Curves.Add(GreenCurve);
                }
                if (BlueCurve != null)
                {
                    matAnim.Curves.Add(BlueCurve);
                }
                if (AlphaCurve != null)
                {
                    matAnim.Curves.Add(AlphaCurve);
                }

                matAnim.ParamAnimInfos.Add(new ResU.ParamAnimInfo()
                {
                    Name            = entry.Name,
                    BeginCurve      = matAnim.Curves.Count > 0 ? curveIndex : ushort.MaxValue,
                    FloatCurveCount = (ushort)matAnim.Curves.Count,
                    SubBindIndex    = ushort.MaxValue,
                    ConstantCount   = (ushort)matAnim.Constants.Count,
                    BeginConstant   = matAnim.Constants.Count > 0 ? constantIndex : ushort.MaxValue,
                });

                constantIndex += (ushort)matAnim.Constants.Count;
                curveIndex    += (ushort)matAnim.Curves.Count;
            }

            return(matAnim);
        }