@civ-clone/core-treasury 0.1.7 → 0.1.8

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/PlayerTreasury.js CHANGED
@@ -25,8 +25,11 @@ class PlayerTreasury extends DataObject_1.default {
25
25
  this._value += value;
26
26
  }
27
27
  buy(city) {
28
- const cityBuild = this._cityBuildRegistry.getByCity(city), [spendCost] = this.cost(city).filter((spendCost) => spendCost.resource() === this._yield), cost = spendCost.value();
29
- if (city.player() !== this._player || this.value() < cost) {
28
+ const cityBuild = this._cityBuildRegistry.getByCity(city), [spendCost] = this.cost(city).filter((spendCost) => spendCost.resource() === this._yield), cost = spendCost === null || spendCost === void 0 ? void 0 : spendCost.value();
29
+ // Nothing to buy when the rules give no price in this treasury's yield.
30
+ if (cost === undefined ||
31
+ city.player() !== this._player ||
32
+ this.value() < cost) {
30
33
  return;
31
34
  }
32
35
  this._ruleRegistry.process(Rush_1.default, cityBuild, spendCost);
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerTreasury.js","sourceRoot":"","sources":["PlayerTreasury.ts"],"names":[],"mappings":";;;AAAA,oFAGsD;AACtD,oEAG2C;AAE3C,uEAAgE;AAEhE,yCAAkC;AAElC,uDAAgD;AAChD,uCAAgC;AAYhC,MAAa,cAAe,SAAQ,oBAAU;IAQ5C,YACE,MAAc,EACd,SAAuB,EACvB,oBAAuC,4BAAyB,EAChE,eAA6B,uBAAoB;QAEjD,KAAK,EAAE,CAAC;QATF,WAAM,GAAW,CAAC,CAAC;QAWzB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9B,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,KAAqB;QACvB,IAAI,KAAK,YAAY,eAAK,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAExB,OAAO;SACR;QAED,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,IAAU;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,EACvD,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAClC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,MAAM,CACpD,EACD,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE;YACzD,OAAO;SACR;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,cAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACvD,kDAAkD;QAClD,SAAS,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,IAAU;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,eAAK,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAqB;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,KAAqB;QAC5B,IAAI,KAAK,YAAY,eAAK,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAE7B,OAAO;SACR;QAED,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACvB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;;AApFH,wCAqFC;AApFiB,wBAAS,GAAG,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAsFtE,kBAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"PlayerTreasury.js","sourceRoot":"","sources":["PlayerTreasury.ts"],"names":[],"mappings":";;;AAAA,oFAGsD;AACtD,oEAG2C;AAE3C,uEAAgE;AAEhE,yCAAkC;AAElC,uDAAgD;AAChD,uCAAgC;AAYhC,MAAa,cAAe,SAAQ,oBAAU;IAQ5C,YACE,MAAc,EACd,SAAuB,EACvB,oBAAuC,4BAAyB,EAChE,eAA6B,uBAAoB;QAEjD,KAAK,EAAE,CAAC;QATF,WAAM,GAAW,CAAC,CAAC;QAWzB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9B,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,KAAqB;QACvB,IAAI,KAAK,YAAY,eAAK,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAExB,OAAO;SACR;QAED,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,IAAU;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,EACvD,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAClC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,MAAM,CACpD,EACD,IAAI,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,EAAE,CAAC;QAE5B,wEAAwE;QACxE,IACE,IAAI,KAAK,SAAS;YAClB,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,OAAO;YAC9B,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,EACnB;YACA,OAAO;SACR;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,cAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACvD,kDAAkD;QAClD,SAAS,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,IAAU;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,eAAK,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAqB;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,KAAqB;QAC5B,IAAI,KAAK,YAAY,eAAK,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAE7B,OAAO;SACR;QAED,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACvB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;;AAzFH,wCA0FC;AAzFiB,wBAAS,GAAG,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AA2FtE,kBAAe,cAAc,CAAC"}
package/PlayerTreasury.ts CHANGED
@@ -63,9 +63,14 @@ export class PlayerTreasury extends DataObject implements IPlayerTreasury {
63
63
  [spendCost] = this.cost(city).filter(
64
64
  (spendCost) => spendCost.resource() === this._yield
65
65
  ),
66
- cost = spendCost.value();
67
-
68
- if (city.player() !== this._player || this.value() < cost) {
66
+ cost = spendCost?.value();
67
+
68
+ // Nothing to buy when the rules give no price in this treasury's yield.
69
+ if (
70
+ cost === undefined ||
71
+ city.player() !== this._player ||
72
+ this.value() < cost
73
+ ) {
69
74
  return;
70
75
  }
71
76
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civ-clone/core-treasury",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "main": "index.js",
5
5
  "repository": "git@github.com:civ-clone/core-treasury.git",
6
6
  "keywords": [
@@ -1,5 +1,9 @@
1
+ import City from '@civ-clone/core-city/City';
2
+ import CityBuild from '@civ-clone/core-city-build/CityBuild';
3
+ import CityBuildRegistry from '@civ-clone/core-city-build/CityBuildRegistry';
1
4
  import Player from '@civ-clone/core-player/Player';
2
5
  import PlayerTreasury from '../PlayerTreasury';
6
+ import RuleRegistry from '@civ-clone/core-rule/RuleRegistry';
3
7
  import Yield from '@civ-clone/core-yield/Yield';
4
8
  import { expect } from 'chai';
5
9
 
@@ -44,4 +48,31 @@ describe('PlayerTreasury', () => {
44
48
  expect(fromNumber.value()).to.equal(5);
45
49
  expect(fromYield.value()).to.equal(5);
46
50
  });
51
+
52
+ it("doesn't buy, or throw, when the rules give no price", () => {
53
+ const player = new Player(),
54
+ city = { player: () => player } as unknown as City;
55
+ let added = false;
56
+
57
+ const cityBuild = {
58
+ city: () => city,
59
+ remaining: () => 10,
60
+ add: () => (added = true),
61
+ } as unknown as CityBuild,
62
+ cityBuildRegistry = {
63
+ getByCity: () => cityBuild,
64
+ } as unknown as CityBuildRegistry,
65
+ playerTreasury = new PlayerTreasury(
66
+ player,
67
+ Yield,
68
+ cityBuildRegistry,
69
+ new RuleRegistry()
70
+ );
71
+
72
+ playerTreasury.set(100);
73
+
74
+ expect(() => playerTreasury.buy(city)).not.to.throw();
75
+ expect(playerTreasury.value()).to.equal(100);
76
+ expect(added).to.equal(false);
77
+ });
47
78
  });