UNPKG

preferans-paper-js

Version:
144 lines 5.53 kB
'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