I am currently programming a Tetris clone. In Tetris, there is a system being used called DAS, or Delayed Auto Shift. It works similarly to the keyboard auto-repeat used in Windows. For example, if you press left, the block immediately jumps one Column to the left. Then a certain amount of time goes by till it jumps a second time, and the following jumps move at a constant rate. I have this implemented as
moveHorizontal(boolean moveRight), and can call it with a boolean that determines the direction the movement is going in.
However my main problem is handling the left and right direction buttons at the same time. More specifically, the state where you hold down one button, while pressing another button. The more recently pressed button should overwrite the old one, and the DAS should be reset once it switches directions. I feel like I can't really get a grasp on how to implement this kind of logic.
How do I logically change the state so as to correctly respond to the user input as I have described?
I hope I explained the problem in enough detail. If I didn't, please let me know, so I can provide more information.