Poprawiona wersja
import 'package:sj_manager/bridge.dart'; UserAlgorithm<ClassificationScoreCreator> create() { return UserAlgorithm<ClassificationScoreCreator>( id: 'world_cup_individual', name: { "pl": "Puchar Świata (indywidualny)", "en": "World Cup (individual)", "cz": "Světový Pohár", }, description: { "pl": "Punktuje TOP30 w każdym konkursie, według dobrze znanych wszystkim zasad PŚ", "en": "TOP30 of each competition scores, according to the well known WC rules", "cz": "TOP30 bodů z každé soutěže podle známých pravidel SP", }, algorithm: _Algorithm(), // Tutaj jedynie pamiętajmy, żeby dobrze wpisać nazwę "klasy", którą stworzyliśmy poniżej ); } class _Algorithm extends ClassificationScoreCreator { ClassificationScore compute(ClassificationScoreCreatingContext context) { // "context" to obiekt mający wszystkie przydatne informacje. Kiedyś dam dobrą instrukcję do tego, co tam znajdziemy. // "context.entity" to nasz skoczek bądź drużyna (w zależności) // Aby sprawdzić czy konkurs jest indywidualny/drużynowy, musimy sprawdzić "competition is Competition<Jumper> lub Competition<Team>" final significantCompetitions = context.playedCompetition.where((competition) { return competition.labels.contains(CompetitionType.competition) && competition is Competition< Jumper>; // Chcemy tylko konkursy "główne", które są konkursami indywidualnymi. Dwa znaki "&" oznaczają, że muszą być spełnione oba warunki }); final pointsMap = { 1: 100, 2: 80, 3: 60, 4: 50, 5: 45, 6: 40, 7: 36, 8: 32, 9: 29, 10: 26, 11: 24, 12: 22, 13: 20, 14: 18, 15: 16, 16: 15, 17: 14, 18: 13, 19: 12, 20: 11, 21: 10, 22: 9, 23: 8, 24: 7, 25: 6, 26: 5, 27: 4, 28: 3, 29: 2, 30: 1, }; var competitionScores = <CompetitionScore>[]; var points = 0; // Tworzymy zmienną z punktami for (var competition in significantCompetitions) { // Przechodzimy przez wszystkie przefiltrowane zawody final position = competition.standings.positionOf( entity); // Dowiedz się, jakie miejsce zajął skoczek w zawodach. Entity w tym przypadku jest skoczkiem. final pointsAddition = pointsMap[position] ?? 0; // Dodaj punkty w zależności od miejsca w zawodach if (pointsAddition > 0) { points += pointsAddition; competitionScores.add(competition.standings.scoreOf(entity)); } } return ClassificationScore<Jumper>( entity: entity, points: points, competitionScores: competitionScores, // Lista konkursów, gdzie punktował zawodnik ); } }
Leave a Comment