Example #1
0
        internal void PreSave()
        {
            Version = SaveVersion();
            bool calculateBakeSizes = true;

            if (MatVisibilityAnims == null)
            {
                MatVisibilityAnims = new ResDict <MaterialAnim>();
            }

            for (int i = 0; i < Models.Count; i++)
            {
                for (int s = 0; s < Models[i].Shapes.Count; s++)
                {
                    Models[i].Shapes[s].VertexBuffer = Models[i].VertexBuffers[Models[i].Shapes[s].VertexBufferIndex];

                    //Link texture sections for wii u texture refs
                    if (Textures != null)
                    {
                        foreach (var texRef in Models[i].Materials[Models[i].Shapes[s].MaterialIndex].TextureRefs)
                        {
                            if (Textures.ContainsKey(texRef.Name))
                            {
                                texRef.Texture = Textures[texRef.Name];
                            }
                        }
                    }
                }
            }

            for (int i = 0; i < SkeletalAnims.Count; i++)
            {
                int curveIndex = 0;
                if (calculateBakeSizes)
                {
                    SkeletalAnims[i].BakedSize = 0;
                }
                for (int s = 0; s < SkeletalAnims[i].BoneAnims.Count; s++)
                {
                    SkeletalAnims[i].BoneAnims[s].BeginCurve = curveIndex;
                    curveIndex += SkeletalAnims[i].BoneAnims[s].Curves.Count;

                    if (calculateBakeSizes)
                    {
                        foreach (var curve in SkeletalAnims[i].BoneAnims[s].Curves)
                        {
                            SkeletalAnims[i].BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            // Update ShapeAnim instances.
            foreach (ShapeAnim anim in ShapeAnims.Values)
            {
                int curveIndex = 0;
                int infoIndex  = 0;
                if (calculateBakeSizes)
                {
                    anim.BakedSize = 0;
                }
                foreach (VertexShapeAnim subAnim in anim.VertexShapeAnims)
                {
                    subAnim.BeginCurve        = curveIndex;
                    subAnim.BeginKeyShapeAnim = infoIndex;
                    curveIndex += subAnim.Curves.Count;
                    infoIndex  += subAnim.KeyShapeAnimInfos.Count;

                    if (calculateBakeSizes)
                    {
                        foreach (var curve in subAnim.Curves)
                        {
                            anim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            foreach (var anim in TexPatternAnims.Values)
            {
                anim.signature = IsPlatformSwitch ? "FMAA" : "FTXP";
                int curveIndex = 0;
                int infoIndex  = 0;
                if (calculateBakeSizes)
                {
                    anim.BakedSize = 0;
                }
                foreach (var subAnim in anim.MaterialAnimDataList)
                {
                    if (subAnim.Curves.Count > 0)
                    {
                        subAnim.TexturePatternCurveIndex = curveIndex;
                    }
                    subAnim.InfoIndex = infoIndex;
                    curveIndex       += subAnim.Curves.Count;
                    infoIndex        += subAnim.PatternAnimInfos.Count;

                    if (calculateBakeSizes)
                    {
                        foreach (var curve in subAnim.Curves)
                        {
                            anim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            foreach (var anim in TexSrtAnims.Values)
            {
                anim.signature = IsPlatformSwitch ? "FMAA" : "FSHU";
                int curveIndex = 0;
                int infoIndex  = 0;
                if (calculateBakeSizes)
                {
                    anim.BakedSize = 0;
                }
                foreach (var subAnim in anim.MaterialAnimDataList)
                {
                    if (subAnim.Curves.Count > 0)
                    {
                        subAnim.TexturePatternCurveIndex = curveIndex;
                    }
                    subAnim.InfoIndex = infoIndex;
                    curveIndex       += subAnim.Curves.Count;
                    infoIndex        += subAnim.PatternAnimInfos.Count;

                    if (calculateBakeSizes)
                    {
                        foreach (var curve in subAnim.Curves)
                        {
                            anim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            foreach (var anim in ColorAnims.Values)
            {
                anim.signature = IsPlatformSwitch ? "FMAA" : "FSHU";
                int curveIndex = 0;
                int infoIndex  = 0;
                if (calculateBakeSizes)
                {
                    anim.BakedSize = 0;
                }
                foreach (var subAnim in anim.MaterialAnimDataList)
                {
                    if (subAnim.Curves.Count > 0)
                    {
                        subAnim.TexturePatternCurveIndex = curveIndex;
                    }
                    subAnim.InfoIndex = infoIndex;
                    curveIndex       += subAnim.Curves.Count;
                    infoIndex        += subAnim.PatternAnimInfos.Count;

                    if (calculateBakeSizes)
                    {
                        foreach (var curve in subAnim.Curves)
                        {
                            anim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            foreach (var anim in ShaderParamAnims.Values)
            {
                anim.signature = IsPlatformSwitch ? "FMAA" : "FSHU";
                int curveIndex = 0;
                int infoIndex  = 0;
                if (calculateBakeSizes)
                {
                    anim.BakedSize = 0;
                }
                foreach (var subAnim in anim.MaterialAnimDataList)
                {
                    if (subAnim.Curves.Count > 0)
                    {
                        subAnim.ShaderParamCurveIndex = curveIndex;
                    }
                    subAnim.InfoIndex = infoIndex;
                    curveIndex       += subAnim.Curves.Count;
                    infoIndex        += subAnim.ParamAnimInfos.Count;

                    if (calculateBakeSizes)
                    {
                        foreach (var curve in subAnim.Curves)
                        {
                            anim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            foreach (var anim in MatVisibilityAnims.Values)
            {
                int curveIndex = 0;
                int infoIndex  = 0;
                if (calculateBakeSizes)
                {
                    anim.BakedSize = 0;
                }
                foreach (var subAnim in anim.MaterialAnimDataList)
                {
                    if (subAnim.Curves.Count > 0)
                    {
                        subAnim.VisalCurveIndex = curveIndex;
                    }
                    curveIndex += subAnim.Curves.Count;

                    if (calculateBakeSizes)
                    {
                        foreach (var curve in subAnim.Curves)
                        {
                            anim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            foreach (var anim in SceneAnims.Values)
            {
                foreach (var camAnim in anim.CameraAnims.Values)
                {
                    if (calculateBakeSizes)
                    {
                        foreach (var curve in camAnim.Curves)
                        {
                            camAnim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                        }
                    }
                }
            }

            foreach (var anim in BoneVisibilityAnims.Values)
            {
                anim.BakedSize = 0;
                foreach (var curve in anim.Curves)
                {
                    anim.BakedSize += curve.CalculateBakeSize(IsPlatformSwitch);
                }
            }

            if (IsPlatformSwitch)
            {
                MaterialAnims.Clear();
                foreach (var anim in ShaderParamAnims.Values)
                {
                    MaterialAnims.Add(anim.Name, anim);
                }

                foreach (var anim in TexSrtAnims.Values)
                {
                    MaterialAnims.Add(anim.Name, anim);
                }

                foreach (var anim in ColorAnims.Values)
                {
                    MaterialAnims.Add(anim.Name, anim);
                }

                foreach (var anim in TexPatternAnims.Values)
                {
                    MaterialAnims.Add(anim.Name, anim);
                }

                foreach (var anim in MatVisibilityAnims.Values)
                {
                    MaterialAnims.Add(anim.Name, anim);
                }

                for (int i = 0; i < MaterialAnims.Count; i++)
                {
                    MaterialAnims[i].signature = "FMAA";
                }
            }

            //Custom external file loading
            foreach (var file in ExternalFiles)
            {
                if (file.Value.LoadedFileData is Brtcamera)
                {
                    var cam = file.Value.LoadedFileData as Brtcamera;
                    cam.IsBigEndian = !IsPlatformSwitch;
                    var mem = new MemoryStream();
                    cam.Save(mem);
                    file.Value.Data = mem.ToArray();
                }
            }
        }