@gamepark/zenith 0.0.1

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.
Files changed (125) hide show
  1. package/dist/PlayerId.d.ts +1 -0
  2. package/dist/PlayerId.js +2 -0
  3. package/dist/TeamColor.d.ts +9 -0
  4. package/dist/TeamColor.js +16 -0
  5. package/dist/ZenithOptions.d.ts +5 -0
  6. package/dist/ZenithOptions.js +4 -0
  7. package/dist/ZenithRules.d.ts +68 -0
  8. package/dist/ZenithRules.js +128 -0
  9. package/dist/ZenithSetup.d.ts +24 -0
  10. package/dist/ZenithSetup.js +316 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.js +9 -0
  13. package/dist/material/Agent.d.ts +93 -0
  14. package/dist/material/Agent.js +98 -0
  15. package/dist/material/Agents.d.ts +102 -0
  16. package/dist/material/Agents.js +2305 -0
  17. package/dist/material/Bonus.d.ts +12 -0
  18. package/dist/material/Bonus.js +34 -0
  19. package/dist/material/Bonuses.d.ts +14 -0
  20. package/dist/material/Bonuses.js +63 -0
  21. package/dist/material/Credit.d.ts +6 -0
  22. package/dist/material/Credit.js +11 -0
  23. package/dist/material/Faction.d.ts +6 -0
  24. package/dist/material/Faction.js +11 -0
  25. package/dist/material/Influence.d.ts +8 -0
  26. package/dist/material/Influence.js +13 -0
  27. package/dist/material/LocationType.d.ts +23 -0
  28. package/dist/material/LocationType.js +27 -0
  29. package/dist/material/MaterialType.d.ts +12 -0
  30. package/dist/material/MaterialType.js +16 -0
  31. package/dist/material/effect/Effect.d.ts +144 -0
  32. package/dist/material/effect/Effect.js +14 -0
  33. package/dist/material/effect/EffectType.d.ts +23 -0
  34. package/dist/material/effect/EffectType.js +27 -0
  35. package/dist/rules/CustomMoveType.d.ts +8 -0
  36. package/dist/rules/CustomMoveType.js +12 -0
  37. package/dist/rules/DiscardActionRule.d.ts +8 -0
  38. package/dist/rules/DiscardActionRule.js +84 -0
  39. package/dist/rules/Memory.d.ts +25 -0
  40. package/dist/rules/Memory.js +19 -0
  41. package/dist/rules/MulliganRule.d.ts +12 -0
  42. package/dist/rules/MulliganRule.js +138 -0
  43. package/dist/rules/PlayCardRule.d.ts +15 -0
  44. package/dist/rules/PlayCardRule.js +147 -0
  45. package/dist/rules/RefillRule.d.ts +17 -0
  46. package/dist/rules/RefillRule.js +211 -0
  47. package/dist/rules/RuleId.d.ts +27 -0
  48. package/dist/rules/RuleId.js +31 -0
  49. package/dist/rules/discard-action/DiplomacyActions.d.ts +3 -0
  50. package/dist/rules/discard-action/DiplomacyActions.js +39 -0
  51. package/dist/rules/discard-action/DiplomacyBoardRule.d.ts +9 -0
  52. package/dist/rules/discard-action/DiplomacyBoardRule.js +68 -0
  53. package/dist/rules/discard-action/TechnologyActions.d.ts +3 -0
  54. package/dist/rules/discard-action/TechnologyActions.js +187 -0
  55. package/dist/rules/discard-action/TechnologyBoardRule.d.ts +8 -0
  56. package/dist/rules/discard-action/TechnologyBoardRule.js +109 -0
  57. package/dist/rules/effect/ChoiceRule.d.ts +12 -0
  58. package/dist/rules/effect/ChoiceRule.js +91 -0
  59. package/dist/rules/effect/ConditionalRule.d.ts +17 -0
  60. package/dist/rules/effect/ConditionalRule.js +197 -0
  61. package/dist/rules/effect/DevelopTechnologyRule.d.ts +11 -0
  62. package/dist/rules/effect/DevelopTechnologyRule.js +133 -0
  63. package/dist/rules/effect/DiscardRule.d.ts +18 -0
  64. package/dist/rules/effect/DiscardRule.js +107 -0
  65. package/dist/rules/effect/EffectRule.d.ts +27 -0
  66. package/dist/rules/effect/EffectRule.js +161 -0
  67. package/dist/rules/effect/ExileRule.d.ts +22 -0
  68. package/dist/rules/effect/ExileRule.js +182 -0
  69. package/dist/rules/effect/GiveCreditRule.d.ts +13 -0
  70. package/dist/rules/effect/GiveCreditRule.js +79 -0
  71. package/dist/rules/effect/GiveInfluenceRule.d.ts +10 -0
  72. package/dist/rules/effect/GiveInfluenceRule.js +119 -0
  73. package/dist/rules/effect/GiveLeaderBadgeRule.d.ts +9 -0
  74. package/dist/rules/effect/GiveLeaderBadgeRule.js +54 -0
  75. package/dist/rules/effect/GiveZenithiumRule.d.ts +9 -0
  76. package/dist/rules/effect/GiveZenithiumRule.js +85 -0
  77. package/dist/rules/effect/MobilizeRule.d.ts +18 -0
  78. package/dist/rules/effect/MobilizeRule.js +117 -0
  79. package/dist/rules/effect/ResetInfluenceRule.d.ts +9 -0
  80. package/dist/rules/effect/ResetInfluenceRule.js +63 -0
  81. package/dist/rules/effect/SpendCreditRule.d.ts +16 -0
  82. package/dist/rules/effect/SpendCreditRule.js +109 -0
  83. package/dist/rules/effect/SpendZenithiumRule.d.ts +17 -0
  84. package/dist/rules/effect/SpendZenithiumRule.js +116 -0
  85. package/dist/rules/effect/StealCreditRule.d.ts +7 -0
  86. package/dist/rules/effect/StealCreditRule.js +67 -0
  87. package/dist/rules/effect/TakeBonusRule.d.ts +11 -0
  88. package/dist/rules/effect/TakeBonusRule.js +98 -0
  89. package/dist/rules/effect/TakeLeaderBadgeRule.d.ts +9 -0
  90. package/dist/rules/effect/TakeLeaderBadgeRule.js +102 -0
  91. package/dist/rules/effect/TakeTechnologyBonusTokenRule.d.ts +11 -0
  92. package/dist/rules/effect/TakeTechnologyBonusTokenRule.js +122 -0
  93. package/dist/rules/effect/TransferRule.d.ts +19 -0
  94. package/dist/rules/effect/TransferRule.js +104 -0
  95. package/dist/rules/effect/WinCreditRule.d.ts +13 -0
  96. package/dist/rules/effect/WinCreditRule.js +142 -0
  97. package/dist/rules/effect/WinInfluenceRule.d.ts +23 -0
  98. package/dist/rules/effect/WinInfluenceRule.js +328 -0
  99. package/dist/rules/effect/WinZenithiumRule.d.ts +9 -0
  100. package/dist/rules/effect/WinZenithiumRule.js +92 -0
  101. package/dist/rules/effect/index.d.ts +19 -0
  102. package/dist/rules/effect/index.js +35 -0
  103. package/dist/rules/helper/BonusHelper.d.ts +15 -0
  104. package/dist/rules/helper/BonusHelper.js +86 -0
  105. package/dist/rules/helper/CreditHelper.d.ts +9 -0
  106. package/dist/rules/helper/CreditHelper.js +45 -0
  107. package/dist/rules/helper/EffectHelper.d.ts +16 -0
  108. package/dist/rules/helper/EffectHelper.js +133 -0
  109. package/dist/rules/helper/EffectRuleIds.d.ts +3 -0
  110. package/dist/rules/helper/EffectRuleIds.js +29 -0
  111. package/dist/rules/helper/EndGameHelper.d.ts +13 -0
  112. package/dist/rules/helper/EndGameHelper.js +70 -0
  113. package/dist/rules/helper/InfluenceHelper.d.ts +13 -0
  114. package/dist/rules/helper/InfluenceHelper.js +47 -0
  115. package/dist/rules/helper/MobilizeHelper.d.ts +10 -0
  116. package/dist/rules/helper/MobilizeHelper.js +56 -0
  117. package/dist/rules/helper/PlanetHelper.d.ts +19 -0
  118. package/dist/rules/helper/PlanetHelper.js +104 -0
  119. package/dist/rules/helper/PlayerHelper.d.ts +12 -0
  120. package/dist/rules/helper/PlayerHelper.js +61 -0
  121. package/dist/rules/helper/TechnologyHelper.d.ts +4 -0
  122. package/dist/rules/helper/TechnologyHelper.js +96 -0
  123. package/dist/rules/helper/ZenithiumHelper.d.ts +10 -0
  124. package/dist/rules/helper/ZenithiumHelper.js +59 -0
  125. package/package.json +33 -0
@@ -0,0 +1,133 @@
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 __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getEffectRule = exports.EffectHelper = void 0;
30
+ var rules_api_1 = require("@gamepark/rules-api");
31
+ var Agents_1 = require("../../material/Agents");
32
+ var EffectType_1 = require("../../material/effect/EffectType");
33
+ var MaterialType_1 = require("../../material/MaterialType");
34
+ var effect_1 = require("../effect");
35
+ var SpendZenithiumRule_1 = require("../effect/SpendZenithiumRule");
36
+ var StealCreditRule_1 = require("../effect/StealCreditRule");
37
+ var TakeTechnologyBonusTokenRule_1 = require("../effect/TakeTechnologyBonusTokenRule");
38
+ var Memory_1 = require("../Memory");
39
+ var EffectRuleIds_1 = require("./EffectRuleIds");
40
+ var EffectHelper = (function (_super) {
41
+ __extends(EffectHelper, _super);
42
+ function EffectHelper(game, player) {
43
+ var _this = _super.call(this, game) || this;
44
+ _this.player = player;
45
+ return _this;
46
+ }
47
+ EffectHelper.prototype.applyCard = function (item) {
48
+ var agent = Agents_1.Agents[item.id];
49
+ this.memorize(Memory_1.Memory.Effects, JSON.parse(JSON.stringify(agent.effects.map(function (e) { return (__assign(__assign({}, e), { effectSource: {
50
+ type: MaterialType_1.MaterialType.AgentCard,
51
+ value: item.id
52
+ } })); }))));
53
+ return this.applyFirstEffect();
54
+ };
55
+ EffectHelper.prototype.applyFirstEffect = function () {
56
+ var effect = this.effect;
57
+ if (!effect) {
58
+ return [];
59
+ }
60
+ return [this.startRule(this.effectRuleIds[effect.type])];
61
+ };
62
+ Object.defineProperty(EffectHelper.prototype, "effect", {
63
+ get: function () {
64
+ var effects = this.effects;
65
+ return effects[0];
66
+ },
67
+ enumerable: false,
68
+ configurable: true
69
+ });
70
+ Object.defineProperty(EffectHelper.prototype, "effects", {
71
+ get: function () {
72
+ return this.remind(Memory_1.Memory.Effects);
73
+ },
74
+ enumerable: false,
75
+ configurable: true
76
+ });
77
+ Object.defineProperty(EffectHelper.prototype, "effectRuleIds", {
78
+ get: function () {
79
+ return EffectRuleIds_1.EffectRuleIds;
80
+ },
81
+ enumerable: false,
82
+ configurable: true
83
+ });
84
+ return EffectHelper;
85
+ }(rules_api_1.MaterialRulesPart));
86
+ exports.EffectHelper = EffectHelper;
87
+ var getEffectRule = function (game, effect) {
88
+ switch (effect.type) {
89
+ case EffectType_1.EffectType.ResetInfluence:
90
+ return new effect_1.ResetInfluenceRule(game, effect);
91
+ case EffectType_1.EffectType.WinCredit:
92
+ return new effect_1.WinCreditRule(game, effect);
93
+ case EffectType_1.EffectType.SpendCredit:
94
+ return new effect_1.SpendCreditRule(game, effect);
95
+ case EffectType_1.EffectType.WinZenithium:
96
+ return new effect_1.WinZenithiumRule(game, effect);
97
+ case EffectType_1.EffectType.GiveZenithium:
98
+ return new effect_1.GiveZenithiumRule(game, effect);
99
+ case EffectType_1.EffectType.Exile:
100
+ return new effect_1.ExileRule(game, effect);
101
+ case EffectType_1.EffectType.DevelopTechnology:
102
+ return new effect_1.DevelopTechnologyRule(game, effect);
103
+ case EffectType_1.EffectType.GiveLeaderBadge:
104
+ return new effect_1.GiveLeaderBadgeRule(game, effect);
105
+ case EffectType_1.EffectType.TakeLeaderBadge:
106
+ return new effect_1.TakeLeaderBadgeRule(game, effect);
107
+ case EffectType_1.EffectType.Discard:
108
+ return new effect_1.DiscardRule(game, effect);
109
+ case EffectType_1.EffectType.Mobilize:
110
+ return new effect_1.MobilizeRule(game, effect);
111
+ case EffectType_1.EffectType.Choice:
112
+ return new effect_1.ChoiceRule(game, effect);
113
+ case EffectType_1.EffectType.TakeBonus:
114
+ return new effect_1.TakeBonusRule(game, effect);
115
+ case EffectType_1.EffectType.GiveInfluence:
116
+ return new effect_1.GiveInfluenceRule(game, effect);
117
+ case EffectType_1.EffectType.WinInfluence:
118
+ return new effect_1.WinInfluenceRule(game, effect);
119
+ case EffectType_1.EffectType.Conditional:
120
+ return new effect_1.ConditionalRule(game, effect);
121
+ case EffectType_1.EffectType.Transfer:
122
+ return new effect_1.TransferRule(game, effect);
123
+ case EffectType_1.EffectType.GiveCredit:
124
+ return new effect_1.GiveCreditRule(game, effect);
125
+ case EffectType_1.EffectType.StealCredit:
126
+ return new StealCreditRule_1.StealCreditRule(game, effect);
127
+ case EffectType_1.EffectType.SpendZenithium:
128
+ return new SpendZenithiumRule_1.SpendZenithiumRule(game, effect);
129
+ case EffectType_1.EffectType.TakeTechnologyBonusToken:
130
+ return new TakeTechnologyBonusTokenRule_1.TakeTechnologyBonusTokenRule(game, effect);
131
+ }
132
+ };
133
+ exports.getEffectRule = getEffectRule;
@@ -0,0 +1,3 @@
1
+ import { EffectType } from '../../material/effect/EffectType';
2
+ import { RuleId } from '../RuleId';
3
+ export declare const EffectRuleIds: Record<EffectType, RuleId>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.EffectRuleIds = void 0;
5
+ var EffectType_1 = require("../../material/effect/EffectType");
6
+ var RuleId_1 = require("../RuleId");
7
+ exports.EffectRuleIds = (_a = {},
8
+ _a[EffectType_1.EffectType.Transfer] = RuleId_1.RuleId.Transfer,
9
+ _a[EffectType_1.EffectType.GiveCredit] = RuleId_1.RuleId.GiveCredit,
10
+ _a[EffectType_1.EffectType.WinCredit] = RuleId_1.RuleId.WinCredit,
11
+ _a[EffectType_1.EffectType.SpendCredit] = RuleId_1.RuleId.SpendCredit,
12
+ _a[EffectType_1.EffectType.Conditional] = RuleId_1.RuleId.Conditional,
13
+ _a[EffectType_1.EffectType.WinZenithium] = RuleId_1.RuleId.WinZenithium,
14
+ _a[EffectType_1.EffectType.GiveZenithium] = RuleId_1.RuleId.GiveZenithium,
15
+ _a[EffectType_1.EffectType.Exile] = RuleId_1.RuleId.Exile,
16
+ _a[EffectType_1.EffectType.WinInfluence] = RuleId_1.RuleId.WinInfluence,
17
+ _a[EffectType_1.EffectType.GiveInfluence] = RuleId_1.RuleId.GiveInfluence,
18
+ _a[EffectType_1.EffectType.ResetInfluence] = RuleId_1.RuleId.ResetInfluence,
19
+ _a[EffectType_1.EffectType.DevelopTechnology] = RuleId_1.RuleId.DevelopTechnology,
20
+ _a[EffectType_1.EffectType.GiveLeaderBadge] = RuleId_1.RuleId.GiveLeaderBadge,
21
+ _a[EffectType_1.EffectType.TakeLeaderBadge] = RuleId_1.RuleId.TakeLeaderBadge,
22
+ _a[EffectType_1.EffectType.Discard] = RuleId_1.RuleId.Discard,
23
+ _a[EffectType_1.EffectType.Mobilize] = RuleId_1.RuleId.Mobilize,
24
+ _a[EffectType_1.EffectType.Choice] = RuleId_1.RuleId.Choice,
25
+ _a[EffectType_1.EffectType.TakeBonus] = RuleId_1.RuleId.TakeBonus,
26
+ _a[EffectType_1.EffectType.StealCredit] = RuleId_1.RuleId.StealCredit,
27
+ _a[EffectType_1.EffectType.SpendZenithium] = RuleId_1.RuleId.SpendZenithium,
28
+ _a[EffectType_1.EffectType.TakeTechnologyBonusToken] = RuleId_1.RuleId.TakeTechnologyBonusToken,
29
+ _a);
@@ -0,0 +1,13 @@
1
+ import { Material, MaterialRulesPart } from '@gamepark/rules-api';
2
+ import { Influence } from '../../material/Influence';
3
+ import { TeamColor } from '../../TeamColor';
4
+ export declare class EndGameHelper extends MaterialRulesPart {
5
+ willEnd(team: TeamColor, planets?: Material<number, number, number>): boolean;
6
+ get winningTeam(): TeamColor | undefined;
7
+ getTeamPlanet(team: TeamColor): Material<number, number, number>;
8
+ getCountDifferentInfluence(planets: Material): number;
9
+ getMaxSameInfluence(planets: Material): {
10
+ influence: Influence;
11
+ count: number;
12
+ } | undefined;
13
+ }
@@ -0,0 +1,70 @@
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.EndGameHelper = void 0;
22
+ var rules_api_1 = require("@gamepark/rules-api");
23
+ var lodash_1 = require("lodash");
24
+ var maxBy_1 = __importDefault(require("lodash/maxBy"));
25
+ var Influence_1 = require("../../material/Influence");
26
+ var LocationType_1 = require("../../material/LocationType");
27
+ var MaterialType_1 = require("../../material/MaterialType");
28
+ var TeamColor_1 = require("../../TeamColor");
29
+ var EndGameHelper = (function (_super) {
30
+ __extends(EndGameHelper, _super);
31
+ function EndGameHelper() {
32
+ return _super !== null && _super.apply(this, arguments) || this;
33
+ }
34
+ EndGameHelper.prototype.willEnd = function (team, planets) {
35
+ if (planets === void 0) { planets = this.getTeamPlanet(team); }
36
+ if (planets.length === 5)
37
+ return true;
38
+ var maxSameInfluence = this.getMaxSameInfluence(planets);
39
+ if (maxSameInfluence && maxSameInfluence.count >= 3)
40
+ return true;
41
+ if (this.getCountDifferentInfluence(planets) >= 4)
42
+ return true;
43
+ return false;
44
+ };
45
+ Object.defineProperty(EndGameHelper.prototype, "winningTeam", {
46
+ get: function () {
47
+ var _this = this;
48
+ return TeamColor_1.teamColors.find(function (team) { return _this.willEnd(team); });
49
+ },
50
+ enumerable: false,
51
+ configurable: true
52
+ });
53
+ EndGameHelper.prototype.getTeamPlanet = function (team) {
54
+ return this.material(MaterialType_1.MaterialType.InfluenceDisc).location(LocationType_1.LocationType.TeamPlanets).player(team);
55
+ };
56
+ EndGameHelper.prototype.getCountDifferentInfluence = function (planets) {
57
+ return (0, lodash_1.uniqBy)(planets.getItems(), function (item) { return item.id; }).length;
58
+ };
59
+ EndGameHelper.prototype.getMaxSameInfluence = function (planets) {
60
+ var maxInfluence = (0, maxBy_1.default)(Influence_1.influences, function (i) { return planets.id(i).length; });
61
+ if (!maxInfluence)
62
+ return;
63
+ return {
64
+ influence: maxInfluence,
65
+ count: planets.id(maxInfluence).length
66
+ };
67
+ };
68
+ return EndGameHelper;
69
+ }(rules_api_1.MaterialRulesPart));
70
+ exports.EndGameHelper = EndGameHelper;
@@ -0,0 +1,13 @@
1
+ import { MaterialGame, MaterialItem, MaterialRulesPart } from '@gamepark/rules-api';
2
+ import { Agent } from '../../material/Agent';
3
+ import { Influence } from '../../material/Influence';
4
+ import { LocationType } from '../../material/LocationType';
5
+ import { PlayerId } from '../../PlayerId';
6
+ import { TeamColor } from '../../TeamColor';
7
+ export declare class InfluenceHelper extends MaterialRulesPart {
8
+ readonly team: TeamColor;
9
+ constructor(game: MaterialGame, team: TeamColor);
10
+ getCost(item: MaterialItem<PlayerId, LocationType, Agent | undefined>, decreaseInfluenceBy?: number): number;
11
+ getInfluence(influence: Influence): import("@gamepark/rules-api").Material<number, number, number>;
12
+ get influence(): import("@gamepark/rules-api").Material<number, number, number>;
13
+ }
@@ -0,0 +1,47 @@
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.InfluenceHelper = void 0;
19
+ var rules_api_1 = require("@gamepark/rules-api");
20
+ var Agents_1 = require("../../material/Agents");
21
+ var LocationType_1 = require("../../material/LocationType");
22
+ var MaterialType_1 = require("../../material/MaterialType");
23
+ var InfluenceHelper = (function (_super) {
24
+ __extends(InfluenceHelper, _super);
25
+ function InfluenceHelper(game, team) {
26
+ var _this = _super.call(this, game) || this;
27
+ _this.team = team;
28
+ return _this;
29
+ }
30
+ InfluenceHelper.prototype.getCost = function (item, decreaseInfluenceBy) {
31
+ if (decreaseInfluenceBy === void 0) { decreaseInfluenceBy = 0; }
32
+ var description = Agents_1.Agents[item.id];
33
+ return Math.max(0, description.cost - (this.getInfluence(description.influence).length - decreaseInfluenceBy));
34
+ };
35
+ InfluenceHelper.prototype.getInfluence = function (influence) {
36
+ return this.influence.locationId(influence);
37
+ };
38
+ Object.defineProperty(InfluenceHelper.prototype, "influence", {
39
+ get: function () {
40
+ return this.material(MaterialType_1.MaterialType.AgentCard).location(LocationType_1.LocationType.Influence).player(this.team);
41
+ },
42
+ enumerable: false,
43
+ configurable: true
44
+ });
45
+ return InfluenceHelper;
46
+ }(rules_api_1.MaterialRulesPart));
47
+ exports.InfluenceHelper = InfluenceHelper;
@@ -0,0 +1,10 @@
1
+ import { MaterialGame, MaterialMove, MaterialRulesPart } from '@gamepark/rules-api';
2
+ import { PlayerId } from '../../PlayerId';
3
+ export declare class MobilizeHelper extends MaterialRulesPart {
4
+ readonly player: PlayerId;
5
+ private playerHelper;
6
+ constructor(game: MaterialGame, player: PlayerId);
7
+ mobilize(): MaterialMove[];
8
+ isPossible(): boolean;
9
+ get deck(): import("@gamepark/rules-api").MaterialDeck<number, number, number>;
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
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.MobilizeHelper = void 0;
19
+ var rules_api_1 = require("@gamepark/rules-api");
20
+ var Agents_1 = require("../../material/Agents");
21
+ var LocationType_1 = require("../../material/LocationType");
22
+ var MaterialType_1 = require("../../material/MaterialType");
23
+ var PlayerHelper_1 = require("./PlayerHelper");
24
+ var MobilizeHelper = (function (_super) {
25
+ __extends(MobilizeHelper, _super);
26
+ function MobilizeHelper(game, player) {
27
+ var _this = _super.call(this, game) || this;
28
+ _this.player = player;
29
+ _this.playerHelper = new PlayerHelper_1.PlayerHelper(game, player);
30
+ return _this;
31
+ }
32
+ MobilizeHelper.prototype.mobilize = function () {
33
+ var _this = this;
34
+ var _a;
35
+ var agent = this.material(MaterialType_1.MaterialType.AgentCard).location(LocationType_1.LocationType.AgentDeck).deck().limit(1);
36
+ if (!agent.length || !((_a = agent.getItem()) === null || _a === void 0 ? void 0 : _a.id))
37
+ return [];
38
+ return agent.moveItems(function (item) { return ({
39
+ type: LocationType_1.LocationType.Influence,
40
+ id: Agents_1.Agents[item.id].influence,
41
+ player: _this.playerHelper.team
42
+ }); });
43
+ };
44
+ MobilizeHelper.prototype.isPossible = function () {
45
+ return this.deck.length > 0;
46
+ };
47
+ Object.defineProperty(MobilizeHelper.prototype, "deck", {
48
+ get: function () {
49
+ return this.material(MaterialType_1.MaterialType.AgentCard).location(LocationType_1.LocationType.AgentDeck).deck();
50
+ },
51
+ enumerable: false,
52
+ configurable: true
53
+ });
54
+ return MobilizeHelper;
55
+ }(rules_api_1.MaterialRulesPart));
56
+ exports.MobilizeHelper = MobilizeHelper;
@@ -0,0 +1,19 @@
1
+ import { Material, MaterialGame, MaterialRulesPart } from '@gamepark/rules-api';
2
+ import { GiveInfluenceEffect, ResetInfluenceEffect, WinInfluenceEffect } from '../../material/effect/Effect';
3
+ import { Influence } from '../../material/Influence';
4
+ import { PlayerId } from '../../PlayerId';
5
+ export declare class PlanetHelper extends MaterialRulesPart {
6
+ readonly player: PlayerId;
7
+ private playerHelper;
8
+ constructor(game: MaterialGame, player: PlayerId);
9
+ getPushablePlanets(effect: GiveInfluenceEffect): Material;
10
+ getPullablePlanets(effect: WinInfluenceEffect): Material;
11
+ getResetablePlanets(): Material<number, number, number>;
12
+ isPossibleToPull(effect: WinInfluenceEffect): boolean;
13
+ isPossibleToPush(effect: GiveInfluenceEffect): boolean;
14
+ isAlreadyPlayed(influence: Influence): boolean | undefined;
15
+ get alreadyPlayedPlanets(): Influence[] | undefined;
16
+ isPossibleToReset(_effect: ResetInfluenceEffect): boolean;
17
+ get planets(): Material<number, number, number>;
18
+ getPlanet(influence: Influence): Material<number, number, number>;
19
+ }
@@ -0,0 +1,104 @@
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.PlanetHelper = 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 TeamColor_1 = require("../../TeamColor");
23
+ var Memory_1 = require("../Memory");
24
+ var PlayerHelper_1 = require("./PlayerHelper");
25
+ var PlanetHelper = (function (_super) {
26
+ __extends(PlanetHelper, _super);
27
+ function PlanetHelper(game, player) {
28
+ var _this = _super.call(this, game) || this;
29
+ _this.player = player;
30
+ _this.playerHelper = new PlayerHelper_1.PlayerHelper(game, player);
31
+ return _this;
32
+ }
33
+ PlanetHelper.prototype.getPushablePlanets = function (effect) {
34
+ var planets = this.planets;
35
+ if (effect.except)
36
+ return planets.filter(function (item) { return item.id !== effect.except; });
37
+ return planets;
38
+ };
39
+ PlanetHelper.prototype.getPullablePlanets = function (effect) {
40
+ var _this = this;
41
+ var _a;
42
+ var planets = this.planets;
43
+ var filteredPlanets = effect.differentPlanet && ((_a = this.alreadyPlayedPlanets) === null || _a === void 0 ? void 0 : _a.length) ? planets.id(function (id) { return !_this.isAlreadyPlayed(id); }) : planets;
44
+ if (!filteredPlanets.length)
45
+ return filteredPlanets;
46
+ if (effect.fromCenter) {
47
+ var centeredPlanets = filteredPlanets.filter(function (planet) { return planet.location.x === 0; });
48
+ if (!centeredPlanets.length)
49
+ return centeredPlanets;
50
+ if (effect.influence)
51
+ return centeredPlanets.id(effect.influence);
52
+ }
53
+ else if (effect.opponentSide) {
54
+ var opponentSidePlanets = filteredPlanets.filter(function (planet) {
55
+ return _this.playerHelper.team === TeamColor_1.TeamColor.White ? planet.location.x < 0 : planet.location.x > 0;
56
+ });
57
+ if (!opponentSidePlanets.length)
58
+ return opponentSidePlanets;
59
+ if (effect.influence)
60
+ return opponentSidePlanets.id(effect.influence);
61
+ }
62
+ else {
63
+ if (effect.influence) {
64
+ return planets.id(effect.influence);
65
+ }
66
+ }
67
+ return planets;
68
+ };
69
+ PlanetHelper.prototype.getResetablePlanets = function () {
70
+ return this.planets.filter(function (planet) { return planet.location.x !== 0; });
71
+ };
72
+ PlanetHelper.prototype.isPossibleToPull = function (effect) {
73
+ return this.getPullablePlanets(effect).length > 0;
74
+ };
75
+ PlanetHelper.prototype.isPossibleToPush = function (effect) {
76
+ return this.getPushablePlanets(effect).length > 0;
77
+ };
78
+ PlanetHelper.prototype.isAlreadyPlayed = function (influence) {
79
+ var _a;
80
+ return (_a = this.alreadyPlayedPlanets) === null || _a === void 0 ? void 0 : _a.includes(influence);
81
+ };
82
+ Object.defineProperty(PlanetHelper.prototype, "alreadyPlayedPlanets", {
83
+ get: function () {
84
+ return this.remind(Memory_1.Memory.LastPlanetsMoved);
85
+ },
86
+ enumerable: false,
87
+ configurable: true
88
+ });
89
+ PlanetHelper.prototype.isPossibleToReset = function (_effect) {
90
+ return this.getResetablePlanets().length > 0;
91
+ };
92
+ Object.defineProperty(PlanetHelper.prototype, "planets", {
93
+ get: function () {
94
+ return this.material(MaterialType_1.MaterialType.InfluenceDisc).location(LocationType_1.LocationType.PlanetBoardInfluenceDiscSpace);
95
+ },
96
+ enumerable: false,
97
+ configurable: true
98
+ });
99
+ PlanetHelper.prototype.getPlanet = function (influence) {
100
+ return this.material(MaterialType_1.MaterialType.InfluenceDisc).location(LocationType_1.LocationType.PlanetBoardInfluenceDiscSpace).id(influence);
101
+ };
102
+ return PlanetHelper;
103
+ }(rules_api_1.MaterialRulesPart));
104
+ exports.PlanetHelper = PlanetHelper;
@@ -0,0 +1,12 @@
1
+ import { MaterialGame, MaterialRulesPart } from '@gamepark/rules-api';
2
+ import { PlayerId } from '../../PlayerId';
3
+ import { TeamColor } from '../../TeamColor';
4
+ export declare class PlayerHelper extends MaterialRulesPart {
5
+ readonly playerId: PlayerId;
6
+ team: TeamColor;
7
+ constructor(game: MaterialGame, playerId: PlayerId);
8
+ get credits(): number;
9
+ get zenithium(): number;
10
+ get zenithiumMaterial(): import("@gamepark/rules-api").Material<number, number, number>;
11
+ get isLeader(): boolean;
12
+ }
@@ -0,0 +1,61 @@
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.PlayerHelper = void 0;
19
+ var rules_api_1 = require("@gamepark/rules-api");
20
+ var Credit_1 = require("../../material/Credit");
21
+ var MaterialType_1 = require("../../material/MaterialType");
22
+ var TeamColor_1 = require("../../TeamColor");
23
+ var PlayerHelper = (function (_super) {
24
+ __extends(PlayerHelper, _super);
25
+ function PlayerHelper(game, playerId) {
26
+ var _this = _super.call(this, game) || this;
27
+ _this.playerId = playerId;
28
+ _this.team = (0, TeamColor_1.getTeamColor)(playerId);
29
+ return _this;
30
+ }
31
+ Object.defineProperty(PlayerHelper.prototype, "credits", {
32
+ get: function () {
33
+ return this.material(MaterialType_1.MaterialType.CreditToken).money(Credit_1.credits).player(this.team).count;
34
+ },
35
+ enumerable: false,
36
+ configurable: true
37
+ });
38
+ Object.defineProperty(PlayerHelper.prototype, "zenithium", {
39
+ get: function () {
40
+ return this.zenithiumMaterial.getQuantity();
41
+ },
42
+ enumerable: false,
43
+ configurable: true
44
+ });
45
+ Object.defineProperty(PlayerHelper.prototype, "zenithiumMaterial", {
46
+ get: function () {
47
+ return this.material(MaterialType_1.MaterialType.ZenithiumToken).player(this.team);
48
+ },
49
+ enumerable: false,
50
+ configurable: true
51
+ });
52
+ Object.defineProperty(PlayerHelper.prototype, "isLeader", {
53
+ get: function () {
54
+ return this.material(MaterialType_1.MaterialType.LeaderBadgeToken).player(this.team).length > 0;
55
+ },
56
+ enumerable: false,
57
+ configurable: true
58
+ });
59
+ return PlayerHelper;
60
+ }(rules_api_1.MaterialRulesPart));
61
+ exports.PlayerHelper = PlayerHelper;
@@ -0,0 +1,4 @@
1
+ import { MaterialMove, MoveItem, PlayerTurnRule } from '@gamepark/rules-api';
2
+ export declare class TechnologyHelper extends PlayerTurnRule {
3
+ applyTechnology(move: MoveItem): MaterialMove[];
4
+ }