public static SceneAnim FromJson(string json)
        {
            SceneAnim anim = new SceneAnim();

            FromJson(anim, json);
            return(anim);
        }
Example #2
0
        private void LoadAnim(SceneAnim scn)
        {
            Text = scn.Name;

            SceneAnim = scn;

            foreach (var cameraAnim in scn.CameraAnims)
            {
                BfresCameraAnim anim = new BfresCameraAnim();
                anim.LoadAnim(cameraAnim);
                Nodes.Add(anim);
            }
            foreach (var lightAnim in scn.LightAnims)
            {
                BfresLightAnim anim = new BfresLightAnim();
                anim.LoadAnim(lightAnim);
                Nodes.Add(anim);
            }
            foreach (var fogAnim in scn.FogAnims)
            {
                BfresFogAnim anim = new BfresFogAnim();
                anim.LoadAnim(fogAnim);
                Nodes.Add(anim);
            }
        }
Example #3
0
        public static void Write(ResFileSwitchSaver saver, SceneAnim sceneAnim)
        {
            if (saver.ResFile.VersionMajor2 == 9)
            {
                saver.Write(sceneAnim.Flags);
            }
            else
            {
                saver.SaveHeaderBlock();
            }

            saver.SaveString(sceneAnim.Name);
            saver.SaveString(sceneAnim.Path);
            sceneAnim.PosCameraAnimArrayOffset = saver.SaveOffset();
            sceneAnim.PosCameraAnimDictOffset  = saver.SaveOffset();
            sceneAnim.PosLightAnimArrayOffset  = saver.SaveOffset();
            sceneAnim.PosLightAnimDictOffset   = saver.SaveOffset();
            sceneAnim.PosFogAnimArrayOffset    = saver.SaveOffset();
            sceneAnim.PosFogAnimDictOffset     = saver.SaveOffset();
            sceneAnim.PosUserDataOffset        = saver.SaveOffset();
            sceneAnim.PosUserDataDictOffset    = saver.SaveOffset();
            saver.Write((ushort)sceneAnim.UserData.Count);
            saver.Write((ushort)sceneAnim.CameraAnims.Count);
            saver.Write((ushort)sceneAnim.LightAnims.Count);
            saver.Write((ushort)sceneAnim.FogAnims.Count);
        }
Example #4
0
        public static string ToJson(string Name, SceneAnim sceneAnim)
        {
            var config = new AnimConfig();

            config.ToYaml(sceneAnim);
            return(JsonConvert.SerializeObject(config, Formatting.Indented));
        }
Example #5
0
            public void ToYaml(SceneAnim sceneAnim)
            {
                Name = sceneAnim.Name;
                Path = sceneAnim.Path;

                foreach (var cameraAnim in sceneAnim.CameraAnims)
                {
                    CameraAnimations.Add(new CameraAnimConfig(cameraAnim));
                }
            }
Example #6
0
        public override void Replace(string FileName)
        {
            string ext = Utils.GetExtension(FileName);

            if (ext == ".bfscn")
            {
                Replace(FileName, GetResFile(), GetResFileU());
            }
            else if (ext == ".yaml")
            {
                SceneAnim = YamlFscn.FromYaml(FileName);
            }
            else if (ext == ".json")
            {
                SceneAnim = YamlFscn.FromJson(FileName);
            }
        }
Example #7
0
        public static string ToYaml(string Name, SceneAnim sceneAnim)
        {
            var serializerSettings = new SerializerSettings()
            {
                //  EmitTags = false
            };

            serializerSettings.DefaultStyle          = YamlStyle.Any;
            serializerSettings.ComparerForKeySorting = null;
            serializerSettings.RegisterTagMapping("AnimConfig", typeof(AnimConfig));

            var config = new AnimConfig();

            config.ToYaml(sceneAnim);

            var    serializer = new Serializer(serializerSettings);
            string yaml       = serializer.Serialize(config, typeof(AnimConfig));

            return(yaml);
        }
Example #8
0
        internal static void Read(ResFileSwitchLoader loader, SceneAnim sceneAnim)
        {
            if (loader.ResFile.VersionMajor2 == 9)
            {
                sceneAnim.Flags = loader.ReadUInt32();
            }
            else
            {
                loader.LoadHeaderBlock();
            }

            sceneAnim.Name        = loader.LoadString();
            sceneAnim.Path        = loader.LoadString();
            sceneAnim.CameraAnims = loader.LoadDictValues <CameraAnim>();
            sceneAnim.LightAnims  = loader.LoadDictValues <LightAnim>();
            sceneAnim.FogAnims    = loader.LoadDictValues <FogAnim>();
            sceneAnim.UserData    = loader.LoadDictValues <UserData>();
            ushort numUserData   = loader.ReadUInt16();
            ushort numCameraAnim = loader.ReadUInt16();
            ushort numLightAnim  = loader.ReadUInt16();
            ushort numFogAnim    = loader.ReadUInt16();
        }
Example #9
0
 public FSCN(SceneAnim scn)
 {
     Initialize(); LoadAnim(scn);
 }
        public static void FromJson(SceneAnim anim, string json)
        {
            JsonConvert.DefaultSettings = () =>
            {
                var settings = new JsonSerializerSettings();
                return(settings);
            };

            var animJson = JsonConvert.DeserializeObject <SceneAnimStuct>(json);

            anim.Name        = animJson.Name;
            anim.CameraAnims = new ResDict <CameraAnim>();
            anim.LightAnims  = new ResDict <LightAnim>();
            anim.FogAnims    = new ResDict <FogAnim>();
            anim.UserData    = UserDataConvert.Convert(animJson.UserData);

            foreach (var camAnimJson in animJson.CameraAnims)
            {
                CameraAnim camAnim = new CameraAnim();
                camAnim.Flags = 0;

                anim.CameraAnims.Add(camAnimJson.Name, camAnim);

                if (camAnimJson.Loop)
                {
                    camAnim.Flags |= CameraAnimFlags.Looping;
                }
                if (camAnimJson.Baked)
                {
                    camAnim.Flags |= CameraAnimFlags.BakedCurve;
                }
                if (camAnimJson.Perspective)
                {
                    camAnim.Flags |= CameraAnimFlags.Perspective;
                }
                if (camAnimJson.EulerRotation)
                {
                    camAnim.Flags |= CameraAnimFlags.EulerZXY;
                }

                camAnim.Name       = camAnimJson.Name;
                camAnim.FrameCount = camAnimJson.FrameCount;
                camAnim.BaseData   = camAnimJson.BaseData;
                foreach (var curveJson in camAnimJson.Curves)
                {
                    var target = (CameraAnimDataOffset)Enum.Parse(typeof(CameraAnimDataOffset), curveJson.Target);

                    var curve = CurveAnimHelper.GenerateCurve(curveJson, (uint)target, false);
                    camAnim.Curves.Add(curve);
                }
            }
            foreach (var lightAnimJson in animJson.LightAnims)
            {
                LightAnim lightAnim = new LightAnim();
                lightAnim.Flags = 0;

                anim.LightAnims.Add(lightAnimJson.Name, lightAnim);

                if (lightAnimJson.Loop)
                {
                    lightAnim.Flags |= LightAnimFlags.Looping;
                }
                if (lightAnimJson.Baked)
                {
                    lightAnim.Flags |= LightAnimFlags.BakedCurve;
                }
                if (lightAnimJson.BaseAngleAttn)
                {
                    lightAnim.Flags |= LightAnimFlags.BaseAngleAttn;
                }
                if (lightAnimJson.BaseColor0)
                {
                    lightAnim.Flags |= LightAnimFlags.BaseColor0;
                }
                if (lightAnimJson.BaseColor1)
                {
                    lightAnim.Flags |= LightAnimFlags.BaseColor1;
                }
                if (lightAnimJson.BaseDir)
                {
                    lightAnim.Flags |= LightAnimFlags.BaseDir;
                }
                if (lightAnimJson.BaseDistAttn)
                {
                    lightAnim.Flags |= LightAnimFlags.BaseDistAttn;
                }
                if (lightAnimJson.BasePos)
                {
                    lightAnim.Flags |= LightAnimFlags.BasePos;
                }

                lightAnim.Name       = lightAnimJson.Name;
                lightAnim.FrameCount = lightAnimJson.FrameCount;
                lightAnim.BaseData   = lightAnimJson.BaseData;

                if (lightAnim.BaseData.Enable == 1)
                {
                    lightAnim.Flags |= LightAnimFlags.BaseEnable;
                }

                foreach (var curveJson in lightAnimJson.Curves)
                {
                    var target = (CameraAnimDataOffset)Enum.Parse(typeof(CameraAnimDataOffset), curveJson.Target);

                    var curve = CurveAnimHelper.GenerateCurve(curveJson, (uint)target, false);
                    lightAnim.Curves.Add(curve);
                }
            }
            foreach (var fogAnimJson in animJson.FogAnims)
            {
                FogAnim fogAnim = new FogAnim();
                fogAnim.Flags = 0;

                anim.CameraAnims.Add(fogAnimJson.Name, fogAnim);

                if (fogAnimJson.Loop)
                {
                    fogAnim.Flags |= FogAnimFlags.Looping;
                }
                if (fogAnimJson.Baked)
                {
                    fogAnim.Flags |= FogAnimFlags.BakedCurve;
                }

                fogAnim.Name                  = fogAnimJson.Name;
                fogAnim.FrameCount            = fogAnimJson.FrameCount;
                fogAnim.DistanceAttnFuncIndex = fogAnimJson.DistanceAttnFuncIndex;
                fogAnim.DistanceAttnFuncName  = fogAnimJson.DistanceAttnFuncName;
                fogAnim.BaseData              = fogAnimJson.BaseData;

                foreach (var curveJson in fogAnimJson.Curves)
                {
                    var target = (CameraAnimDataOffset)Enum.Parse(typeof(CameraAnimDataOffset), curveJson.Target);

                    var curve = CurveAnimHelper.GenerateCurve(curveJson, (uint)target, false);
                    fogAnim.Curves.Add(curve);
                }
            }
        }
        public static string ToJson(SceneAnim anim)
        {
            SceneAnimStuct animConv = new SceneAnimStuct();

            animConv.Name        = anim.Name;
            animConv.Path        = anim.Path;
            animConv.CameraAnims = new List <CameraAnimStruct>();
            animConv.LightAnims  = new List <LightAnimStruct>();
            animConv.FogAnims    = new List <FogAnimStruct>();

            foreach (var camAnim in anim.CameraAnims.Values)
            {
                CameraAnimStruct camAnimConv = new CameraAnimStruct();
                camAnimConv.Curves        = new List <CurveAnimHelper>();
                camAnimConv.Name          = camAnim.Name;
                camAnimConv.FrameCount    = camAnim.FrameCount;
                camAnimConv.Loop          = camAnim.Flags.HasFlag(CameraAnimFlags.Looping);
                camAnimConv.Baked         = camAnim.Flags.HasFlag(CameraAnimFlags.BakedCurve);
                camAnimConv.BaseData      = camAnim.BaseData;
                camAnimConv.EulerRotation = camAnim.Flags.HasFlag(CameraAnimFlags.EulerZXY);
                camAnimConv.Perspective   = camAnim.Flags.HasFlag(CameraAnimFlags.Perspective);

                animConv.CameraAnims.Add(camAnimConv);
                foreach (var curve in camAnim.Curves)
                {
                    string target = ((CameraAnimDataOffset)curve.AnimDataOffset).ToString();

                    bool isDegrees = target.Contains("Rotation") && animConv.UseDegrees && camAnimConv.EulerRotation;
                    var  convCurve = CurveAnimHelper.FromCurve(curve, target, isDegrees);
                    camAnimConv.Curves.Add(convCurve);
                }
            }
            foreach (var lightAnim in anim.LightAnims.Values)
            {
                LightAnimStruct lightAnimConv = new LightAnimStruct();
                lightAnimConv.Curves        = new List <CurveAnimHelper>();
                lightAnimConv.Name          = lightAnim.Name;
                lightAnimConv.FrameCount    = lightAnim.FrameCount;
                lightAnimConv.Loop          = lightAnim.Flags.HasFlag(LightAnimFlags.Looping);
                lightAnimConv.Baked         = lightAnim.Flags.HasFlag(LightAnimFlags.BakedCurve);
                lightAnimConv.BaseAngleAttn = lightAnim.Flags.HasFlag(LightAnimFlags.BaseAngleAttn);
                lightAnimConv.BaseColor0    = lightAnim.Flags.HasFlag(LightAnimFlags.BaseColor0);
                lightAnimConv.BaseColor1    = lightAnim.Flags.HasFlag(LightAnimFlags.BaseColor1);
                lightAnimConv.BaseDir       = lightAnim.Flags.HasFlag(LightAnimFlags.BaseDir);
                lightAnimConv.BaseDistAttn  = lightAnim.Flags.HasFlag(LightAnimFlags.BaseDistAttn);
                lightAnimConv.BasePos       = lightAnim.Flags.HasFlag(LightAnimFlags.BasePos);
                if (lightAnim.Flags.HasFlag(LightAnimFlags.BaseEnable))
                {
                    lightAnimConv.BaseData = lightAnim.BaseData;
                }

                animConv.LightAnims.Add(lightAnimConv);
                foreach (var curve in lightAnim.Curves)
                {
                    string target    = ((LightAnimDataOffset)curve.AnimDataOffset).ToString();
                    var    convCurve = CurveAnimHelper.FromCurve(curve, target, false);
                    lightAnimConv.Curves.Add(convCurve);
                }
            }
            foreach (var fogAnim in anim.FogAnims.Values)
            {
                FogAnimStruct fogAnimConv = new FogAnimStruct();
                fogAnimConv.Curves                = new List <CurveAnimHelper>();
                fogAnimConv.Name                  = fogAnim.Name;
                fogAnimConv.FrameCount            = fogAnim.FrameCount;
                fogAnimConv.Loop                  = fogAnim.Flags.HasFlag(FogAnimFlags.Looping);
                fogAnimConv.Baked                 = fogAnim.Flags.HasFlag(FogAnimFlags.BakedCurve);
                fogAnimConv.BaseData              = fogAnim.BaseData;
                fogAnimConv.DistanceAttnFuncIndex = fogAnim.DistanceAttnFuncIndex;
                fogAnimConv.DistanceAttnFuncName  = fogAnim.DistanceAttnFuncName;

                animConv.FogAnims.Add(fogAnimConv);
                foreach (var curve in fogAnim.Curves)
                {
                    string target    = ((FogAnimDataOffset)curve.AnimDataOffset).ToString();
                    var    convCurve = CurveAnimHelper.FromCurve(curve, target, false);
                    fogAnimConv.Curves.Add(convCurve);
                }
            }

            foreach (var param in anim.UserData.Values)
            {
                animConv.UserData.Add($"{param.Type}|{param.Name}", param.GetData());
            }

            JsonConvert.DefaultSettings = () =>
            {
                var settings = new JsonSerializerSettings();
                return(settings);
            };

            return(JsonConvert.SerializeObject(animConv, Formatting.Indented));
        }
Example #12
0
 public void Read(SceneAnim scn)
 {
     SceneAnim = scn;
 }
Example #13
0
            public SceneAnim FromYaml()
            {
                SceneAnim anim = new SceneAnim();

                anim.Name = Name;
                anim.Path = Path;
                foreach (var camera in CameraAnimations)
                {
                    CameraAnim camAnim = new CameraAnim();
                    camAnim.Name       = camera.Name;
                    camAnim.FrameCount = camera.FrameCount;
                    camAnim.BakedSize  = camera.BakedSize;
                    camAnim.BaseData   = camera.BaseData;
                    if (camera.EulerZXY)
                    {
                        camAnim.Flags |= CameraAnimFlags.EulerZXY;
                    }
                    if (camera.Loop)
                    {
                        camAnim.Flags |= CameraAnimFlags.Looping;
                    }
                    if (camera.Perspective)
                    {
                        camAnim.Flags |= CameraAnimFlags.Perspective;
                    }

                    foreach (var curve in camera.Curves)
                    {
                        AnimCurve animCurve = new AnimCurve();
                        animCurve.AnimDataOffset = ConvertOffset(curve.Type);
                        animCurve.Scale          = 1;
                        animCurve.CurveType      = AnimCurveType.Linear;

                        int FrameCount = curve.KeyFrames.Count;
                        animCurve.Frames = new float[FrameCount];
                        animCurve.Keys   = new float[FrameCount, 2];

                        var values = curve.KeyFrames.Values.ToList();
                        for (int i = 0; i < curve.KeyFrames.Count; i++)
                        {
                            var KeyFrame = curve.KeyFrames.ElementAt(i);
                            animCurve.Frames[i]  = KeyFrame.Key;
                            animCurve.Keys[i, 0] = KeyFrame.Value;

                            //Calculate delta
                            float Delta = 0;
                            if (i < values.Count - 1)
                            {
                                Delta = values[i + 1] - values[i];
                            }

                            animCurve.Keys[i, 1] = Delta;
                        }

                        animCurve.StartFrame = animCurve.Frames.Max();
                        animCurve.EndFrame   = animCurve.Frames.Max();
                        if (animCurve.Keys.Length > 1)
                        {
                            animCurve.Delta = values[values.Count - 1] - values[0];
                        }

                        animCurve.KeyType   = AnimCurveKeyType.Single;
                        animCurve.FrameType = AnimCurveFrameType.Single;


                        camAnim.Curves.Add(animCurve);
                    }

                    anim.CameraAnims.Add(camAnim);
                    anim.CameraAnimDict.Add(camAnim.Name);
                }

                return(anim);
            }