コード例 #1
0
 public virtual void Unserialize(UndertaleReader reader)
 {
     if (reader.ReadBoolean())
     {
         // The curve data is embedded in this sequence, right here
         IsCurveEmbedded = true;
         if (reader.ReadInt32() != -1)
         {
             throw new IOException("Expected -1");
         }
         EmbeddedAnimCurve = new UndertaleAnimationCurve();
         EmbeddedAnimCurve.Unserialize(reader, false);
     }
     else
     {
         // The curve data is an asset in the project
         IsCurveEmbedded = false;
         AssetAnimCurve  = new UndertaleResourceById <UndertaleAnimationCurve, UndertaleChunkACRV>();
         AssetAnimCurve.Unserialize(reader);
     }
 }
コード例 #2
0
 public int GetAssetTagID(UndertaleData data, UndertaleAnimationCurve res)
 {
     return(((int)ResourceType.AnimCurve << 24) | (data.AnimationCurves.IndexOf(res) & 0xFFFFFF));
 }
コード例 #3
0
            public void Unserialize(UndertaleReader reader)
            {
                // This reads the string content immediately, if necessary (which it should be)
                UndertaleString ForceReadString()
                {
                    UndertaleString res      = reader.ReadUndertaleString();
                    uint            returnTo = reader.Position;

                    reader.Position = reader.GetOffsetMapRev()[res];
                    reader.ReadUndertaleObject <UndertaleString>();
                    reader.Position = returnTo;
                    return(res);
                }

                ModelName       = ForceReadString();
                Name            = reader.ReadUndertaleString();
                BuiltinName     = reader.ReadInt32();
                Traits          = reader.ReadInt32();
                IsCreationTrack = reader.ReadBoolean();

                int tagCount      = reader.ReadInt32();
                int ownedResCount = reader.ReadInt32();
                int trackCount    = reader.ReadInt32();

                Tags = new List <int>();
                for (int i = 0; i < tagCount; i++)
                {
                    Tags.Add(reader.ReadInt32());
                }

                OwnedResources = new List <UndertaleResource>();
                for (int i = 0; i < ownedResCount; i++)
                {
                    GMAnimCurveString = ForceReadString();
                    if (GMAnimCurveString.Content != "GMAnimCurve")
                    {
                        throw new IOException("Expected GMAnimCurve");
                    }
                    UndertaleAnimationCurve res = new UndertaleAnimationCurve();
                    res.Unserialize(reader);
                    OwnedResources.Add(res);
                }

                Tracks = new List <Track>();
                for (int i = 0; i < trackCount; i++)
                {
                    Tracks.Add(reader.ReadUndertaleObject <Track>());
                }

                // Now, handle specific keyframe/etc. data
                switch (ModelName.Content)
                {
                case "GMAudioTrack":
                    Keyframes = reader.ReadUndertaleObject <AudioKeyframes>();
                    break;

                case "GMInstanceTrack":
                    Keyframes = reader.ReadUndertaleObject <InstanceKeyframes>();
                    break;

                case "GMGraphicTrack":
                    Keyframes = reader.ReadUndertaleObject <GraphicKeyframes>();
                    break;

                case "GMSequenceTrack":
                    Keyframes = reader.ReadUndertaleObject <SequenceKeyframes>();
                    break;

                case "GMSpriteFramesTrack":
                    Keyframes = reader.ReadUndertaleObject <SpriteFramesKeyframes>();
                    break;

                case "GMAssetTrack":     // TODO?
                    throw new NotImplementedException("GMAssetTrack not implemented, report this");

                case "GMBoolTrack":
                    Keyframes = reader.ReadUndertaleObject <BoolKeyframes>();
                    break;

                case "GMStringTrack":
                    Keyframes = reader.ReadUndertaleObject <StringKeyframes>();
                    break;

                // TODO?
                //case "GMIntTrack":
                //  Keyframes = reader.ReadUndertaleObject<IntKeyframes>();
                //  break;
                case "GMRealTrack":
                    Keyframes = reader.ReadUndertaleObject <RealKeyframes>();
                    break;
                }
            }