diff options
Diffstat (limited to 'src/video.adb')
-rw-r--r-- | src/video.adb | 75 |
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; |