@gaia-project/engine
Advanced tools
Comparing version 4.8.46 to 4.8.47
{ | ||
"name": "@gaia-project/engine", | ||
"version": "4.8.46", | ||
"version": "4.8.47", | ||
"description": "Javascript engine for project gaia", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.autoChargeItars = exports.askOrDeclineBasedOnCost = exports.askOrDeclineForPassedPlayer = exports.decideChargeRequest = exports.ChargeRequest = exports.ChargeDecision = void 0; | ||
exports.autoChargeItars = exports.askOrDeclineBasedOnCost = exports.allowBasedOnTargetPower = exports.askOrDeclineForPassedPlayer = exports.decideChargeRequest = exports.ChargeRequest = exports.ChargeDecision = void 0; | ||
const enums_1 = require("./enums"); | ||
@@ -65,2 +65,3 @@ const reward_1 = __importDefault(require("./reward")); | ||
(r) => askForMultipleTaklonsOffers(r.offers, r.player.settings.autoBrainstone), | ||
(r) => allowBasedOnTargetPower(r.player), | ||
(r) => askOrDeclineBasedOnCost(r.minCharge, r.maxCharge, r.player.settings.autoChargePower), | ||
@@ -122,2 +123,9 @@ askForItars, | ||
} | ||
function allowBasedOnTargetPower(player) { | ||
if (player.data.spendablePowerTokens() < player.settings.autoChargeTargetSpendablePower) { | ||
return ChargeDecision.Yes; | ||
} | ||
return ChargeDecision.Undecided; | ||
} | ||
exports.allowBasedOnTargetPower = allowBasedOnTargetPower; | ||
function askOrDeclineBasedOnCost(minCharge, maxCharge, autoCharge) { | ||
@@ -124,0 +132,0 @@ if (autoCharge === "ask") { |
@@ -32,3 +32,3 @@ "use strict"; | ||
// If so, and fed has more satellites, then fed is invalid | ||
// because it can be built with less satellites | ||
// because it can be built with fewer satellites | ||
const fedPlanets = fed.hexes.filter((hex) => hex.hasPlanet()); | ||
@@ -35,0 +35,0 @@ const compPlanets = comparison.hexes.filter((hex) => hex.hasPlanet()); |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.BuildWarning = exports.Settings = exports.defaultAutoCharge = exports.MAX_SATELLITES = void 0; | ||
exports.BuildWarning = exports.Settings = exports.defaultAutoChargeTargetSpendablePower = exports.defaultAutoCharge = exports.MAX_SATELLITES = void 0; | ||
const assert_1 = __importDefault(require("assert")); | ||
@@ -34,5 +34,7 @@ const eventemitter3_1 = require("eventemitter3"); | ||
exports.defaultAutoCharge = 1; | ||
exports.defaultAutoChargeTargetSpendablePower = 0; | ||
class Settings { | ||
constructor(autoChargePower = exports.defaultAutoCharge, autoIncome = false, autoBrainstone = false, itarsAutoChargeToArea3 = false) { | ||
constructor(autoChargePower = exports.defaultAutoCharge, autoChargeTargetSpendablePower = exports.defaultAutoChargeTargetSpendablePower, autoIncome = false, autoBrainstone = false, itarsAutoChargeToArea3 = false) { | ||
this.autoChargePower = autoChargePower; | ||
this.autoChargeTargetSpendablePower = autoChargeTargetSpendablePower; | ||
this.autoIncome = autoIncome; | ||
@@ -187,7 +189,7 @@ this.autoBrainstone = autoBrainstone; | ||
for (const cost of costs) { | ||
this.data.gainReward(this.factionReward(cost, source, true), true, source); | ||
this.data.gainReward(this.factionReward(cost, source, false), true, source); | ||
} | ||
} | ||
gainRewards(rewards, source) { | ||
this.data.gainRewards(rewards.map((rew) => this.factionReward(rew, source, false)), false, source); | ||
this.data.gainRewards(rewards.map((rew) => this.factionReward(rew, source, true)), false, source); | ||
} | ||
@@ -700,3 +702,3 @@ maxPayRange(cost) { | ||
} | ||
factionReward(reward, source, pay) { | ||
factionReward(reward, source, gleensQic) { | ||
if (this.faction === enums_1.Faction.Terrans && reward.type === enums_1.Resource.GainTokenGaiaArea) { | ||
@@ -706,3 +708,3 @@ return new reward_1.default(-reward.count, enums_1.Resource.MoveTokenFromGaiaAreaToArea1); | ||
// this is for Gleens getting ore instead of qics until Academy2 | ||
if (!pay && | ||
if (gleensQic && | ||
source !== enums_1.Phase.BeginGame && | ||
@@ -924,3 +926,3 @@ this.faction === enums_1.Faction.Gleens && | ||
assert_1.default(!outclasser, "Federation is outclassed by other federation at " + ((_a = outclasser === null || outclasser === void 0 ? void 0 : outclasser.hexes) !== null && _a !== void 0 ? _a : []).join(",")); | ||
// Check if federation can be built with less satellites | ||
// Check if federation can be built with fewer satellites | ||
if (!flexible) { | ||
@@ -942,3 +944,3 @@ const allHexes = [...map.grid.values()].filter((hex) => !excluded.has(hex)); | ||
const info2 = this.federationInfo(smallFederation); | ||
assert_1.default(info2.satellites >= info.satellites, "The federation can be built with less satellites, for example: " + path.join(",")); | ||
assert_1.default(info2.satellites >= info.satellites, "The federation can be built with fewer satellites, for example: " + path.join(",")); | ||
} | ||
@@ -945,0 +947,0 @@ } |
@@ -38,2 +38,5 @@ "use strict"; | ||
} | ||
if ("autoChargeTargetSpendablePower" in settings) { | ||
lodash_1.set(engine.players[player], "settings.autoChargeTargetSpendablePower", Number(settings.autoChargeTargetSpendablePower)); | ||
} | ||
if ("autoIncome" in settings) { | ||
@@ -52,8 +55,9 @@ lodash_1.set(engine.players[player], "settings.autoIncome", settings.autoIncome); | ||
function playerSettings(engine, player) { | ||
var _a, _b, _c, _d, _e; | ||
var _a, _b, _c, _d, _e, _f, _g; | ||
return { | ||
autoCharge: String((_b = (_a = engine.players[player].settings) === null || _a === void 0 ? void 0 : _a.autoChargePower) !== null && _b !== void 0 ? _b : player_1.defaultAutoCharge), | ||
autoIncome: !!((_c = engine.players[player].settings) === null || _c === void 0 ? void 0 : _c.autoIncome), | ||
autoBrainstone: !!((_d = engine.players[player].settings) === null || _d === void 0 ? void 0 : _d.autoBrainstone), | ||
itarsAutoChargeToArea3: !!((_e = engine.players[player].settings) === null || _e === void 0 ? void 0 : _e.itarsAutoChargeToArea3), | ||
autoChargeTargetSpendablePower: String((_d = (_c = engine.players[player].settings) === null || _c === void 0 ? void 0 : _c.autoChargeTargetSpendablePower) !== null && _d !== void 0 ? _d : player_1.defaultAutoChargeTargetSpendablePower), | ||
autoIncome: !!((_e = engine.players[player].settings) === null || _e === void 0 ? void 0 : _e.autoIncome), | ||
autoBrainstone: !!((_f = engine.players[player].settings) === null || _f === void 0 ? void 0 : _f.autoBrainstone), | ||
itarsAutoChargeToArea3: !!((_g = engine.players[player].settings) === null || _g === void 0 ? void 0 : _g.itarsAutoChargeToArea3), | ||
}; | ||
@@ -60,0 +64,0 @@ } |
{ | ||
"name": "@gaia-project/engine", | ||
"version": "4.8.46", | ||
"version": "4.8.47", | ||
"description": "Javascript engine for project gaia", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -101,3 +101,10 @@ import { expect } from "chai"; | ||
name: string; | ||
give: { power: number; autoCharge: AutoCharge; lastRound?: boolean; playerHasPassed?: boolean }; | ||
give: { | ||
power: number; | ||
autoCharge: AutoCharge; | ||
autoChargeTargetSpendablePower?: number; | ||
powerInArea3?: number; | ||
lastRound?: boolean; | ||
playerHasPassed?: boolean; | ||
}; | ||
want: ChargeDecision; | ||
@@ -135,2 +142,12 @@ }[] = [ | ||
}, | ||
{ | ||
name: "target power is already satisfied", | ||
give: { power: 2, autoCharge: 1, powerInArea3: 3, autoChargeTargetSpendablePower: 3 }, | ||
want: ChargeDecision.Ask, | ||
}, | ||
{ | ||
name: "target power overrides decision", | ||
give: { power: 2, autoCharge: 1, powerInArea3: 2, autoChargeTargetSpendablePower: 3 }, | ||
want: ChargeDecision.Yes, | ||
}, | ||
]; | ||
@@ -142,2 +159,4 @@ | ||
player.settings.autoChargePower = test.give.autoCharge; | ||
player.settings.autoChargeTargetSpendablePower = test.give.autoChargeTargetSpendablePower; | ||
player.data.power.area3 = test.give.powerInArea3; | ||
@@ -144,0 +163,0 @@ const offer = new Offer( |
@@ -71,2 +71,3 @@ import { Offer } from "./available/types"; | ||
(r: ChargeRequest) => askForMultipleTaklonsOffers(r.offers, r.player.settings.autoBrainstone), | ||
(r: ChargeRequest) => allowBasedOnTargetPower(r.player), | ||
(r: ChargeRequest) => askOrDeclineBasedOnCost(r.minCharge, r.maxCharge, r.player.settings.autoChargePower), | ||
@@ -128,2 +129,9 @@ askForItars, | ||
export function allowBasedOnTargetPower(player: Player) { | ||
if (player.data.spendablePowerTokens() < player.settings.autoChargeTargetSpendablePower) { | ||
return ChargeDecision.Yes; | ||
} | ||
return ChargeDecision.Undecided; | ||
} | ||
export function askOrDeclineBasedOnCost(minCharge: number, maxCharge: number, autoCharge: AutoCharge) { | ||
@@ -130,0 +138,0 @@ if (autoCharge === "ask") { |
@@ -34,3 +34,3 @@ import { expect } from "chai"; | ||
it("should force to add a mine to the federation if it means less satellites", function () { | ||
it("should force to add a mine to the federation if it means fewer satellites", function () { | ||
this.timeout(10000); | ||
@@ -37,0 +37,0 @@ |
@@ -39,3 +39,3 @@ import assert from "assert"; | ||
// If so, and fed has more satellites, then fed is invalid | ||
// because it can be built with less satellites | ||
// because it can be built with fewer satellites | ||
const fedPlanets = fed.hexes.filter((hex) => hex.hasPlanet()); | ||
@@ -42,0 +42,0 @@ const compPlanets = comparison.hexes.filter((hex) => hex.hasPlanet()); |
@@ -63,2 +63,3 @@ import assert from "assert"; | ||
export const defaultAutoCharge = 1; | ||
export const defaultAutoChargeTargetSpendablePower = 0; | ||
@@ -68,2 +69,3 @@ export class Settings { | ||
public autoChargePower: AutoCharge = defaultAutoCharge, | ||
public autoChargeTargetSpendablePower: number = defaultAutoChargeTargetSpendablePower, | ||
public autoIncome: boolean = false, | ||
@@ -249,3 +251,3 @@ public autoBrainstone: boolean = false, | ||
for (const cost of costs) { | ||
this.data.gainReward(this.factionReward(cost, source, true), true, source); | ||
this.data.gainReward(this.factionReward(cost, source, false), true, source); | ||
} | ||
@@ -256,3 +258,3 @@ } | ||
this.data.gainRewards( | ||
rewards.map((rew) => this.factionReward(rew, source, false)), | ||
rewards.map((rew) => this.factionReward(rew, source, true)), | ||
false, | ||
@@ -893,3 +895,3 @@ source | ||
factionReward(reward: Reward, source: EventSource, pay: boolean): Reward { | ||
factionReward(reward: Reward, source: EventSource, gleensQic: boolean): Reward { | ||
if (this.faction === Faction.Terrans && reward.type === Resource.GainTokenGaiaArea) { | ||
@@ -900,3 +902,3 @@ return new Reward(-reward.count, Resource.MoveTokenFromGaiaAreaToArea1); | ||
if ( | ||
!pay && | ||
gleensQic && | ||
source !== Phase.BeginGame && | ||
@@ -1202,3 +1204,3 @@ this.faction === Faction.Gleens && | ||
// Check if federation can be built with less satellites | ||
// Check if federation can be built with fewer satellites | ||
if (!flexible) { | ||
@@ -1235,3 +1237,3 @@ const allHexes = [...map.grid.values()].filter((hex) => !excluded.has(hex)); | ||
info2.satellites >= info.satellites, | ||
"The federation can be built with less satellites, for example: " + path.join(",") | ||
"The federation can be built with fewer satellites, for example: " + path.join(",") | ||
); | ||
@@ -1238,0 +1240,0 @@ } |
@@ -6,3 +6,3 @@ import assert from "assert"; | ||
import { Round } from "./src/enums"; | ||
import { defaultAutoCharge } from "./src/player"; | ||
import { defaultAutoCharge, defaultAutoChargeTargetSpendablePower } from "./src/player"; | ||
@@ -46,2 +46,3 @@ export async function init( | ||
autoCharge?: string; | ||
autoChargeTargetSpendablePower?: string; | ||
autoIncome?: boolean; | ||
@@ -59,2 +60,9 @@ autoBrainstone?: boolean; | ||
} | ||
if ("autoChargeTargetSpendablePower" in settings) { | ||
set( | ||
engine.players[player], | ||
"settings.autoChargeTargetSpendablePower", | ||
Number(settings.autoChargeTargetSpendablePower) | ||
); | ||
} | ||
if ("autoIncome" in settings) { | ||
@@ -76,2 +84,5 @@ set(engine.players[player], "settings.autoIncome", settings.autoIncome); | ||
autoCharge: String(engine.players[player].settings?.autoChargePower ?? defaultAutoCharge), | ||
autoChargeTargetSpendablePower: String( | ||
engine.players[player].settings?.autoChargeTargetSpendablePower ?? defaultAutoChargeTargetSpendablePower | ||
), | ||
autoIncome: !!engine.players[player].settings?.autoIncome, | ||
@@ -78,0 +89,0 @@ autoBrainstone: !!engine.players[player].settings?.autoBrainstone, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
1171224
24085