1. with Events; 
  2.  
  3. pragma Elaborate_All( Events ); 
  4.  
  5. package Events.Keen is 
  6.  
  7.     type Give_Ammo_Event is new Event with private; 
  8.     type A_Give_Ammo_Event is access all Give_Ammo_Event'Class; 
  9.  
  10.     GIVE_AMMO_ID : constant Event_Id := To_Event_Id( "Give_Ammo" ); 
  11.  
  12.     function Get_Amount( this : not null access Give_Ammo_Event'Class ) return Integer; 
  13.  
  14.     ---------------------------------------------------------------------------- 
  15.  
  16.     type Give_Drops_Event is new Event with private; 
  17.     type A_Give_Drops_Event is access all Give_Drops_Event'Class; 
  18.  
  19.     GIVE_DROPS_ID : constant Event_Id := To_Event_Id( "Give_Drops" ); 
  20.  
  21.     function Get_Amount( this : not null access Give_Drops_Event'Class ) return Integer; 
  22.  
  23.     ---------------------------------------------------------------------------- 
  24.  
  25.     type Give_Points_Event is new Event with private; 
  26.     type A_Give_Points_Event is access all Give_Points_Event'Class; 
  27.  
  28.     GIVE_POINTS_ID : constant Event_Id := To_Event_Id( "Give_Points" ); 
  29.  
  30.     function Get_Amount( this : not null access Give_Points_Event'Class ) return Integer; 
  31.  
  32.     ---------------------------------------------------------------------------- 
  33.  
  34.     procedure Queue_Give_Ammo( amount : Integer ); 
  35.  
  36.     procedure Queue_Give_Drops( amount : Integer ); 
  37.  
  38.     procedure Queue_Give_Points( amount : Integer ); 
  39.  
  40. private 
  41.  
  42.     type Give_Ammo_Event is new Event with 
  43.         record 
  44.             amount : Integer := 0; 
  45.         end record; 
  46.  
  47.     procedure Construct( this : access Give_Ammo_Event; amount : Integer ); 
  48.  
  49.     ---------------------------------------------------------------------------- 
  50.  
  51.     type Give_Drops_Event is new Event with 
  52.         record 
  53.             amount : Integer := 0; 
  54.         end record; 
  55.  
  56.     procedure Construct( this : access Give_Drops_Event; amount : Integer ); 
  57.  
  58.     ---------------------------------------------------------------------------- 
  59.  
  60.     type Give_Points_Event is new Event with 
  61.         record 
  62.             amount : Integer := 0; 
  63.         end record; 
  64.  
  65.     procedure Construct( this : access Give_Points_Event; amount : Integer ); 
  66.  
  67. end Events.Keen;