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