//so traditionally i just had a function that said "is this key down NOW"? //but with invaders jumping in discrete steps at discrete times, user //might get mad that it ignored the keytap... //stixcky keys stay "down" 'til they are read (and remain down if still pressed) HashSet keysDown = new HashSet(); HashSet keysDownSticky = new HashSet(); HashSet keysDownOnetime = new HashSet(); void keyPressed(){ this.keysDown.add(this.keyEvent.getKeyCode()); this.keysDownSticky.add(this.keyEvent.getKeyCode()); this.keysDownOnetime.add(this.keyEvent.getKeyCode()); if(gamestate == PLAYING){ f.handleKey(this.keyEvent.getKeyCode()); return; } //HANDLE JUST SPACES if( this.keyEvent.getKeyCode() == 32){ if(gamestate == TITLE){ pauseOpen(); startPrelude(); return; } if(gamestate == PRELUDE){ if(f == null){ sendInFleet(); } //startGame(); return; } if(gamestate == POSTLUDE){ startGameover(); return; } if(gamestate == GAMEOVER && allDeadShown){ pauseDone(); gamestate = TITLE; playOpen(); f = null; return; } } } void keyReleased(){ this.keysDown.remove(this.keyEvent.getKeyCode()); } boolean isKeyDown(int keyCode){ if(keysDown.contains(keyCode)) return true; return false; } boolean readKeySticky(int keyCode){ if( keysDownSticky.contains(keyCode)){ if(! isKeyDown(keyCode)){ keysDownSticky.remove(keyCode); } return true; } return false; } boolean readKeyOnetime(int keyCode){ if( keysDownOnetime.contains(keyCode)){ keysDownOnetime.remove(keyCode); return true; } return false; }