import { Player } from "./Player"; export class Team { readonly id: team; public guessers: Player[]; public writer: Player | null; private _hand: team_hands; private _questions: string[]; private _answers: string[]; constructor(id: team) { this.id = id; this._answers = new Array(8).fill(``); this._questions = []; this._hand = { guesser: [], writer: [] }; this.guessers = []; }; /* The getters for the various class properties */ get hand(): string[] { return this._hand.guesser; }; get spiritHand(): string[] { return this._hand.writer }; get answers(): string[] { return this._answers; }; get questions(): string[] { return this._questions; }; /** * Adds the question(s) to the medium's hand * * @param questions The array of question text to add the medium's hand. */ public addCardsToHand(questions: string[]): void { this._hand.guesser.push(...questions); }; /** * Resets all the per-game data related to this team */ public reset(): void { this._hand.guesser = []; this._questions = []; this._answers = new Array(8).fill(``); } /** * Removes a card from the medium's hand * * @param question The card to remove */ public removeCard(question: string) { this._hand.guesser = this._hand.guesser.filter(x => x != question); }; /** * Asks the spirit a question, removing it from the medium's hands * * @param question The question that is being asked */ public askSpirit(question: string) { this._hand.writer.push(question); this.removeCard(question); }; /** * Adds the given question to the history of the questions. * * @param question The question the spirit is answering */ public selectQuestion(question: string) { this._questions.push(question); this._hand.writer = []; }; /** * Takes the value of an answer and modifies in the storage. * * @param answerIndex The value of the answer between 1 and 8 (inclusive) * @param answer The new answer for that index * @throws Error If the answerIndex is not in range */ public modifyAnswer(answerIndex: answer, answer: string) { if (answerIndex > this._answers.length || answerIndex <= 0) { throw new Error(`Cannot set answer at index ${answerIndex}.`) }; this._answers[answerIndex - 1] = answer; }; /** * Converts the given object into a JSON representation of the data */ public toJSON(): datastoreTeam { return { questions: this._questions, answers: this._answers, hands: this._hand, id: this.id, }; }; /** * Converts a team JSON object back into a Team object. */ public static fromJSON(data: datastoreTeam): Team { let t = new Team(data.id); t._questions = data.questions; t._answers = data.answers; t._hand = data.hands; return t; }; };