This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| new:input [2018/02/16 21:21] – korshun | new:input [2018/02/17 12:10] (current) – korshun | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Input functions | + | ====== Input library |
| ACSUtils provides a set of wrappers for [[zdoom> | ACSUtils provides a set of wrappers for [[zdoom> | ||
| Line 5: | Line 5: | ||
| ===== Basic concepts ===== | ===== Basic concepts ===== | ||
| - | Every key is either **up** or **down** at any time. | + | * Every key is either **up** or **down** at any time. |
| - | + | | |
| - | If the key was **up** the previous tic, but is now **down**, it is said to have been **pressed**. | + | |
| - | + | | |
| - | If the key was **down** the previous tic, but is now **up**, it is said to have been **released**. | + | |
| - | + | ||
| - | If the key has been **pressed or released**, it is said to have been **toggled**. | + | |
| ACSUtils provide a way to easily check these all these states for every key without writing compliated '' | ACSUtils provide a way to easily check these all these states for every key without writing compliated '' | ||
| Line 17: | Line 14: | ||
| ===== What's the point of " | ===== What's the point of " | ||
| - | If you want to detect if the player has pressed the key just once, you can't do so just by checking if they key is down like this: | + | Say, you have an on-screen button |
| < | < | ||
| - | // This code is bugged. | + | if (/* check that mouse cursor |
| - | if (GetPlayerInput(-1, | + | if (GetPlayerInput(-1, |
| - | print("You pressed X once"); | + | |
| </ | </ | ||
| - | The key will be down for some time after the press, causing the condition to trigger multiple times. To avoid this, you need to check whether | + | **This code is wrong.** If the player clicks the button once, it will likely cause him to sell multiple items. That's because this code checks if the mouse button is **down**. But the mouse button may be down for multiple tics after a click, as it may not be immediately released. |
| + | |||
| + | To avoid this bug, you need to check if the button | ||
| < | < | ||
| - | if (KeyPressed(BT_X)) | + | if (/* check that mouse cursor is inside the button */) |
| - | print("You pressed X once"); | + | |
| + | | ||
| </ | </ | ||
| - | '' | + | Now the button works correctly. |
| - | + | ||
| - | The same rationale goes for **released** state. | + | |
| ===== Functions ===== | ===== Functions ===== | ||
| Line 51: | Line 49: | ||
| < | < | ||
| - | if (KeyPressed(BT_FORWARD)) | + | if (KeyPressed(BT_ATTACK)) |
| - | print(s:" | + | print(s:" |
| </ | </ | ||
| Line 83: | Line 81: | ||
| < | < | ||
| - | if (KeyDown(BT_FORWARD | BT_BACK | BT_MOVELEFT | BT_MOVERIGHT)) | + | if (KeyDownAny(BT_FORWARD | BT_BACK | BT_MOVELEFT | BT_MOVERIGHT)) |
| print(s:" | print(s:" | ||
| </ | </ | ||
| - | To use these wrappers on players other than the activator, prefix any function | + | To use these wrappers on players other than the activator, prefix any of the above functions |
| * '' | * '' | ||