with Directions; use Directions;
private with Physics.Clip_Maps;
package Widgets.Containers.Scenes.Ked is
type Ked_Scene is new Scene with private;
type A_Ked_Scene is access all Ked_Scene'Class;
function Create_Scene( view : not null access Game_Views.Game_View'Class;
id : String ) return A_Ked_Scene;
pragma Precondition( id'Length > 0 );
pragma Postcondition( Create_Scene'Result /= null );
function Get_Active_Layer( this : access Ked_Scene ) return Natural;
procedure Get_Target_Bounds( this : access Ked_Scene;
x1, y1,
x2, y2 : out Float );
procedure Scroll_Increment( this : access Ked_Scene;
dir : Cardinal_Direction );
procedure Set_Active_Layer( this : access Ked_Scene; layer : Positive );
procedure Set_Layer_Visible( this : access Ked_Scene;
layer : Positive;
visible : Boolean );
procedure Shift_Focus( this : not null access Ked_Scene'Class; x,y : Float );
procedure Zoom_Identity( this : access Ked_Scene );
procedure Zoom_In( this : access Ked_Scene );
procedure Zoom_Out( this : access Ked_Scene );
private
use Physics.Clip_Maps;
type Ked_Scene is new Scene with
record
leftMouse : Boolean := False;
rightMouse : Boolean := False;
middleMouse : Boolean := False;
activeModifiers : Modifiers_Array := Modifiers_Array'(others=>False);
activeLayer : Natural := 0;
scrollSpeed : Float := 0.0;
clipMap : A_Clip_Map := null;
end record;
procedure Construct( this : access Ked_Scene;
view : not null access Game_Views.Game_View'Class;
id : String );
pragma Precondition( id'Length > 0 );
procedure Delete( this : in out Ked_Scene );
procedure Draw_Layer( this : access Ked_Scene;
dc : Drawing_Context;
layer : Positive;
startX,
startY : Integer;
tileX1,
tileY1,
tileX2,
tileY2 : Integer );
procedure Draw_Layer_Overlay( this : access Ked_Scene;
dc : Drawing_Context;
startX,
startY : Integer;
tileX1,
tileY1,
tileX2,
tileY2 : Integer );
procedure Handle_Entity_Created( this : access Ked_Scene;
evt : not null A_Entity_Created_Event );
procedure Handle_Exit( this : access Ked_Scene );
procedure Handle_Mouse_Move( this : access Ked_Scene;
evt : not null A_Mouse_Event );
procedure Handle_Mouse_Press( this : access Ked_Scene;
evt : not null A_Mouse_Button_Event );
procedure Handle_Mouse_Release( this : access Ked_Scene;
evt : not null A_Mouse_Button_Event );
procedure Handle_World_Loaded( this : access Ked_Scene;
evt : not null A_World_Loaded_Event );
procedure Handle_Tile_Changed( this : access Ked_Scene;
evt : not null A_Tile_Changed_Event );
procedure Zoom_With_Focus( this : access Ked_Scene; factor : Float );
end Widgets.Containers.Scenes.Ked;