@gamepark/odin 0.0.1 → 0.0.2
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/OdinRules.d.ts +4 -1
- package/dist/OdinRules.js +5 -0
- package/dist/OdinSetup.js +1 -0
- package/dist/rules/EndOfRoundRule.d.ts +1 -0
- package/dist/rules/EndOfRoundRule.js +54 -2
- package/dist/rules/Memory.d.ts +3 -1
- package/dist/rules/Memory.js +2 -0
- package/dist/rules/helper/ScoreHelper.d.ts +10 -0
- package/dist/rules/helper/ScoreHelper.js +56 -0
- package/package.json +2 -2
package/dist/OdinRules.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CustomMove, MaterialGame, MaterialMove, PlayMoveContext, PositiveSequenceStrategy, SecretMaterialRules, TimeLimit } from '@gamepark/rules-api';
|
|
2
|
+
import { CompetitiveScore } from '../../../rules-api';
|
|
2
3
|
import { LocationType } from './material/LocationType';
|
|
3
4
|
import { MaterialType } from './material/MaterialType';
|
|
4
5
|
import { PlayerId } from './PlayerId';
|
|
@@ -6,7 +7,7 @@ import { DealCardsRule } from './rules/DealCardsRule';
|
|
|
6
7
|
import { EndOfRoundRule } from './rules/EndOfRoundRule';
|
|
7
8
|
import { PickCardRule } from './rules/PickCardRule';
|
|
8
9
|
import { PlayCardsRule } from './rules/PlayCardsRule';
|
|
9
|
-
export declare class OdinRules extends SecretMaterialRules<PlayerId, MaterialType, LocationType> implements TimeLimit<MaterialGame<PlayerId, MaterialType, LocationType>, MaterialMove<PlayerId, MaterialType, LocationType
|
|
10
|
+
export declare class OdinRules extends SecretMaterialRules<PlayerId, MaterialType, LocationType> implements TimeLimit<MaterialGame<PlayerId, MaterialType, LocationType>, MaterialMove<PlayerId, MaterialType, LocationType>>, CompetitiveScore<MaterialGame<PlayerId, MaterialType, LocationType>, MaterialMove<PlayerId, MaterialType, LocationType>, PlayerId> {
|
|
10
11
|
rules: {
|
|
11
12
|
1: typeof PlayCardsRule;
|
|
12
13
|
4: typeof DealCardsRule;
|
|
@@ -29,5 +30,7 @@ export declare class OdinRules extends SecretMaterialRules<PlayerId, MaterialTyp
|
|
|
29
30
|
};
|
|
30
31
|
restoreTransientState(previousState: MaterialGame): void;
|
|
31
32
|
giveTime(): number;
|
|
33
|
+
getScore(playerId: PlayerId): number;
|
|
34
|
+
rankByLowerScore: boolean;
|
|
32
35
|
onCustomMove(move: CustomMove, context: PlayMoveContext): MaterialMove<number, MaterialType, LocationType, number>[];
|
|
33
36
|
}
|
package/dist/OdinRules.js
CHANGED
|
@@ -22,6 +22,7 @@ var MaterialType_1 = require("./material/MaterialType");
|
|
|
22
22
|
var CustomMoveType_1 = require("./rules/CustomMoveType");
|
|
23
23
|
var DealCardsRule_1 = require("./rules/DealCardsRule");
|
|
24
24
|
var EndOfRoundRule_1 = require("./rules/EndOfRoundRule");
|
|
25
|
+
var ScoreHelper_1 = require("./rules/helper/ScoreHelper");
|
|
25
26
|
var Memory_1 = require("./rules/Memory");
|
|
26
27
|
var PickCardRule_1 = require("./rules/PickCardRule");
|
|
27
28
|
var PlayCardsRule_1 = require("./rules/PlayCardsRule");
|
|
@@ -51,6 +52,7 @@ var OdinRules = (function (_super) {
|
|
|
51
52
|
_e[LocationType_1.LocationType.Discard] = new rules_api_1.PositiveSequenceStrategy(),
|
|
52
53
|
_e),
|
|
53
54
|
_d);
|
|
55
|
+
_this.rankByLowerScore = true;
|
|
54
56
|
return _this;
|
|
55
57
|
}
|
|
56
58
|
OdinRules.prototype.restoreTransientState = function (previousState) {
|
|
@@ -60,6 +62,9 @@ var OdinRules = (function (_super) {
|
|
|
60
62
|
OdinRules.prototype.giveTime = function () {
|
|
61
63
|
return 60;
|
|
62
64
|
};
|
|
65
|
+
OdinRules.prototype.getScore = function (playerId) {
|
|
66
|
+
return new ScoreHelper_1.ScoreHelper(this.game, playerId).score;
|
|
67
|
+
};
|
|
63
68
|
OdinRules.prototype.onCustomMove = function (move, context) {
|
|
64
69
|
if (move.type === CustomMoveType_1.CustomMoveType.SortHand) {
|
|
65
70
|
this.memorize(Memory_1.Memory.HandSort, move.data);
|
package/dist/OdinSetup.js
CHANGED
|
@@ -36,6 +36,7 @@ var OdinSetup = (function (_super) {
|
|
|
36
36
|
};
|
|
37
37
|
OdinSetup.prototype.start = function () {
|
|
38
38
|
this.memorize(Memory_1.Memory.FirstPlayer, this.game.players[0]);
|
|
39
|
+
this.memorize(Memory_1.Memory.Round, 1);
|
|
39
40
|
this.startRule(RuleId_1.RuleId.DealCards);
|
|
40
41
|
};
|
|
41
42
|
return OdinSetup;
|
|
@@ -2,6 +2,7 @@ import { ItemMove, MaterialMove, MaterialRulesPart } from '@gamepark/rules-api';
|
|
|
2
2
|
import { PlayerId } from '../PlayerId';
|
|
3
3
|
export declare class EndOfRoundRule extends MaterialRulesPart {
|
|
4
4
|
onRuleStart(): MaterialMove<number, number, number, number>[];
|
|
5
|
+
onRoundEnd(): MaterialMove[];
|
|
5
6
|
get deck(): import("@gamepark/rules-api").MaterialDeck<number, number, number>;
|
|
6
7
|
get groupToDeckMove(): MaterialMove<number, number, number, number>[];
|
|
7
8
|
afterItemMove(move: ItemMove): MaterialMove<number, number, number, number>[];
|
|
@@ -39,9 +39,24 @@ 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
|
+
};
|
|
42
56
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
57
|
exports.EndOfRoundRule = void 0;
|
|
44
58
|
var rules_api_1 = require("@gamepark/rules-api");
|
|
59
|
+
var sum_1 = __importDefault(require("lodash/sum"));
|
|
45
60
|
var LocationType_1 = require("../material/LocationType");
|
|
46
61
|
var MaterialType_1 = require("../material/MaterialType");
|
|
47
62
|
var Memory_1 = require("./Memory");
|
|
@@ -52,10 +67,47 @@ var EndOfRoundRule = (function (_super) {
|
|
|
52
67
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
53
68
|
}
|
|
54
69
|
EndOfRoundRule.prototype.onRuleStart = function () {
|
|
55
|
-
var moves =
|
|
56
|
-
|
|
70
|
+
var moves = this.onRoundEnd();
|
|
71
|
+
if (!moves.length) {
|
|
72
|
+
moves.push.apply(moves, __spreadArray([], __read(this.groupToDeckMove), false));
|
|
73
|
+
}
|
|
57
74
|
return moves;
|
|
58
75
|
};
|
|
76
|
+
EndOfRoundRule.prototype.onRoundEnd = function () {
|
|
77
|
+
var e_1, _a;
|
|
78
|
+
var ended = false;
|
|
79
|
+
var _loop_1 = function (player) {
|
|
80
|
+
var hand = this_1.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(player);
|
|
81
|
+
this_1.memorize(Memory_1.Memory.PlayerScore, function (s) {
|
|
82
|
+
if (s === void 0) { s = []; }
|
|
83
|
+
return __spreadArray(__spreadArray([], __read(s), false), [hand.length], false);
|
|
84
|
+
}, player);
|
|
85
|
+
var score = (0, sum_1.default)(this_1.remind(Memory_1.Memory.PlayerScore, player));
|
|
86
|
+
if (!ended && score >= 15)
|
|
87
|
+
ended = true;
|
|
88
|
+
};
|
|
89
|
+
var this_1 = this;
|
|
90
|
+
try {
|
|
91
|
+
for (var _b = __values(this.game.players), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
92
|
+
var player = _c.value;
|
|
93
|
+
_loop_1(player);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
97
|
+
finally {
|
|
98
|
+
try {
|
|
99
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
100
|
+
}
|
|
101
|
+
finally { if (e_1) throw e_1.error; }
|
|
102
|
+
}
|
|
103
|
+
if (!ended) {
|
|
104
|
+
this.memorize(Memory_1.Memory.Round, function (r) {
|
|
105
|
+
return r + 1;
|
|
106
|
+
});
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
return [this.endGame()];
|
|
110
|
+
};
|
|
59
111
|
Object.defineProperty(EndOfRoundRule.prototype, "deck", {
|
|
60
112
|
get: function () {
|
|
61
113
|
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Deck).deck();
|
package/dist/rules/Memory.d.ts
CHANGED
package/dist/rules/Memory.js
CHANGED
|
@@ -7,4 +7,6 @@ var Memory;
|
|
|
7
7
|
Memory[Memory["FirstPlayer"] = 2] = "FirstPlayer";
|
|
8
8
|
Memory[Memory["LastPlayerThatPlay"] = 3] = "LastPlayerThatPlay";
|
|
9
9
|
Memory[Memory["HandSort"] = 4] = "HandSort";
|
|
10
|
+
Memory[Memory["Round"] = 5] = "Round";
|
|
11
|
+
Memory[Memory["PlayerScore"] = 6] = "PlayerScore";
|
|
10
12
|
})(Memory = exports.Memory || (exports.Memory = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MaterialGame, MaterialRulesPart } from '@gamepark/rules-api';
|
|
2
|
+
import { PlayerId } from '../../PlayerId';
|
|
3
|
+
export declare class ScoreHelper extends MaterialRulesPart {
|
|
4
|
+
readonly player: PlayerId;
|
|
5
|
+
constructor(game: MaterialGame, player: PlayerId);
|
|
6
|
+
isWinningRound(round: number): boolean;
|
|
7
|
+
get score(): number;
|
|
8
|
+
getRoundScore(round: number): number;
|
|
9
|
+
get isWinning(): boolean;
|
|
10
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.ScoreHelper = void 0;
|
|
22
|
+
var rules_api_1 = require("@gamepark/rules-api");
|
|
23
|
+
var sum_1 = __importDefault(require("lodash/sum"));
|
|
24
|
+
var LocationType_1 = require("../../material/LocationType");
|
|
25
|
+
var MaterialType_1 = require("../../material/MaterialType");
|
|
26
|
+
var Memory_1 = require("../Memory");
|
|
27
|
+
var ScoreHelper = (function (_super) {
|
|
28
|
+
__extends(ScoreHelper, _super);
|
|
29
|
+
function ScoreHelper(game, player) {
|
|
30
|
+
var _this = _super.call(this, game) || this;
|
|
31
|
+
_this.player = player;
|
|
32
|
+
return _this;
|
|
33
|
+
}
|
|
34
|
+
ScoreHelper.prototype.isWinningRound = function (round) {
|
|
35
|
+
return this.getRoundScore(round) === 0;
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(ScoreHelper.prototype, "score", {
|
|
38
|
+
get: function () {
|
|
39
|
+
return (0, sum_1.default)(this.remind(Memory_1.Memory.PlayerScore, this.player));
|
|
40
|
+
},
|
|
41
|
+
enumerable: false,
|
|
42
|
+
configurable: true
|
|
43
|
+
});
|
|
44
|
+
ScoreHelper.prototype.getRoundScore = function (round) {
|
|
45
|
+
return this.remind(Memory_1.Memory.PlayerScore, this.player)[round];
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(ScoreHelper.prototype, "isWinning", {
|
|
48
|
+
get: function () {
|
|
49
|
+
return this.material(MaterialType_1.MaterialType.Card).location(LocationType_1.LocationType.Hand).player(this.player).length === 0;
|
|
50
|
+
},
|
|
51
|
+
enumerable: false,
|
|
52
|
+
configurable: true
|
|
53
|
+
});
|
|
54
|
+
return ScoreHelper;
|
|
55
|
+
}(rules_api_1.MaterialRulesPart));
|
|
56
|
+
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.2",
|
|
4
4
|
"description": "The rules of Odin adapted for Game Park",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"i18next": "^22.0.3",
|
|
30
30
|
"lodash": "^4.17.21"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "c5272c1052e76fc49097aa007043479a237ac668"
|
|
33
33
|
}
|