public void Test_AddTrack() { var clip = new AnimationClip (100, "ClipName"); var track1 = new AnimationTrack ("PropName", InterpolationType.Linear); var track2 = new AnimationTrack ("PropName", InterpolationType.Linear); var dummy = new Node (); clip.AddTrack (dummy, track1); clip.AddTrack (dummy, track2); Assert.AreEqual (2, clip.TrackCount); Assert.AreEqual (2, clip.Tracks.Count ()); Assert.AreEqual (track1, clip.GetTrack (0).Item2); Assert.AreEqual (track2, clip.GetTrack (1).Item2); }
public static Node Create(Vector3 pos) { var cmp = new MyFireExplosion (); var spr = new Sprite (100, 100); spr.AddTexture (new Texture ("media/FireExplosion.png")); var track = new AnimationTrack ("TextureOffset", InterpolationType.Step); track.AddKeyframe (0, new Vector2 (0, 0)); track.AddKeyframe (100, new Vector2 (100, 0)); track.AddKeyframe (200, new Vector2 (200, 0)); track.AddKeyframe (300, new Vector2 (300, 0)); track.AddKeyframe (400, new Vector2 (400, 0)); track.AddKeyframe (500, new Vector2 (500, 0)); track.AddKeyframe (600, new Vector2 (600, 0)); track.AddKeyframe (700, new Vector2 (700, 0)); track.AddKeyframe (800, new Vector2 (800, 0)); track.AddKeyframe (900, new Vector2 (900, 0)); track.AddKeyframe (1000, new Vector2 (0, 100)); track.AddKeyframe (1100, new Vector2 (100, 100)); track.AddKeyframe (1200, new Vector2 (200, 100)); track.AddKeyframe (1300, new Vector2 (300, 100)); track.AddKeyframe (1400, new Vector2 (400, 100)); track.AddKeyframe (1500, new Vector2 (500, 100)); track.AddKeyframe (1600, new Vector2 (600, 100)); track.AddKeyframe (1700, new Vector2 (700, 100)); track.AddKeyframe (1800, new Vector2 (800, 100)); track.AddKeyframe (1900, new Vector2 (900, 100)); track.AddKeyframe (2000, new Vector2 (0, 200)); track.AddKeyframe (2100, new Vector2 (100, 200)); track.AddKeyframe (2200, new Vector2 (200, 200)); track.AddKeyframe (2300, new Vector2 (300, 200)); track.AddKeyframe (2400, new Vector2 (400, 200)); track.AddKeyframe (2500, new Vector2 (500, 200)); track.AddKeyframe (2600, new Vector2 (600, 200)); track.AddKeyframe (2700, new Vector2 (700, 200)); track.AddKeyframe (2800, new Vector2 (800, 200)); track.AddKeyframe (2900, new Vector2 (900, 200)); var clip = new AnimationClip (3000, "FireExplosion"); clip.AddTrack (spr, track); clip.WrapMode = WrapMode.Loop; var anim = new AnimationController (); anim.AddClip (clip); var node = new Node (); node.Attach (cmp); node.Attach (spr); node.Attach (anim); node.Translation = pos; return node; }
public static Node Create(Vector3 pos) { var cmp = new MyFireExplosion (); var spr = new Sprite (100, 100); spr.AddTexture(Resource.GetTexture ("media/FireExplosion.png")); var node = new Node ("FireExplosion"); node.Attach (spr); node.Attach (cmp); node.Translation = pos - new Vector3(34, 34, 0); // 爆発の中心を地球にあわせる var track = new AnimationTrack ("TextureOffset", InterpolationType.Step); track.AddKeyframe (0, new Vector2 (0, 0)); track.AddKeyframe (100, new Vector2 (100, 0)); track.AddKeyframe (200, new Vector2 (200, 0)); track.AddKeyframe (300, new Vector2 (300, 0)); track.AddKeyframe (400, new Vector2 (400, 0)); track.AddKeyframe (500, new Vector2 (500, 0)); track.AddKeyframe (600, new Vector2 (600, 0)); track.AddKeyframe (700, new Vector2 (700, 0)); track.AddKeyframe (800, new Vector2 (800, 0)); track.AddKeyframe (900, new Vector2 (900, 0)); track.AddKeyframe (1000, new Vector2 (0, 100)); track.AddKeyframe (1100, new Vector2 (100, 100)); track.AddKeyframe (1200, new Vector2 (200, 100)); track.AddKeyframe (1300, new Vector2 (300, 100)); track.AddKeyframe (1400, new Vector2 (400, 100)); track.AddKeyframe (1500, new Vector2 (500, 100)); track.AddKeyframe (1600, new Vector2 (600, 100)); track.AddKeyframe (1700, new Vector2 (700, 100)); track.AddKeyframe (1800, new Vector2 (800, 100)); track.AddKeyframe (1900, new Vector2 (900, 100)); track.AddKeyframe (2000, new Vector2 (0, 200)); track.AddKeyframe (2100, new Vector2 (100, 200)); track.AddKeyframe (2200, new Vector2 (200, 200)); track.AddKeyframe (2300, new Vector2 (300, 200)); track.AddKeyframe (2400, new Vector2 (400, 200)); track.AddKeyframe (2500, new Vector2 (500, 200)); track.AddKeyframe (2600, new Vector2 (600, 200)); track.AddKeyframe (2700, new Vector2 (700, 200)); track.AddKeyframe (2800, new Vector2 (800, 200)); track.AddKeyframe (2900, new Vector2 (900, 200)); var clip = new AnimationClip (3000, "Explosion"); clip.AddTrack (spr, track); clip.WrapMode = WrapMode.Once; node.UserData.Add (clip.Name, clip); return node; }
public void Test_WeakReferenceTrack() { var target = new MyTarget (); var track = new AnimationTrack ("Speed", InterpolationType.Linear); track.AddKeyframe (0, 100.0f); track.AddKeyframe (100, 100.0f); var clip = new AnimationClip (100, "Clip"); clip.AddTrack (target, track); var anim = new AnimationController (); anim.AddClip (clip); // ターゲットの解放 target = null; GC.Collect (); Assert.AreEqual (1, clip.TrackCount); Assert.AreEqual (false, clip.GetTrack (0).Item1.IsAlive); // 解放済みのターゲットを含むアニメーションの実行。 // エラーが起きてはならない anim.OnAnimate (0, 0); }
public void Test_OnAnimate_Point_Once() { var clip = new AnimationClip (3, "TestClip"); clip.WrapMode = WrapMode.Once; clip.Duration = 3; clip.Play (); var track = new AnimationTrack ("Point", InterpolationType.Step); track.AddKeyframe (1, new Vector3 (1, 2, 0)); track.AddKeyframe (2, new Vector3 (2, 3, 0)); var target = new MyTarget (); clip.AddTrack (target, track); var anim = new AnimationController (); anim.AddClip (clip); Assert.AreEqual (0f, target.Point.X, 0.0001f); Assert.AreEqual (0f, target.Point.Y, 0.0001f); anim.OnAnimate (1, 0); Assert.AreEqual (1.0f, target.Point.X, 0.0001f); Assert.AreEqual (2.0f, target.Point.Y, 0.0001f); anim.OnAnimate (2, 0); Assert.AreEqual (2.0f, target.Point.X, 0.0001f); Assert.AreEqual (3.0f, target.Point.Y, 0.0001f); anim.OnAnimate (3, 0); Assert.AreEqual (2.0f, target.Point.X, 0.0001f); Assert.AreEqual (3.0f, target.Point.Y, 0.0001f); }
public void Test_OnAnimate_Float_Once() { var track = new AnimationTrack ("Speed", InterpolationType.Step); track.AddKeyframe (1, 1.0f); track.AddKeyframe (2, 2.0f); var clip = new AnimationClip (3, "TestClip"); clip.WrapMode = WrapMode.Once; clip.Duration = 3; clip.Play (); var target = new MyTarget (); clip.AddTrack (target, track); var anim = new AnimationController (); anim.AddClip (clip); Assert.AreEqual (0.0f, target.Speed); anim.OnAnimate (1, 0); Assert.AreEqual (1.0f, target.Speed); anim.OnAnimate (2, 0); Assert.AreEqual (2.0f, target.Speed); anim.OnAnimate (3, 0); Assert.AreEqual (2.0f, target.Speed); }
public void Test_RemoveTrack() { var clip = new AnimationClip (100, "ClipName"); var track1 = new AnimationTrack ("PropName", InterpolationType.Linear); var track2 = new AnimationTrack ("PropName", InterpolationType.Linear); var target = new Node (); clip.AddTrack (target, track1); clip.AddTrack (target, track2); Assert.AreEqual (2, clip.TrackCount); Assert.AreEqual (2, clip.Tracks.Count()); clip.RemoveTrack (track1); clip.RemoveTrack (track2); Assert.AreEqual (0, clip.TrackCount); Assert.AreEqual (0, clip.Tracks.Count ()); }
public static Node Create(Vector3 pos) { var cmp = new MyCharacter (); // Body var spr1 = new Sprite (24, 32); spr1.AddTexture (new Texture ("media/Character-Gelato.png")); var col1 = new CollisionObject (); col1.Shape = new BoxShape (spr1.Width / 2, spr1.Height / 2, 1); col1.Offset = new Vector3 (spr1.Width / 2, spr1.Height / 2, 1); col1.IgnoreWith = (int)MyGroup.Character; // Foot var spr2 = new Sprite (24, 4); spr2.AddTexture (new Texture ("media/image128x128(Red).png")); var col2 = new CollisionObject (); col2.Shape = new BoxShape (2,2, 2); spr2.Offset = new Vector2 (0, spr1.Height + 2); col2.Offset = new Vector3 (spr1.Width / 2, spr1.Height + 2 + 4/2, 1); col2.IgnoreWith = (int)MyGroup.Character; var node = new Node ("MyCharacter"); node.Attach (cmp); node.Attach (spr1); node.Attach (col1); node.Attach (spr2); node.Attach (col2); node.Translation = pos; node.DrawPriority = -1; node.GroupID = (int)MyGroup.Character; // アニメーションの設定 var track1 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track1.AddKeyframe (0, new Vector2 (0, 64)); track1.AddKeyframe (300, new Vector2 (24, 64)); track1.AddKeyframe (600, new Vector2 (48, 64)); var clip1 = new AnimationClip (900, "MyCharacter.Down"); clip1.AddTrack (spr1, track1); var track2 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track2.AddKeyframe (0, new Vector2 (0, 0)); track2.AddKeyframe (300, new Vector2 (24, 0)); track2.AddKeyframe (600, new Vector2 (48, 0)); var clip2 = new AnimationClip (900, "MyCharacter.Up"); clip2.AddTrack (spr1, track2); var track3 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track3.AddKeyframe (0, new Vector2 (0, 32)); track3.AddKeyframe (300, new Vector2 (24, 32)); track3.AddKeyframe (600, new Vector2 (48, 32)); var clip3 = new AnimationClip (900, "MyCharacter.Right"); clip3.AddTrack (spr1, track3); var track4 = new AnimationTrack ("TextureOffset", InterpolationType.Step); track4.AddKeyframe (0, new Vector2 (0, 96)); track4.AddKeyframe (300, new Vector2 (24, 96)); track4.AddKeyframe (600, new Vector2 (48, 96)); var clip4 = new AnimationClip (900, "MyCharacter.Left"); clip4.AddTrack (spr1, track4); node.UserData.Add (clip1.Name, clip1); node.UserData.Add (clip2.Name, clip2); node.UserData.Add (clip3.Name, clip3); node.UserData.Add (clip4.Name, clip4); // ステート管理 cmp.sm.Configure (State.Down) .Ignore (Trigger.Down) .Permit (Trigger.Up, State.Up) .Permit (Trigger.Right, State.Right) .Permit (Trigger.Left, State.Left) .OnExit (x => clip1.Stop ()) .OnEntry (x => clip1.Play ()); cmp.sm.Configure (State.Up) .Permit (Trigger.Down, State.Down) .Ignore (Trigger.Up) .Permit (Trigger.Right, State.Right) .Permit (Trigger.Left, State.Left) .OnExit (x => clip2.Stop ()) .OnEntry (x => clip2.Play ()); cmp.sm.Configure (State.Right) .Permit (Trigger.Down, State.Down) .Permit (Trigger.Up, State.Up) .Ignore (Trigger.Right) .Permit (Trigger.Left, State.Left) .OnExit (x => clip3.Stop ()) .OnEntry (x => clip3.Play ()); cmp.sm.Configure (State.Left) .Permit (Trigger.Down, State.Down) .Permit (Trigger.Up, State.Up) .Permit (Trigger.Right, State.Right) .Ignore (Trigger.Left) .OnExit (x => clip4.Stop ()) .OnEntry (x => clip4.Play ()); return node; }