1
0

make winner setable by setter

This commit is contained in:
Adrian Wannenmacher 2026-02-09 00:34:25 +01:00
parent 369b279470
commit df588af0c6
Signed by: tfld
GPG Key ID: 19D986ECB1E492D5
2 changed files with 18 additions and 17 deletions

View File

@ -24,6 +24,9 @@ export const Team = Object.freeze({
* only implements the raising mechanics, and no actual game play.
*/
export class Round extends EventTarget {
/** The event triggered when the round is won. */
static winEvent= "roundWon";
/** The maximum the "we" team may raise to. */
#weLimit = 11;
/** The maximum the "they" team may raise to. */
@ -115,25 +118,23 @@ export class Round extends EventTarget {
return this.#winner;
}
/** Check whether the round has been decided. */
get decided() {
return this.#winner !== null;
}
static victoryEvent = "roundWon";
/** A team has won the round.
/** Set the winner of the round.
*
* @param {Team} team The team that won the round.
*/
won(team) {
set winner(team) {
if (team !== Team.We && team !== Team.They)
throw new TypeError("only actual teams can win");
if (this.decided)
throw new Error("decided round cannot be won again");
this.#winner = team;
this.dispatchEvent(new CustomEvent(Round.victoryEvent));
this.dispatchEvent(new CustomEvent(Round.winEvent));
}
/** Check whether the round has been decided. */
get decided() {
return this.#winner !== null;
}
/** Check whether a team can raise.
@ -164,12 +165,12 @@ export class Round extends EventTarget {
if (!this.canRaise(team)) return;
if (team === Team.We && this.points >= this.#weLimit) {
this.won(Team.They);
this.winner = Team.They;
return;
}
if (team === Team.They && this.points >= this.#theyLimit) {
this.won(Team.We);
this.winner = Team.We;
return;
}

View File

@ -15,7 +15,7 @@ QUnit.module("models", function() {
QUnit.test("immediate victory", function(assert) {
let round = new Round();
round.won(Team.We);
round.winner = Team.We;
assert.strictEqual(round.points, 2, "initial points");
assert.true(round.decided, "there is a winner");
assert.strictEqual(round.winner, Team.We, "correct winner");
@ -25,9 +25,9 @@ QUnit.module("models", function() {
QUnit.test("multiple victories", function(assert) {
let round = new Round();
round.won(Team.They);
round.winner = Team.They;
assert.throws(function() {
round.won(Team.We);
round.winner = Team.We;
}, "victory cannot be stolen");
});
@ -161,10 +161,10 @@ QUnit.module("models", function() {
QUnit.test("victory causes event", function(assert) {
let round = new Round();
round.addEventListener(Round.victoryEvent, function() {
round.addEventListener(Round.winEvent, function() {
assert.step("event");
});
round.won(Team.We);
round.winner = Team.We;
assert.verifySteps(["event"], "event was triggered");
});
});