preferans-paper-js
Version:
nodejs paper for preferans
144 lines • 5.39 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
const pref_paper_column_side_1 = require("./pref.paper.column.side");
const pref_paper_position_1 = require("./enums/pref.paper.position");
const pref_paper_column_middle_1 = require("./pref.paper.column.middle");
const _myPositionFromDesignations = (me, main) => {
if (me === main)
throw new Error('PrefPaper::_myPositionFromDesignations:Designations should not match! But: ' + me + '===' + main);
if ('p1' === me) {
if ('p2' === main)
return pref_paper_position_1.default.RIGHT;
return pref_paper_position_1.default.LEFT;
}
else if ('p2' === me) {
if ('p3' === main)
return pref_paper_position_1.default.RIGHT;
return pref_paper_position_1.default.LEFT;
}
else {
if ('p1' === main)
return pref_paper_position_1.default.RIGHT;
return pref_paper_position_1.default.LEFT;
}
};
class PrefPaper {
constructor(designation, bula) {
this._designation = designation;
this._bula = bula;
this._left = new pref_paper_column_side_1.default(pref_paper_position_1.default.LEFT);
this._middle = new pref_paper_column_middle_1.default(this._bula);
this._right = new pref_paper_column_side_1.default(pref_paper_position_1.default.RIGHT);
}
reset() {
this._left = new pref_paper_column_side_1.default(pref_paper_position_1.default.LEFT);
this._middle = new pref_paper_column_middle_1.default(this._bula);
this._right = new pref_paper_column_side_1.default(pref_paper_position_1.default.RIGHT);
return this;
}
processAsMain(value, designation, failed) {
if (designation !== this.designation)
throw new Error('PrefPaper::processAsMain:Designations do not match. ' + this.designation + '!=' + designation);
if (failed)
this._markPlayedRefaFailed(pref_paper_position_1.default.MIDDLE);
else
this._markPlayedRefaPassed(pref_paper_position_1.default.MIDDLE);
this._middle.addValue(failed ? value : -value);
return this;
}
processAsMainRepealed(value, designation, failed) {
if (designation !== this.designation)
throw new Error('PrefPaper::processAsMain:Designations do not match. ' + this.designation + '!=' + designation);
this._middle.addValueRepealed(failed ? value : -value);
return this;
}
processAsFollower(value, designation, tricks, failed, mainsDesignation) {
if (designation !== this.designation)
throw new Error('PrefPaper::processAsFollower:Designations do not match. ' + this.designation + '!=' + designation);
const supa = value * tricks;
const mainsPosition = _myPositionFromDesignations(designation, mainsDesignation);
if (pref_paper_position_1.default.LEFT === mainsPosition)
this._addLeftSupa(supa);
else
this._addRightSupa(supa);
if (failed)
this._middle.addValue(value);
return this;
}
processAsFollowerRepealed(value, designation, tricks, failed, mainsDesignation) {
if (designation !== this.designation)
throw new Error('PrefPaper::processAsFollowerRepealed:Designations do not match. ' + this.designation + '!=' + designation);
const supa = value * tricks;
const mainsPosition = _myPositionFromDesignations(designation, mainsDesignation);
if (pref_paper_position_1.default.LEFT === mainsPosition)
this._addLeftSupaRepealed(supa);
else
this._addRightSupaRepealed(supa);
if (failed)
this._middle.addValueRepealed(value);
return this;
}
addNewRefa() {
this._middle.addRefa();
return this;
}
hasUnplayedRefa() {
return this._middle.hasOpenRefa(pref_paper_position_1.default.MIDDLE);
}
_markPlayedRefaPassed(position) {
if (this._middle.hasOpenRefa(position))
this._middle.markPlayedRefaPassed(position);
return this;
}
_markPlayedRefaFailed(position) {
if (this._middle.hasOpenRefa(position))
this._middle.markPlayedRefaFailed(position);
return this;
}
_addLeftSupa(value) {
this._left.addValue(value);
return this;
}
_addLeftSupaRepealed(value) {
this._left.addValueRepealed(value);
return this;
}
_addRightSupa(value) {
this._right.addValue(value);
return this;
}
_addRightSupaRepealed(value) {
this._right.addValueRepealed(value);
return this;
}
get designation() {
return this._designation;
}
get left() {
return this._left.value;
}
get middle() {
return this._middle.value;
}
get right() {
return this._right.value;
}
get mini() {
return {
designation: this._designation,
left: this.left,
middle: this.middle,
right: this.right
};
}
get json() {
return {
designation: this._designation,
left: this._left.json,
middle: this._middle.json,
right: this._right.json
};
}
}
exports.default = PrefPaper;
//# sourceMappingURL=pref.paper.js.map