Doppelkopf-Stats-Frontend/src/app/models/doppelkopf/enums/announcement.ts

115 lines
3.7 KiB
TypeScript

export enum Announcement {
RE = 'Re',
CONTRA = 'Contra',
RE_NO_NINETY = 'Re: No ninety',
CONTRA_NO_NINETY = 'Contra: No ninety',
RE_NO_SIXTY = 'Re: No sixty',
CONTRA_NO_SIXTY = 'Contra: No sixty',
RE_NO_THIRTY = 'Re: No thirty',
CONTRA_NO_THIRTY = 'Contra: No thirty'
}
/**
* Returns all available announcement values
*/
export function getAllAnnouncementValues(): Announcement[] {
return [
Announcement.RE,
Announcement.RE_NO_NINETY,
Announcement.RE_NO_SIXTY,
Announcement.RE_NO_THIRTY,
Announcement.CONTRA,
Announcement.CONTRA_NO_NINETY,
Announcement.CONTRA_NO_SIXTY,
Announcement.CONTRA_NO_THIRTY
];
}
/**
* Checks if the selected announcements are a valid set of announcements.
* E.g.: If RE_NO_NINETY is newly selected, RE also has to be selected
* @param selectedAnnouncements The list of selected announcements
*/
export function checkValidity(selectedAnnouncements: Announcement[]): boolean {
// First check all "RE" Announcements
if(selectedAnnouncements.indexOf(Announcement.RE_NO_THIRTY) !== -1) {
if(selectedAnnouncements.indexOf(Announcement.RE_NO_SIXTY) === -1) {
return false;
}
}
if(selectedAnnouncements.indexOf(Announcement.RE_NO_SIXTY) !== -1) {
if(selectedAnnouncements.indexOf(Announcement.RE_NO_NINETY) === -1) {
return false;
}
}
if(selectedAnnouncements.indexOf(Announcement.RE_NO_NINETY) !== -1) {
if(selectedAnnouncements.indexOf(Announcement.RE) === -1) {
return false;
}
}
// Now same for "CONTRA"
if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_THIRTY) !== -1) {
if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_SIXTY) === -1) {
return false;
}
}
if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_SIXTY) !== -1) {
if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_NINETY) === -1) {
return false;
}
}
if(selectedAnnouncements.indexOf(Announcement.CONTRA_NO_NINETY) !== -1) {
if(selectedAnnouncements.indexOf(Announcement.CONTRA) === -1) {
return false;
}
}
// all fine, return true
return true
}
/**
* Returns the names of the two highest announcements from the given list, one for RE and one for CONTRA if applicable
* @param selectedAnnouncements The list of announcements to check
*/
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;
}