//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;
}