130 lines
3.5 KiB
Dart
130 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:fluttericon/rpg_awesome_icons.dart';
|
|
import 'package:tallee/core/enums.dart';
|
|
import 'package:tallee/data/models/match.dart';
|
|
import 'package:tallee/data/models/player.dart';
|
|
import 'package:tallee/l10n/generated/app_localizations.dart';
|
|
|
|
/// Translates a [Ruleset] enum value to its corresponding localized string.
|
|
String translateRulesetToString(Ruleset ruleset, BuildContext context) {
|
|
final loc = AppLocalizations.of(context);
|
|
switch (ruleset) {
|
|
case Ruleset.highestScore:
|
|
return loc.highest_score;
|
|
case Ruleset.lowestScore:
|
|
return loc.lowest_score;
|
|
case Ruleset.singleWinner:
|
|
return loc.single_winner;
|
|
case Ruleset.singleLoser:
|
|
return loc.single_loser;
|
|
case Ruleset.multipleWinners:
|
|
return loc.multiple_winners;
|
|
case Ruleset.placement:
|
|
return loc.placement;
|
|
}
|
|
}
|
|
|
|
/// Translates a [GameColor] enum value to its corresponding localized string.
|
|
String translateGameColorToString(GameColor color, BuildContext context) {
|
|
final loc = AppLocalizations.of(context);
|
|
switch (color) {
|
|
case GameColor.red:
|
|
return loc.color_red;
|
|
case GameColor.blue:
|
|
return loc.color_blue;
|
|
case GameColor.green:
|
|
return loc.color_green;
|
|
case GameColor.yellow:
|
|
return loc.color_yellow;
|
|
case GameColor.purple:
|
|
return loc.color_purple;
|
|
case GameColor.orange:
|
|
return loc.color_orange;
|
|
case GameColor.pink:
|
|
return loc.color_pink;
|
|
case GameColor.teal:
|
|
return loc.color_teal;
|
|
}
|
|
}
|
|
|
|
/// Returns the [Color] object corresponding to a [GameColor] enum value.
|
|
Color getColorFromGameColor(GameColor color) {
|
|
switch (color) {
|
|
case GameColor.red:
|
|
return Colors.red;
|
|
case GameColor.blue:
|
|
return Colors.blue;
|
|
case GameColor.green:
|
|
return Colors.green;
|
|
case GameColor.yellow:
|
|
return const Color(0xFFF7CA28);
|
|
case GameColor.purple:
|
|
return Colors.purple;
|
|
case GameColor.orange:
|
|
return const Color(0xFFef681f);
|
|
case GameColor.pink:
|
|
return Colors.pink;
|
|
case GameColor.teal:
|
|
return Colors.teal;
|
|
}
|
|
}
|
|
|
|
/// Returns [IconData] corresponding to a [Ruleset] enum value.
|
|
IconData getRulesetIcon(Ruleset ruleset) {
|
|
switch (ruleset) {
|
|
case Ruleset.highestScore:
|
|
return Icons.arrow_upward;
|
|
case Ruleset.lowestScore:
|
|
return Icons.arrow_downward;
|
|
case Ruleset.singleWinner:
|
|
return Icons.emoji_events;
|
|
case Ruleset.singleLoser:
|
|
return Icons.sentiment_dissatisfied;
|
|
case Ruleset.multipleWinners:
|
|
return Icons.group;
|
|
case Ruleset.placement:
|
|
return RpgAwesome.podium;
|
|
}
|
|
}
|
|
|
|
/// Counts how many players in the [match] are not part of the group
|
|
///
|
|
/// Returns the text you append after the group name, e.g. " + 5" or an empty
|
|
/// string if there are no extra players
|
|
String getExtraPlayerCount(Match match) {
|
|
int count = 0;
|
|
|
|
if (match.group == null) {
|
|
return '';
|
|
}
|
|
|
|
final groupMembers = match.group!.members;
|
|
final players = match.players;
|
|
|
|
for (var player in players) {
|
|
if (!groupMembers.any((member) => member.id == player.id)) {
|
|
count++;
|
|
}
|
|
}
|
|
|
|
if (count == 0) {
|
|
return '';
|
|
}
|
|
return ' + ${count.toString()}';
|
|
}
|
|
|
|
String getNameCountText(Player player) {
|
|
if (player.nameCount >= 1) {
|
|
return ' #${player.nameCount}';
|
|
}
|
|
return '';
|
|
}
|
|
|
|
String getPointLabel(AppLocalizations loc, int points) {
|
|
if (points == 1) {
|
|
return '$points ${loc.point}';
|
|
} else {
|
|
return '$points ${loc.points}';
|
|
}
|
|
}
|