geste_1.1.0_55da4926/tests/src/sprite_animation.adb

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
with GESTE;
with GESTE.Sprite.Animated; use GESTE.Sprite.Animated;
with GESTE.Tile_Bank;
with GESTE.Maths_Types; use GESTE.Maths_Types;
with Ada.Text_IO;
with Console_Char_Screen;

procedure Sprite_Animation is

   use type GESTE.Pix_Point;

   package Console_Screen is new Console_Char_Screen
     (Width       => 5,
      Height      => 5,
      Buffer_Size => 256,
      Init_Char   => ' ');

   Palette : aliased constant GESTE.Palette_Type :=
     ('#', '0', 'T', ' ');

   Background : Character := '_';

   Tiles : aliased constant GESTE.Tile_Array :=
     (1 => ((3, 3, 3, 3, 1),
            (3, 3, 3, 1, 3),
            (3, 3, 1, 3, 3),
            (3, 1, 3, 3, 3),
            (1, 3, 3, 3, 3)),
      2 => ((1, 3, 3, 3, 3),
            (3, 1, 3, 3, 3),
            (3, 3, 1, 3, 3),
            (3, 3, 3, 1, 3),
            (3, 3, 3, 3, 1))
     );

   Collisions : aliased constant GESTE.Tile_Collisions_Array :=
     (1 => ((False, False, False, False, True),
            (False, False, False, True, False),
            (False, False, True, False, False),
            (False, True, False, False, False),
            (True, False, False, False, False)),
      2 => ((True, False, False, False, False),
            (False, True, False, False, False),
            (False, False, True, False, False),
            (False, False, False, True, False),
            (False, False, False, False, True))
     );

   Anim : aliased constant Animation_Array :=
     ((1, 1),
      (2, 1),
      (1, 1));

   Bank : aliased GESTE.Tile_Bank.Instance (Tiles'Unrestricted_Access,
                                            Collisions'Unrestricted_Access,
                                            Palette'Unrestricted_Access);

   Sprite_A : aliased GESTE.Sprite.Animated.Instance
     (Bank       => Bank'Unrestricted_Access,
      Init_Frame => 1);

begin

   Sprite_A.Move ((0, 0));
   Sprite_A.Enable_Collisions;
   Sprite_A.Set_Animation (Anim'Unchecked_Access, Looping => False);
   GESTE.Add (Sprite_A'Unrestricted_Access, 0);

   GESTE.Render_Window
     (Window           => Console_Screen.Screen_Rect,
      Background       => Background,
      Buffer           => Console_Screen.Buffer,
      Push_Pixels      => Console_Screen.Push_Pixels'Unrestricted_Access,
      Set_Drawing_Area => Console_Screen.Set_Drawing_Area'Unrestricted_Access);

   Console_Screen.Print;
   Ada.Text_IO.New_Line;

   Sprite_A.Signal_Frame;

   GESTE.Render_Dirty
     (Screen_Rect      => Console_Screen.Screen_Rect,
      Background       => Background,
      Buffer           => Console_Screen.Buffer,
      Push_Pixels      => Console_Screen.Push_Pixels'Unrestricted_Access,
      Set_Drawing_Area => Console_Screen.Set_Drawing_Area'Unrestricted_Access);
   Console_Screen.Print;
   Ada.Text_IO.New_Line;

   Sprite_A.Signal_Frame;

   GESTE.Render_Dirty
     (Screen_Rect      => Console_Screen.Screen_Rect,
      Background       => Background,
      Buffer           => Console_Screen.Buffer,
      Push_Pixels      => Console_Screen.Push_Pixels'Unrestricted_Access,
      Set_Drawing_Area => Console_Screen.Set_Drawing_Area'Unrestricted_Access);
   Console_Screen.Print;
   Ada.Text_IO.New_Line;

   Sprite_A.Signal_Frame;

   if Sprite_A.Anim_Done then
      Ada.Text_IO.Put_Line ("Animation done");
   else
      Ada.Text_IO.Put_Line ("Animation not done");
   end if;
end Sprite_Animation;