make player.finished computed on demand