public void Test_OnAnimate_Event_2()
        {
            var clip = new AnimationClip (100, "TestClip");
            clip.WrapMode = WrapMode.Once;
            clip.Play ();

            var args1 = new MyEventArgs (1);
            var args2 = new MyEventArgs (2);
            var args3 = new MyEventArgs (3);

            var count = 0;
            clip.AddEvent (0, (sender, args) => count = 1, null);
            clip.AddEvent (50, (sender, args) => count = 2, null);
            clip.AddEvent (100, (sender, args) => count += 1, null);
            clip.AddEvent (100, (sender, args) => count += 1, null);

            var anim = new AnimationController ();
            anim.AddClip (clip);

            // 停止中のクリップはイベントを発火しない
            clip.Stop ();
            anim.OnAnimate (0, 0);
            Assert.AreEqual (0, count);

            clip.Play ();

            // 逆再生中の dtime は逆方向
            // clip.SetSpeed (-1, 50);
            // anim.OnAnimate (40, 10);
            // Assert.AreEqual (2, count);

            count = 0;
            clip.Speed = 1;

            // 同じポジションで重複したイベントは両方発火
            anim.OnAnimate (100, 0);
            Assert.AreEqual (2, count);
        }
Beispiel #2
0
        public void Test_Stop()
        {
            var clip = new AnimationClip (100, "ClipName");
            Assert.AreEqual (false, clip.IsPlaying);

            clip.Play ();
            clip.Stop ();

            Assert.AreEqual (false, clip.IsPlaying);
        }
Beispiel #3
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;
        }