@gamepark/odin 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChangePlayerRule.d.ts +6 -0
- package/dist/ChangePlayerRule.js +62 -0
- package/dist/OdinRules.js +1 -1
- package/dist/rules/EndOfRoundRule.js +2 -42
- package/dist/rules/PickCardRule.js +5 -0
- package/dist/rules/PlayCardsRule.d.ts +2 -1
- package/dist/rules/PlayCardsRule.js +12 -7
- package/dist/rules/helper/EndHelper.d.ts +4 -0
- package/dist/rules/helper/EndHelper.js +103 -0
- package/dist/rules/helper/ScoreHelper.d.ts +0 -1
- package/dist/rules/helper/ScoreHelper.js +0 -9
- package/package.json +3 -3
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MaterialMove, PlayerTurnRule } from '@gamepark/rules-api';
|
|
2
|
+
export declare class ChangePlayerRule extends PlayerTurnRule {
|
|
3
|
+
onRuleStart(): MaterialMove<number, number, number, number>[];
|
|
4
|
+
get currentTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
5
|
+
get nextTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ChangePlayerRule = void 0;
|
|
19
|
+
var rules_api_1 = require("@gamepark/rules-api");
|
|
20
|
+
var LocationType_1 = require("./material/LocationType");
|
|
21
|
+
var MaterialType_1 = require("./material/MaterialType");
|
|
22
|
+
var RuleId_1 = require("./rules/RuleId");
|
|
23
|
+
var ChangePlayerRule = (function (_super) {
|
|
24
|
+
__extends(ChangePlayerRule, _super);
|
|
25
|
+
function ChangePlayerRule() {
|
|
26
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
27
|
+
}
|
|
28
|
+
ChangePlayerRule.prototype.onRuleStart = function () {
|
|
29
|
+
var moves = [];
|
|
30
|
+
var currentTable = this.currentTable;
|
|
31
|
+
if (currentTable.length) {
|
|
32
|
+
moves.push(this.currentTable.moveItemsAtOnce({
|
|
33
|
+
type: LocationType_1.LocationType.Discard
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
var nextTable = this.nextTable;
|
|
37
|
+
if (nextTable.length) {
|
|
38
|
+
moves.push(nextTable.moveItemsAtOnce({
|
|
39
|
+
type: LocationType_1.LocationType.MiddleOfTable,
|
|
40
|
+
id: LocationType_1.MiddleOfTable.Current
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
moves.push(this.startPlayerTurn(RuleId_1.RuleId.PlayCards, this.nextPlayer));
|
|
44
|
+
return moves;
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(ChangePlayerRule.prototype, "currentTable", {
|
|
47
|
+
get: function () {
|
|
48
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.MiddleOfTable).locationId(LocationType_1.MiddleOfTable.Current);
|
|
49
|
+
},
|
|
50
|
+
enumerable: false,
|
|
51
|
+
configurable: true
|
|
52
|
+
});
|
|
53
|
+
Object.defineProperty(ChangePlayerRule.prototype, "nextTable", {
|
|
54
|
+
get: function () {
|
|
55
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.MiddleOfTable).locationId(LocationType_1.MiddleOfTable.Next);
|
|
56
|
+
},
|
|
57
|
+
enumerable: false,
|
|
58
|
+
configurable: true
|
|
59
|
+
});
|
|
60
|
+
return ChangePlayerRule;
|
|
61
|
+
}(rules_api_1.PlayerTurnRule));
|
|
62
|
+
exports.ChangePlayerRule = ChangePlayerRule;
|
package/dist/OdinRules.js
CHANGED
|
@@ -62,7 +62,7 @@ var OdinRules = (function (_super) {
|
|
|
62
62
|
this.memorize(Memory_1.Memory.HandSort, previousState.memory[Memory_1.Memory.HandSort]);
|
|
63
63
|
};
|
|
64
64
|
OdinRules.prototype.giveTime = function () {
|
|
65
|
-
return
|
|
65
|
+
return 30;
|
|
66
66
|
};
|
|
67
67
|
OdinRules.prototype.getScore = function (playerId) {
|
|
68
68
|
return new ScoreHelper_1.ScoreHelper(this.game, playerId).score;
|
|
@@ -39,27 +39,13 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
39
39
|
}
|
|
40
40
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
41
41
|
};
|
|
42
|
-
var __values = (this && this.__values) || function(o) {
|
|
43
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
44
|
-
if (m) return m.call(o);
|
|
45
|
-
if (o && typeof o.length === "number") return {
|
|
46
|
-
next: function () {
|
|
47
|
-
if (o && i >= o.length) o = void 0;
|
|
48
|
-
return { value: o && o[i++], done: !o };
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
52
|
-
};
|
|
53
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
|
-
};
|
|
56
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
43
|
exports.EndOfRoundRule = void 0;
|
|
58
44
|
var rules_api_1 = require("@gamepark/rules-api");
|
|
59
|
-
var sum_1 = __importDefault(require("lodash/sum"));
|
|
60
45
|
var LocationType_1 = require("../material/LocationType");
|
|
61
46
|
var MaterialType_1 = require("../material/MaterialType");
|
|
62
47
|
var CustomMoveType_1 = require("./CustomMoveType");
|
|
48
|
+
var EndHelper_1 = require("./helper/EndHelper");
|
|
63
49
|
var Memory_1 = require("./Memory");
|
|
64
50
|
var RuleId_1 = require("./RuleId");
|
|
65
51
|
var EndOfRoundRule = (function (_super) {
|
|
@@ -76,33 +62,7 @@ var EndOfRoundRule = (function (_super) {
|
|
|
76
62
|
return moves;
|
|
77
63
|
};
|
|
78
64
|
EndOfRoundRule.prototype.onRoundEnd = function () {
|
|
79
|
-
|
|
80
|
-
var ended = false;
|
|
81
|
-
var _loop_1 = function (player) {
|
|
82
|
-
var hand = this_1.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(player);
|
|
83
|
-
this_1.memorize(Memory_1.Memory.PlayerScore, function (s) {
|
|
84
|
-
if (s === void 0) { s = []; }
|
|
85
|
-
return __spreadArray(__spreadArray([], __read(s), false), [hand.length], false);
|
|
86
|
-
}, player);
|
|
87
|
-
var score = (0, sum_1.default)(this_1.remind(Memory_1.Memory.PlayerScore, player));
|
|
88
|
-
if (!ended && score >= 15)
|
|
89
|
-
ended = true;
|
|
90
|
-
};
|
|
91
|
-
var this_1 = this;
|
|
92
|
-
try {
|
|
93
|
-
for (var _b = __values(this.game.players), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
94
|
-
var player = _c.value;
|
|
95
|
-
_loop_1(player);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
99
|
-
finally {
|
|
100
|
-
try {
|
|
101
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
102
|
-
}
|
|
103
|
-
finally { if (e_1) throw e_1.error; }
|
|
104
|
-
}
|
|
105
|
-
if (!ended) {
|
|
65
|
+
if (!new EndHelper_1.EndHelper(this.game).isEnded) {
|
|
106
66
|
this.memorize(Memory_1.Memory.Round, function (r) {
|
|
107
67
|
return r + 1;
|
|
108
68
|
});
|
|
@@ -57,6 +57,11 @@ var PickCardRule = (function (_super) {
|
|
|
57
57
|
return [this.startRule(RuleId_1.RuleId.EndOfRound)];
|
|
58
58
|
}
|
|
59
59
|
var moves = [this.customMove(CustomMoveType_1.CustomMoveType.TurnTempo)];
|
|
60
|
+
var playerMoves = this.getPlayerMoves();
|
|
61
|
+
if (playerMoves.length === 1 && (0, rules_api_1.isMoveItemType)(MaterialType_1.MaterialType.Card)(playerMoves[0]) && playerMoves[0].location.type === LocationType_1.LocationType.Hand) {
|
|
62
|
+
moves.push(playerMoves[0]);
|
|
63
|
+
return moves;
|
|
64
|
+
}
|
|
60
65
|
if (this.getPlayerMoves().length)
|
|
61
66
|
return moves;
|
|
62
67
|
moves.push.apply(moves, __spreadArray([], __read(this.goToNextRule()), false));
|
|
@@ -2,14 +2,15 @@ import { CustomMove, ItemMove, MaterialMove } from '@gamepark/rules-api';
|
|
|
2
2
|
import { Card } from '../material/Card';
|
|
3
3
|
import { BasePlayerTurn } from './BasePlayerTurn';
|
|
4
4
|
export declare class PlayCardsRule extends BasePlayerTurn {
|
|
5
|
+
onRuleStart(): CustomMove<number>[];
|
|
5
6
|
getPlayerMoves(): MaterialMove<number, number, number, number>[];
|
|
7
|
+
getAvailableMoves(): MaterialMove<number, number, number, number>[];
|
|
6
8
|
get tableValue(): number;
|
|
7
9
|
onCustomMove(move: CustomMove): MaterialMove<number, number, number, number>[];
|
|
8
10
|
afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
|
|
9
11
|
goToNextPlayer(): MaterialMove<number, number, number, number>[];
|
|
10
12
|
get firstPlayer(): number;
|
|
11
13
|
get table(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
12
|
-
get nextTable(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
13
14
|
get playableCards(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
14
15
|
get hand(): import("@gamepark/rules-api").Material<number, number, number>;
|
|
15
16
|
kCombinations<T>(arr: T[], k: number): T[][];
|
|
@@ -73,7 +73,19 @@ var PlayCardsRule = (function (_super) {
|
|
|
73
73
|
function PlayCardsRule() {
|
|
74
74
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
75
75
|
}
|
|
76
|
+
PlayCardsRule.prototype.onRuleStart = function () {
|
|
77
|
+
var table = this.table;
|
|
78
|
+
var tableSize = table.length;
|
|
79
|
+
var hand = this.playableCards;
|
|
80
|
+
if (hand.length < tableSize) {
|
|
81
|
+
return [this.customMove(CustomMoveType_1.CustomMoveType.Pass)];
|
|
82
|
+
}
|
|
83
|
+
return [];
|
|
84
|
+
};
|
|
76
85
|
PlayCardsRule.prototype.getPlayerMoves = function () {
|
|
86
|
+
return this.getAvailableMoves();
|
|
87
|
+
};
|
|
88
|
+
PlayCardsRule.prototype.getAvailableMoves = function () {
|
|
77
89
|
var playableCards = this.playableCards;
|
|
78
90
|
var table = this.table;
|
|
79
91
|
var tableSize = table.length;
|
|
@@ -165,13 +177,6 @@ var PlayCardsRule = (function (_super) {
|
|
|
165
177
|
enumerable: false,
|
|
166
178
|
configurable: true
|
|
167
179
|
});
|
|
168
|
-
Object.defineProperty(PlayCardsRule.prototype, "nextTable", {
|
|
169
|
-
get: function () {
|
|
170
|
-
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.MiddleOfTable).locationId(LocationType_1.MiddleOfTable.Next);
|
|
171
|
-
},
|
|
172
|
-
enumerable: false,
|
|
173
|
-
configurable: true
|
|
174
|
-
});
|
|
175
180
|
Object.defineProperty(PlayCardsRule.prototype, "playableCards", {
|
|
176
181
|
get: function () {
|
|
177
182
|
var _this = this;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
18
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
19
|
+
if (!m) return o;
|
|
20
|
+
var i = m.call(o), r, ar = [], e;
|
|
21
|
+
try {
|
|
22
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
23
|
+
}
|
|
24
|
+
catch (error) { e = { error: error }; }
|
|
25
|
+
finally {
|
|
26
|
+
try {
|
|
27
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
28
|
+
}
|
|
29
|
+
finally { if (e) throw e.error; }
|
|
30
|
+
}
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
34
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
35
|
+
if (ar || !(i in from)) {
|
|
36
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
37
|
+
ar[i] = from[i];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
41
|
+
};
|
|
42
|
+
var __values = (this && this.__values) || function(o) {
|
|
43
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
44
|
+
if (m) return m.call(o);
|
|
45
|
+
if (o && typeof o.length === "number") return {
|
|
46
|
+
next: function () {
|
|
47
|
+
if (o && i >= o.length) o = void 0;
|
|
48
|
+
return { value: o && o[i++], done: !o };
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
52
|
+
};
|
|
53
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.EndHelper = void 0;
|
|
58
|
+
var rules_api_1 = require("@gamepark/rules-api");
|
|
59
|
+
var sum_1 = __importDefault(require("lodash/sum"));
|
|
60
|
+
var LocationType_1 = require("../../material/LocationType");
|
|
61
|
+
var MaterialType_1 = require("../../material/MaterialType");
|
|
62
|
+
var Memory_1 = require("../Memory");
|
|
63
|
+
var EndHelper = (function (_super) {
|
|
64
|
+
__extends(EndHelper, _super);
|
|
65
|
+
function EndHelper() {
|
|
66
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
67
|
+
}
|
|
68
|
+
Object.defineProperty(EndHelper.prototype, "isEnded", {
|
|
69
|
+
get: function () {
|
|
70
|
+
var e_1, _a;
|
|
71
|
+
var ended = false;
|
|
72
|
+
var _loop_1 = function (player) {
|
|
73
|
+
var hand = this_1.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(player);
|
|
74
|
+
this_1.memorize(Memory_1.Memory.PlayerScore, function (s) {
|
|
75
|
+
if (s === void 0) { s = []; }
|
|
76
|
+
return __spreadArray(__spreadArray([], __read(s), false), [hand.length], false);
|
|
77
|
+
}, player);
|
|
78
|
+
var score = (0, sum_1.default)(this_1.remind(Memory_1.Memory.PlayerScore, player));
|
|
79
|
+
if (!ended && score >= 15)
|
|
80
|
+
ended = true;
|
|
81
|
+
};
|
|
82
|
+
var this_1 = this;
|
|
83
|
+
try {
|
|
84
|
+
for (var _b = __values(this.game.players), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
85
|
+
var player = _c.value;
|
|
86
|
+
_loop_1(player);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
90
|
+
finally {
|
|
91
|
+
try {
|
|
92
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
93
|
+
}
|
|
94
|
+
finally { if (e_1) throw e_1.error; }
|
|
95
|
+
}
|
|
96
|
+
return ended;
|
|
97
|
+
},
|
|
98
|
+
enumerable: false,
|
|
99
|
+
configurable: true
|
|
100
|
+
});
|
|
101
|
+
return EndHelper;
|
|
102
|
+
}(rules_api_1.MaterialRulesPart));
|
|
103
|
+
exports.EndHelper = EndHelper;
|
|
@@ -21,8 +21,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
21
21
|
exports.ScoreHelper = void 0;
|
|
22
22
|
var rules_api_1 = require("@gamepark/rules-api");
|
|
23
23
|
var sum_1 = __importDefault(require("lodash/sum"));
|
|
24
|
-
var LocationType_1 = require("../../material/LocationType");
|
|
25
|
-
var MaterialType_1 = require("../../material/MaterialType");
|
|
26
24
|
var Memory_1 = require("../Memory");
|
|
27
25
|
var ScoreHelper = (function (_super) {
|
|
28
26
|
__extends(ScoreHelper, _super);
|
|
@@ -45,13 +43,6 @@ var ScoreHelper = (function (_super) {
|
|
|
45
43
|
var _a;
|
|
46
44
|
return (_a = this.remind(Memory_1.Memory.PlayerScore, this.player)) === null || _a === void 0 ? void 0 : _a[round - 1];
|
|
47
45
|
};
|
|
48
|
-
Object.defineProperty(ScoreHelper.prototype, "isWinning", {
|
|
49
|
-
get: function () {
|
|
50
|
-
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(this.player).length === 0;
|
|
51
|
-
},
|
|
52
|
-
enumerable: false,
|
|
53
|
-
configurable: true
|
|
54
|
-
});
|
|
55
46
|
return ScoreHelper;
|
|
56
47
|
}(rules_api_1.MaterialRulesPart));
|
|
57
48
|
exports.ScoreHelper = ScoreHelper;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gamepark/odin",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "The rules of Odin adapted for Game Park",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"lodash": ">=4.17"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@gamepark/rules-api": "~6.
|
|
27
|
+
"@gamepark/rules-api": "~6.38.5",
|
|
28
28
|
"@types/lodash": "^4.17.7",
|
|
29
29
|
"i18next": "^22.0.3",
|
|
30
30
|
"lodash": "^4.17.21"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "8633d0fca555c2e0b391a4c64476d32e062b9763"
|
|
33
33
|
}
|