private with FLTK.Images.RGB.PNG, Misc; package Things is type Thing is tagged private; Nothing : constant Thing; Man : constant Thing; Treasure : constant Thing; function "=" (A, B : in Thing) return Boolean; procedure Draw (This : in Thing; X, Y : in Integer); private type Thing is tagged record Self_Image : access FLTK.Images.RGB.PNG.PNG_Image; end record; Image_Dir : String := Misc.Origin & "/../share/sokoban/img"; Man_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/man.png"); Treasure_Image : aliased FLTK.Images.RGB.PNG.PNG_Image := FLTK.Images.RGB.PNG.Forge.Create (Image_Dir & "/treasure.png"); Nothing : constant Thing := (Self_Image => null); Man : constant Thing := (Self_Image => Man_Image'Access); Treasure : constant Thing := (Self_Image => Treasure_Image'Access); end Things;