From bed8992ddd4e328c105fd1202d92286ad6c7f5dd Mon Sep 17 00:00:00 2001 From: Patrick Mueller Date: Sat, 10 Sep 2022 19:26:12 +0200 Subject: [PATCH] Add "team selection" page to "add game" component --- .../add-game/add-game.component.html | 8 ++- .../add-game/add-game.component.scss | 10 +++- .../components/add-game/add-game.component.ts | 59 +++++++++++++++++++ .../models/doppelkopf/enums/announcement.ts | 40 +++++++++++++ src/app/models/doppelkopf/enums/team.ts | 2 +- 5 files changed, 114 insertions(+), 5 deletions(-) diff --git a/src/app/components/add-game/add-game.component.html b/src/app/components/add-game/add-game.component.html index 5b48448..5ec16b8 100644 --- a/src/app/components/add-game/add-game.component.html +++ b/src/app/components/add-game/add-game.component.html @@ -9,13 +9,19 @@
+

Players: {{getPlayerNamesAsString()}}

Select the announcements for this game:

{{announcement.toString()}}

Illegal set of announcements!

- +

Players: {{getPlayerNamesAsString()}}

+

Highest Announcements: {{getHighestAnnouncements()}}

+

Please select the elder(s):

+
{{player.firstName}}
+

Illegal game teams!

+
diff --git a/src/app/components/add-game/add-game.component.scss b/src/app/components/add-game/add-game.component.scss index 89272cd..22c8b0a 100644 --- a/src/app/components/add-game/add-game.component.scss +++ b/src/app/components/add-game/add-game.component.scss @@ -20,7 +20,7 @@ color: $inactive; } -#player-amount-warn { +#player-amount-warn, #announcement-warn, #team-warn { color: $warn; } @@ -32,6 +32,10 @@ display: inherit; } -#announcement-warn { - color: $warn; +.elder-player-false { + color: $inactive; +} + +.elder-player-true { + color: $active; } diff --git a/src/app/components/add-game/add-game.component.ts b/src/app/components/add-game/add-game.component.ts index 2ce39ed..e9af485 100644 --- a/src/app/components/add-game/add-game.component.ts +++ b/src/app/components/add-game/add-game.component.ts @@ -1,6 +1,7 @@ import {Component, OnInit} from '@angular/core'; import {Player} from '../../models/doppelkopf/player'; import * as Announcement from '../../models/doppelkopf/enums/announcement'; +import {Team} from '../../models/doppelkopf/enums/team'; @Component({ selector: 'app-add-game', @@ -100,6 +101,18 @@ export class AddGameComponent implements OnInit { return this.actualPlayers.length !== 4; } + /** + * Returns the names of the active players as a comma-separated string + */ + getPlayerNamesAsString(): string { + let playerNames = ''; + for(let player of this.actualPlayers) { + playerNames += player.firstName + ', '; + } + // Remove last ", " + return playerNames.substring(0, playerNames.length-2); + } + /** * ___ __ * / | ____ ____ ____ __ ______ ________ ____ ___ ___ ____ / /______ @@ -142,4 +155,50 @@ export class AddGameComponent implements OnInit { checkAnnouncementsValid(): boolean { return Announcement.checkValidity(this.selectedAnnouncements); } + + getHighestAnnouncements(): string { + return Announcement.returnTwoHighestAnnouncements(this.selectedAnnouncements); + } + + /** + * ______ + * /_ __/__ ____ _____ ___ _____ + * / / / _ \/ __ `/ __ `__ \/ ___/ + * / / / __/ /_/ / / / / / (__ ) + * /_/ \___/\__,_/_/ /_/ /_/____/ + */ + + /** + * Toggles the players team + * @param player The player to toggle the team for + */ + toggleElderPlayer(player: Player): void { + if(player.team === Team.RE) { + player.team = Team.CONTRA; + } else { + player.team = Team.RE; + } + } + + /** + * Checks if the player is an elder + * @param player The player to check + */ + isPlayerElder(player: Player): boolean { + return player.team === Team.RE; + } + + /** + * Checks if the current team assignment is valid + */ + checkValidTeamAssignment(): boolean { + let numberOfElderPlayers: number = 0; + for(let player of this.actualPlayers) { + if(player.team === Team.RE) { + numberOfElderPlayers++; + } + } + + return !(numberOfElderPlayers !== 1 && numberOfElderPlayers !== 2); + } } diff --git a/src/app/models/doppelkopf/enums/announcement.ts b/src/app/models/doppelkopf/enums/announcement.ts index 659f651..194a743 100644 --- a/src/app/models/doppelkopf/enums/announcement.ts +++ b/src/app/models/doppelkopf/enums/announcement.ts @@ -69,3 +69,43 @@ export function checkValidity(selectedAnnouncements: Announcement[]): boolean { // all fine, return true return true } + +export function returnTwoHighestAnnouncements(selectedAnnouncements: Announcement[]): string { + let finalString: string = ''; + + // First check "RE" announcements + if(selectedAnnouncements.indexOf(Announcement.RE_NO_THIRTY) !== -1) { + finalString += Announcement.RE_NO_THIRTY; + } else if (selectedAnnouncements.indexOf(Announcement.RE_NO_SIXTY) !== -1) { + finalString += Announcement.RE_NO_SIXTY; + } else if (selectedAnnouncements.indexOf(Announcement.RE_NO_NINETY) !== -1) { + finalString += Announcement.RE_NO_NINETY; + } else if (selectedAnnouncements.indexOf(Announcement.RE) !== -1) { + finalString += Announcement.RE; + } + + // If there was a "RE" announcement, add a ", " so we can list the CONTRA announcement properly + if(finalString !== '') { + finalString += ', '; + } + + // Now check "CONTRA" + if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_THIRTY) !== -1) { + finalString += Announcement.CONTRA_NO_THIRTY; + } else if (selectedAnnouncements.indexOf(Announcement.CONTRA_NO_SIXTY) !== -1) { + finalString += Announcement.CONTRA_NO_SIXTY; + } else if (selectedAnnouncements.indexOf(Announcement.CONTRA_NO_NINETY) !== -1) { + finalString += Announcement.CONTRA_NO_NINETY; + } else if (selectedAnnouncements.indexOf(Announcement.CONTRA) !== -1) { + finalString += Announcement.CONTRA; + } else { + // Remove the last two chars from the finalString (", ") + finalString = finalString.substring(0, finalString.length-2); + } + + if(finalString === '') { + finalString = 'None'; + } + + return finalString; +} diff --git a/src/app/models/doppelkopf/enums/team.ts b/src/app/models/doppelkopf/enums/team.ts index 3604fb2..9bc7ae7 100644 --- a/src/app/models/doppelkopf/enums/team.ts +++ b/src/app/models/doppelkopf/enums/team.ts @@ -1,4 +1,4 @@ export enum Team { RE = 0, - KONTRA = 1 + CONTRA = 1 }