def calculate_player_position screen_name
      @cached_player_position = {}
      @player_hashes.sort!{|a,b| button_relative_seat(a) <=> button_relative_seat(b)}
      @player_hashes = [@player_hashes.pop] + @player_hashes unless @player_hashes.first[:seat] == @button_player_index
      @player_hashes.each_with_index{|player, index| player[:position] = index, @cached_player_position[player[:screen_name]] = index}
      @cached_player_position[screen_name]
    end
def calculate_player_position screen_name
      @cached_player_position = {}
      @player_hashes.sort!{|a,b| button_relative_seat(a) <=> button_relative_seat(b)}
      @player_hashes = [@player_hashes.pop] + @player_hashes unless @player_hashes.first[:seat] == @button_player_index
      @player_hashes.each_with_index{|player, index| player[:position] = index, @cached_player_position[player[:screen_name]] = index}
      @cached_player_position[screen_name]
    end
long computation is cached, which cache is cleared every time a new player is registered