|
|
|
@ -1,6 +1,5 @@
|
|
|
|
|
with Sf.Window;
|
|
|
|
|
with Sf.Window.Event;
|
|
|
|
|
with Sf.Window.Keyboard;
|
|
|
|
|
with Sf.Graphics.Color;
|
|
|
|
|
with Sf.Graphics.Image;
|
|
|
|
|
with Sf.Graphics.RenderWindow;
|
|
|
|
@ -99,24 +98,18 @@ package body Video is
|
|
|
|
|
|
|
|
|
|
function Next_Key return Key is
|
|
|
|
|
begin
|
|
|
|
|
while Is_Running loop
|
|
|
|
|
Poll_Events;
|
|
|
|
|
|
|
|
|
|
for I in Key'First .. Key'Last loop
|
|
|
|
|
if Keys (I) then
|
|
|
|
|
return I;
|
|
|
|
|
end if;
|
|
|
|
|
end loop;
|
|
|
|
|
Last_Key := Unknown;
|
|
|
|
|
|
|
|
|
|
while Is_Running and then Last_Key = Unknown loop
|
|
|
|
|
Poll_Events;
|
|
|
|
|
delay 0.016;
|
|
|
|
|
end loop;
|
|
|
|
|
|
|
|
|
|
return 0; -- Only get here on program exit
|
|
|
|
|
return Last_Key;
|
|
|
|
|
end Next_Key;
|
|
|
|
|
|
|
|
|
|
procedure Poll_Events is
|
|
|
|
|
use Sf.Window.Event;
|
|
|
|
|
use Sf.Window.Keyboard;
|
|
|
|
|
|
|
|
|
|
e : sfEvent;
|
|
|
|
|
begin
|
|
|
|
@ -124,44 +117,8 @@ package body Video is
|
|
|
|
|
case e.eventType is
|
|
|
|
|
when sfEvtClosed =>
|
|
|
|
|
RenderWindow.close (app);
|
|
|
|
|
when sfEvtKeyPressed => case e.key.code is
|
|
|
|
|
when sfKeyNum0 => Keys (0) := True;
|
|
|
|
|
when sfKeyNum1 => Keys (1) := True;
|
|
|
|
|
when sfKeyNum2 => Keys (2) := True;
|
|
|
|
|
when sfKeyNum3 => Keys (3) := True;
|
|
|
|
|
when sfKeyNum4 => Keys (4) := True;
|
|
|
|
|
when sfKeyNum5 => Keys (5) := True;
|
|
|
|
|
when sfKeyNum6 => Keys (6) := True;
|
|
|
|
|
when sfKeyNum7 => Keys (7) := True;
|
|
|
|
|
when sfKeyNum8 => Keys (8) := True;
|
|
|
|
|
when sfKeyNum9 => Keys (9) := True;
|
|
|
|
|
when sfKeyA => Keys (10) := True;
|
|
|
|
|
when sfKeyB => Keys (11) := True;
|
|
|
|
|
when sfKeyC => Keys (12) := True;
|
|
|
|
|
when sfKeyD => Keys (13) := True;
|
|
|
|
|
when sfKeyE => Keys (14) := True;
|
|
|
|
|
when sfKeyF => Keys (15) := True;
|
|
|
|
|
when others => null;
|
|
|
|
|
end case;
|
|
|
|
|
when sfEvtKeyReleased => case e.key.code is
|
|
|
|
|
when sfKeyNum0 => Keys (0) := False;
|
|
|
|
|
when sfKeyNum1 => Keys (1) := False;
|
|
|
|
|
when sfKeyNum2 => Keys (2) := False;
|
|
|
|
|
when sfKeyNum3 => Keys (3) := False;
|
|
|
|
|
when sfKeyNum4 => Keys (4) := False;
|
|
|
|
|
when sfKeyNum5 => Keys (5) := False;
|
|
|
|
|
when sfKeyNum6 => Keys (6) := False;
|
|
|
|
|
when sfKeyNum7 => Keys (7) := False;
|
|
|
|
|
when sfKeyNum8 => Keys (8) := False;
|
|
|
|
|
when sfKeyNum9 => Keys (9) := False;
|
|
|
|
|
when sfKeyA => Keys (10) := False;
|
|
|
|
|
when sfKeyB => Keys (11) := False;
|
|
|
|
|
when sfKeyC => Keys (12) := False;
|
|
|
|
|
when sfKeyD => Keys (13) := False;
|
|
|
|
|
when sfKeyE => Keys (14) := False;
|
|
|
|
|
when sfKeyF => Keys (15) := False;
|
|
|
|
|
when others => null;
|
|
|
|
|
end case;
|
|
|
|
|
when sfEvtKeyPressed =>
|
|
|
|
|
Last_Key := Translate_Scancode (e.key.scancode);
|
|
|
|
|
when others => null;
|
|
|
|
|
end case;
|
|
|
|
|
end loop;
|
|
|
|
@ -194,11 +151,27 @@ package body Video is
|
|
|
|
|
|
|
|
|
|
function Key_Down (K : Key) return Boolean is
|
|
|
|
|
begin
|
|
|
|
|
return Keys (K);
|
|
|
|
|
return isScancodePressed (Key_Conv (K)) = sfTrue;
|
|
|
|
|
end Key_Down;
|
|
|
|
|
|
|
|
|
|
function Key_Up (K : Key) return Boolean is
|
|
|
|
|
begin
|
|
|
|
|
return not Keys (K);
|
|
|
|
|
return not Key_Down (K);
|
|
|
|
|
end Key_Up;
|
|
|
|
|
|
|
|
|
|
function Translate_Key (K : Key) return sfScancode is
|
|
|
|
|
begin
|
|
|
|
|
return Key_Conv (K);
|
|
|
|
|
end Translate_Key;
|
|
|
|
|
|
|
|
|
|
function Translate_Scancode (S : sfScancode) return Key
|
|
|
|
|
is begin
|
|
|
|
|
for I in Key_Map'Range loop
|
|
|
|
|
if Key_Conv (I) = S then
|
|
|
|
|
return I;
|
|
|
|
|
end if;
|
|
|
|
|
end loop;
|
|
|
|
|
|
|
|
|
|
return Unknown;
|
|
|
|
|
end Translate_Scancode;
|
|
|
|
|
end Video;
|
|
|
|
|