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); }
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); }