# Keybindings Methods to interact with gametabs via FKeys. Use or uncomment {$DEFINE SRL_KEYBINDINGS_DEBUG} to debug already setup FKeys. - - - ## type TRSKeyTabPair TRSKeyTabPair is a record to represent a single pair of gametab/FKey. - - - ## type TRSKeybindings TRSKeybindings is a record used to: - enable/disable the use of keybinds. - store our already setup KeyTabPair. - figure out which keybinds we have setup if we don't preset them. - manage keys we don't know their match yet. - - - ## KeyTabPair.Setup ```pascal procedure TRSKeyTabPair.Setup(Gametab: ERSGameTab); ``` Sets up a single FKey/Gametab pair. Example: ```pascal var KeyTabPair: TRSKeyTabPair; begin KeyTabPair.Setup(ERSGameTab.COMBAT); end; ``` - - - ## Keybindings.Setup ```pascal procedure TRSKeybindings.Setup(Keys: TIntegerArray = DEFAULT_FKEYS); ``` **Keybindings.Setup** is a procedure that is used to setup it's internal variables so it's ready to use. By default it's called with **SRL.Setup** but can be called again with a TIntegerArray argument as a FKeys preset. Note: This array of ints should be the **VK_** constants built into Simba that represent FKeys. Example: ```pascal Keybindings.Setup([ VK_F1, VK_ESCAPE, VK_F2, VK_F10, VK_F4, VK_F9, VK_F6, VK_F7, VK_F8, VK_F5, VK_F3 ]); ``` - - - ## Keybindings.GetKeyIndex ```pascal function TRSKeybindings.GetKeyIndex(Key: Int32): Int32; function TRSKeybindings.GetKeyIndex(Gametab: ERSGameTab): Int32; overload; ``` Internal function used to find the index of a **Key** or **Gametab** of an already setup **KeyTabPair** if it already exists otherwise we return **-1** to know the pair does not exist yet. - - - ## var Keybindings Global Keybindings variable. - - - ## GameTabs.FKeyOpen ```pascal function TRSGameTabs.FKeyOpen(Tab: ERSGameTab): Boolean; ``` This function attempts to open a gametab with the help of **Keybindings** global variable. When called the following happens: - **Keybindings.KeyTabPairs** is checked for a match of the gametab **Tab** we passed in as an argument. - If a match is found, the FKey is pressed and we Exit the function returning **True** if **Tab** was opened. - If no match is found we then check if there's still FKeys available in **Keybindings.UncheckedKeyArray** (There's 13 Fkeys for 14 tabs and some might even be disabled). - If there's no FKeys we exit. - If there's FKeys available: - We pick a Key from **Keybindings.UncheckedKeyArray**, which key will depend on **Keybindings.RandomizeChecks**. - We check if our Key is in **Keybindings.KeyTabPairs**: - If not we Exit. This meants this Key is either not an FKey or the user didn't pass it in in **Keybindings.Setup**. (This might not be needed? Not 100% sure...) - Now we press the key and monitor gametab changes: - Wether we opened the tab we wanted or not, if the the current gametab switched that the new Tab will be added to **Keybindings.KeyTabPairs** as a new pair to the key pressed and removed from **Keybindings.UncheckedKeyArray**. - If the tab switched to the one we wanted the function results true, otherwise false. - If the gametab didn't switch: - We check if the currenttab has a pair in **Keybindings.KeyTabPairs** and is setup. - If it's not we don't do anything, we can't assume the FKey is a pair to the current tab without being 100% sure. - If it exists and is setup, then we set the FKey we pressed in **Keybindings.KeyTabPairs** as a pair to **ERSGameTab.UNKNOWN** so we know we check it again while also deleting it from **Keybindings.UncheckedKeyArray**. ```{note} {$DEFINE SRL_KEYBINDINGS_DEBUG} can be used to debug already setup **Keybindings.KeyTabPairs**. ``` Example: ```pascal Gametabs.FKeyOpen(ERSGameTab.COMBAT); ``` - - - ## GameTabs.Open ```pascal function TRSGameTabs.Open(Tab: ERSGameTab): Boolean; override; ``` Override to open gametabs with **GameTabs.FKeyOpen** if **Keybindings.UseKeybinds** is true. Example: ```pascal Gametabs.Open(ERSGameTab.COMBAT); ```