1. private with Ada.Strings.Unbounded; 
  2.  
  3. package Tools.Enemy_Spawners is 
  4.  
  5.     type Enemy_Spawner is new Tool with private; 
  6.     type A_Enemy_Spawner is access all Enemy_Spawner'Class; 
  7.  
  8.     function Create_Enemy_Spawner( id : String ) return A_Tool; 
  9.     pragma Precondition( id'Length > 0 ); 
  10.     pragma Postcondition( Create_Enemy_Spawner'Result /= null ); 
  11.  
  12.     function Get_ID( this : not null access Enemy_Spawner'Class ) return String; 
  13.     pragma Postcondition( Get_ID'Result'Length > 0 ); 
  14.  
  15. private 
  16.  
  17.     use Ada.Strings.Unbounded; 
  18.  
  19.     type Enemy_Spawner is new Tool with 
  20.         record 
  21.             id : Unbounded_String; 
  22.         end record; 
  23.  
  24.     procedure Apply( this      : access Enemy_Spawner; 
  25.                      func      : Function_Type; 
  26.                      modifiers : Modifiers_Array; 
  27.                      first     : Boolean; 
  28.                      world     : not null A_World; 
  29.                      worldX, 
  30.                      worldY, 
  31.                      layer     : Integer ); 
  32.  
  33.     procedure Construct( this : access Enemy_Spawner; id : String ); 
  34.     pragma Precondition( id'Length > 0 ); 
  35.  
  36. end Tools.Enemy_Spawners;