requires player class