Refactor TurnGenerator to be a trait