Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        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);
        }
Пример #5
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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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 ());
        }
Пример #8
0
        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;
        }