ACSUtils Wiki

An ACS library for ZDoom-based ports

User Tools

Site Tools


new:input

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
new:input [2018/02/17 14:07] korshunnew:input [2018/02/17 14:10] (current) korshun
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 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**.
-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 ''GetPlayerInput'' expressions. ACSUtils provide a way to easily check these all these states for every key without writing compliated ''GetPlayerInput'' expressions.
Line 17: Line 14:
 ===== What's the point of "pressed" and "released"? ===== ===== What's the point of "pressed" and "released"? =====
  
-Say you have an on-screen button to sell items that can be [[mouse|clicked with mouse]]:+Sayyou have an on-screen button to sell items that can be [[mouse|clicked with mouse]]:
  
 <code> <code>
 if (/* check that mouse cursor is inside the button */) if (/* check that mouse cursor is inside the button */)
     if (GetPlayerInput(-1, INPUT_BUTTONS) & BT_ATTACK)) // check left mouse button click     if (GetPlayerInput(-1, INPUT_BUTTONS) & BT_ATTACK)) // check left mouse button click
-        print("You sold one item");+        SellItem();
 </code> </code>
  
-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.+**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 was up the previous tic, but is now down. And that's exactly what the **pressed** state means. The ''KeyPressed'' function contains all the repetitive code to perform this check: To avoid this bug, you need to check if the button was up the previous tic, but is now down. And that's exactly what the **pressed** state means. The ''KeyPressed'' function contains all the repetitive code to perform this check:
Line 32: Line 29:
 if (/* check that mouse cursor is inside the button */) if (/* check that mouse cursor is inside the button */)
     if (KeyPressed(BT_ATTACK)) // check left mouse button click     if (KeyPressed(BT_ATTACK)) // check left mouse button click
-        print("You sold one item");+        SellItem();
 </code> </code>
  
Line 84: Line 81:
  
 <code> <code>
-if (KeyDown(BT_FORWARD | BT_BACK | BT_MOVELEFT | BT_MOVERIGHT))+if (KeyDownAny(BT_FORWARD | BT_BACK | BT_MOVELEFT | BT_MOVERIGHT))
     print(s:"You are trying to move.");     print(s:"You are trying to move.");
 </code> </code>
new/input.1518869241.txt.gz · Last modified: 2018/02/17 14:07 by korshun