aboutsummaryrefslogtreecommitdiffstats
path: root/src/video.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/video.adb')
-rw-r--r--src/video.adb75
1 files changed, 24 insertions, 51 deletions
diff --git a/src/video.adb b/src/video.adb
index 657d285..1a7fa21 100644
--- a/src/video.adb
+++ b/src/video.adb
@@ -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;