with Keyboard; use Keyboard;
with Objects; use Objects;
with Worlds; use Worlds;
package Tools is
type Function_Type is ( Primary, Secondary, Tertiary );
type Tool is abstract new Object with private;
type A_Tool is access all Tool'Class;
procedure Apply( this : access Tool;
func : Function_Type;
modifiers : Modifiers_Array;
first : Boolean;
world : not null A_World;
worldX,
worldY,
layer : Integer ) is abstract;
function Copy( src : A_Tool ) return A_Tool;
pragma Postcondition( Copy'Result /= src or else src = null );
procedure Delete( this : in out A_Tool );
private
type Tool is abstract new Object with null record;
end Tools;