Ejemplo n.º 1
0
 public AnimationTestNode(State stateref, string name)
     : base(stateref, name)
 {
     Body          = new Body(this, "Body");
     Body.Position = new Vector2(100, 400);
     StandingAnim  = new SourceAnimation(this, "StandingAnim", EntityGame.Self.Content.Load <Texture2D>(@"SourceAnimationTest/scott"), new Vector2(36, 59), 8);
     StandingAnim.LinkDependency(SourceAnimation.DEPENDENCY_BODY, Body);
     StandingAnim.Scale = Vector2.One;
     StandingAnim.ReadXml(@"States\SourceRectangleTest\standing.xml");
     StandingAnim.Start();
     StandingAnim.Debug = true;
 }
Ejemplo n.º 2
0
        private static void LoadSourceAnimationData(BinaryReader br, ModelData modelData, int numAnim, int animIndex)
        {
            modelData.SourceAnimations = new List<SourceAnimation>();

            var restorePoint = br.BaseStream.Position;
            br.BaseStream.Position = animIndex;

            for (var i = 0; i < numAnim; i++)
            {
                var animStartPos = br.BaseStream.Position;

                var basePointer = br.ReadInt32();
                var szNameIndex = br.ReadInt32();

                var fps = br.ReadSingle();
                var animDescFlags = br.ReadInt32();

                var numframes = br.ReadInt32();

                var numMovements = br.ReadInt32();
                var movementIndex = br.ReadInt32();

                br.ReadCoordinateFArray(2); // bounding box; unused

                var ablock = br.ReadInt32();
                var aindex = br.ReadInt32();

                var numIkRules = br.ReadInt32();
                var ikRuleIndex = br.ReadInt32();

                var animBlockIkRuleIndex = br.ReadInt32();
                br.ReadIntArray(7); // Unused

                var animEndPos = br.BaseStream.Position;

                var sourceAnim = new SourceAnimation(i, numframes, fps, animDescFlags, numMovements, movementIndex,
                                                     ablock, aindex, numIkRules, ikRuleIndex, animBlockIkRuleIndex);

                var currentOffset = aindex;
                short nextOffset;
                do
                {
                    br.BaseStream.Position = animStartPos + currentOffset;
                    var animBone = br.ReadByte();
                    var animFlags = br.ReadByte();
                    nextOffset = br.ReadInt16();
                    currentOffset += nextOffset;

                    var aniBone = new SourceAnimationBone(animBone, animFlags, numframes);
                    aniBone.ReadData(br);
                    sourceAnim.AnimationBones.Add(aniBone);

                } while (nextOffset != 0);

                modelData.SourceAnimations.Add(sourceAnim);

                br.BaseStream.Position = animEndPos;
            }

            br.BaseStream.Position = restorePoint;
        }