@civ-clone/core-treasury 0.1.2 → 0.1.4

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.
@@ -0,0 +1,6 @@
1
+ import { RuleRegistry } from '@civ-clone/core-rule/RuleRegistry';
2
+ import AdditionalData from '@civ-clone/core-data-object/AdditionalData';
3
+ export declare const getAdditionalData: (
4
+ ruleRegistry?: RuleRegistry
5
+ ) => AdditionalData[];
6
+ export default getAdditionalData;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAdditionalData = void 0;
4
+ const RuleRegistry_1 = require("@civ-clone/core-rule/RuleRegistry");
5
+ const AdditionalData_1 = require("@civ-clone/core-data-object/AdditionalData");
6
+ const CityBuild_1 = require("@civ-clone/core-city-build/CityBuild");
7
+ const Spend_1 = require("../Rules/Spend");
8
+ const getAdditionalData = (ruleRegistry = RuleRegistry_1.instance) => [
9
+ new AdditionalData_1.default(CityBuild_1.default, 'spendCost', (cityBuild) => ruleRegistry.process(Spend_1.default, cityBuild)),
10
+ ];
11
+ exports.getAdditionalData = getAdditionalData;
12
+ exports.default = exports.getAdditionalData;
13
+ //# sourceMappingURL=spend-cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spend-cost.js","sourceRoot":"","sources":["spend-cost.ts"],"names":[],"mappings":";;;AAAA,oEAG2C;AAC3C,+EAAwE;AACxE,oEAA6D;AAC7D,0CAAmC;AAE5B,MAAM,iBAAiB,GAAG,CAC/B,eAA6B,uBAAoB,EACjD,EAAE,CAAC;IACH,IAAI,wBAAc,CAAC,mBAAS,EAAE,WAAW,EAAE,CAAC,SAAoB,EAAE,EAAE,CAClE,YAAY,CAAC,OAAO,CAAC,eAAK,EAAE,SAAS,CAAC,CACvC;CACF,CAAC;AANW,QAAA,iBAAiB,qBAM5B;AAEF,kBAAe,yBAAiB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import {
2
+ RuleRegistry,
3
+ instance as ruleRegistryInstance,
4
+ } from '@civ-clone/core-rule/RuleRegistry';
5
+ import AdditionalData from '@civ-clone/core-data-object/AdditionalData';
6
+ import CityBuild from '@civ-clone/core-city-build/CityBuild';
7
+ import Spend from '../Rules/Spend';
8
+
9
+ export const getAdditionalData = (
10
+ ruleRegistry: RuleRegistry = ruleRegistryInstance
11
+ ) => [
12
+ new AdditionalData(CityBuild, 'spendCost', (cityBuild: CityBuild) =>
13
+ ruleRegistry.process(Spend, cityBuild)
14
+ ),
15
+ ];
16
+
17
+ export default getAdditionalData;
@@ -5,8 +5,8 @@ const PlayerTreasuryRegistry_1 = require("../PlayerTreasuryRegistry");
5
5
  const AdditionalData_1 = require("@civ-clone/core-data-object/AdditionalData");
6
6
  const Player_1 = require("@civ-clone/core-player/Player");
7
7
  const getAdditionalData = (playerTreasuryRegistry = PlayerTreasuryRegistry_1.instance) => [
8
- new AdditionalData_1.default(Player_1.default, 'treasury', (player) => playerTreasuryRegistry.getByPlayer(player)),
8
+ new AdditionalData_1.default(Player_1.default, 'treasuries', (player) => playerTreasuryRegistry.getByPlayer(player)),
9
9
  ];
10
10
  exports.getAdditionalData = getAdditionalData;
11
11
  exports.default = exports.getAdditionalData;
12
- //# sourceMappingURL=treasury.js.map
12
+ //# sourceMappingURL=treasuries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treasuries.js","sourceRoot":"","sources":["treasuries.ts"],"names":[],"mappings":";;;AAAA,sEAGmC;AACnC,+EAAwE;AACxE,0DAAmD;AAE5C,MAAM,iBAAiB,GAAG,CAC/B,yBAAiD,iCAA8B,EAC/E,EAAE,CAAC;IACH,IAAI,wBAAc,CAAC,gBAAM,EAAE,YAAY,EAAE,CAAC,MAAc,EAAE,EAAE,CAC1D,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,CAC3C;CACF,CAAC;AANW,QAAA,iBAAiB,qBAM5B;AAEF,kBAAe,yBAAiB,CAAC"}
@@ -8,7 +8,7 @@ import Player from '@civ-clone/core-player/Player';
8
8
  export const getAdditionalData = (
9
9
  playerTreasuryRegistry: PlayerTreasuryRegistry = playerTreasuryRegistryInstance
10
10
  ) => [
11
- new AdditionalData(Player, 'treasury', (player: Player) =>
11
+ new AdditionalData(Player, 'treasuries', (player: Player) =>
12
12
  playerTreasuryRegistry.getByPlayer(player)
13
13
  ),
14
14
  ];
@@ -1,22 +1,37 @@
1
1
  import { CityBuildRegistry } from '@civ-clone/core-city-build/CityBuildRegistry';
2
2
  import { RuleRegistry } from '@civ-clone/core-rule/RuleRegistry';
3
3
  import City from '@civ-clone/core-city/City';
4
+ import DataObject from '@civ-clone/core-data-object/DataObject';
4
5
  import Player from '@civ-clone/core-player/Player';
6
+ import SpendCost from './SpendCost';
5
7
  import Yield from '@civ-clone/core-yield/Yield';
6
8
  export interface IPlayerTreasury {
9
+ add(value: Yield | number, provider: string): void;
7
10
  buy(city: City): void;
8
- cost(city: City): Yield;
11
+ cost(city: City): SpendCost[];
9
12
  player(): Player;
13
+ set(value: Yield | number, provider: string): void;
14
+ subtract(value: Yield | number, provider: string): void;
15
+ yield(): typeof Yield;
10
16
  }
11
- export declare class PlayerTreasury extends Yield implements IPlayerTreasury {
17
+ export declare class PlayerTreasury
18
+ extends DataObject
19
+ implements IPlayerTreasury
20
+ {
12
21
  #private;
13
22
  constructor(
14
23
  player: Player,
24
+ YieldType: typeof Yield,
15
25
  cityBuildRegistry?: CityBuildRegistry,
16
26
  ruleRegistry?: RuleRegistry
17
27
  );
28
+ add(value: Yield | number): void;
18
29
  buy(city: City): void;
19
- cost(city: City): Yield;
30
+ cost(city: City): SpendCost[];
20
31
  player(): Player;
32
+ set(value: Yield | number): void;
33
+ subtract(value: Yield | number): void;
34
+ value(): number;
35
+ yield(): typeof Yield;
21
36
  }
22
37
  export default PlayerTreasury;
package/PlayerTreasury.js CHANGED
@@ -10,46 +10,72 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _PlayerTreasury_player, _PlayerTreasury_ruleRegistry, _PlayerTreasury_cityBuildRegistry;
13
+ var _PlayerTreasury_cityBuildRegistry, _PlayerTreasury_player, _PlayerTreasury_ruleRegistry, _PlayerTreasury_value, _PlayerTreasury_yield;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.PlayerTreasury = void 0;
16
16
  const CityBuildRegistry_1 = require("@civ-clone/core-city-build/CityBuildRegistry");
17
17
  const RuleRegistry_1 = require("@civ-clone/core-rule/RuleRegistry");
18
+ const DataObject_1 = require("@civ-clone/core-data-object/DataObject");
18
19
  const Spend_1 = require("./Rules/Spend");
19
20
  const Yield_1 = require("@civ-clone/core-yield/Yield");
20
- class PlayerTreasury extends Yield_1.default {
21
- constructor(player, cityBuildRegistry = CityBuildRegistry_1.instance, ruleRegistry = RuleRegistry_1.instance) {
21
+ const Rush_1 = require("./Rules/Rush");
22
+ class PlayerTreasury extends DataObject_1.default {
23
+ constructor(player, YieldType, cityBuildRegistry = CityBuildRegistry_1.instance, ruleRegistry = RuleRegistry_1.instance) {
22
24
  super();
25
+ _PlayerTreasury_cityBuildRegistry.set(this, void 0);
23
26
  _PlayerTreasury_player.set(this, void 0);
24
27
  _PlayerTreasury_ruleRegistry.set(this, void 0);
25
- _PlayerTreasury_cityBuildRegistry.set(this, void 0);
28
+ _PlayerTreasury_value.set(this, 0);
29
+ _PlayerTreasury_yield.set(this, void 0);
30
+ this.addKey('value', 'yield');
31
+ __classPrivateFieldSet(this, _PlayerTreasury_cityBuildRegistry, cityBuildRegistry, "f");
26
32
  __classPrivateFieldSet(this, _PlayerTreasury_player, player, "f");
27
33
  __classPrivateFieldSet(this, _PlayerTreasury_ruleRegistry, ruleRegistry, "f");
28
- __classPrivateFieldSet(this, _PlayerTreasury_cityBuildRegistry, cityBuildRegistry, "f");
34
+ __classPrivateFieldSet(this, _PlayerTreasury_yield, YieldType, "f");
35
+ }
36
+ add(value) {
37
+ if (value instanceof Yield_1.default) {
38
+ this.add(value.value());
39
+ return;
40
+ }
41
+ __classPrivateFieldSet(this, _PlayerTreasury_value, __classPrivateFieldGet(this, _PlayerTreasury_value, "f") + value, "f");
29
42
  }
30
43
  buy(city) {
31
- const cityBuild = __classPrivateFieldGet(this, _PlayerTreasury_cityBuildRegistry, "f").getByCity(city), cost = this.cost(city);
32
- if (city.player() !== __classPrivateFieldGet(this, _PlayerTreasury_player, "f") || this.value() < cost.value()) {
44
+ const cityBuild = __classPrivateFieldGet(this, _PlayerTreasury_cityBuildRegistry, "f").getByCity(city), [spendCost] = this.cost(city).filter((spendCost) => spendCost.resource() === __classPrivateFieldGet(this, _PlayerTreasury_yield, "f")), cost = spendCost.value();
45
+ if (city.player() !== __classPrivateFieldGet(this, _PlayerTreasury_player, "f") || this.value() < cost) {
33
46
  return;
34
47
  }
48
+ __classPrivateFieldGet(this, _PlayerTreasury_ruleRegistry, "f").process(Rush_1.default, cityBuild, spendCost);
35
49
  // TODO: do this via Rules and then use Production
36
50
  cityBuild.add(new Yield_1.default(cityBuild.remaining()));
37
- this.subtract(cost.value());
51
+ this.subtract(cost);
38
52
  }
39
53
  cost(city) {
40
54
  const cityBuild = __classPrivateFieldGet(this, _PlayerTreasury_cityBuildRegistry, "f").getByCity(city);
41
- return __classPrivateFieldGet(this, _PlayerTreasury_ruleRegistry, "f")
42
- .process(Spend_1.default, cityBuild)
43
- .reduce((totalYield, currentYield) => {
44
- totalYield.add(currentYield);
45
- return totalYield;
46
- });
55
+ return __classPrivateFieldGet(this, _PlayerTreasury_ruleRegistry, "f").process(Spend_1.default, cityBuild);
47
56
  }
48
57
  player() {
49
58
  return __classPrivateFieldGet(this, _PlayerTreasury_player, "f");
50
59
  }
60
+ set(value) {
61
+ __classPrivateFieldSet(this, _PlayerTreasury_value, 0, "f");
62
+ this.add(value);
63
+ }
64
+ subtract(value) {
65
+ if (value instanceof Yield_1.default) {
66
+ this.add(value.value());
67
+ return;
68
+ }
69
+ __classPrivateFieldSet(this, _PlayerTreasury_value, __classPrivateFieldGet(this, _PlayerTreasury_value, "f") - value, "f");
70
+ }
71
+ value() {
72
+ return __classPrivateFieldGet(this, _PlayerTreasury_value, "f");
73
+ }
74
+ yield() {
75
+ return __classPrivateFieldGet(this, _PlayerTreasury_yield, "f");
76
+ }
51
77
  }
52
78
  exports.PlayerTreasury = PlayerTreasury;
53
- _PlayerTreasury_player = new WeakMap(), _PlayerTreasury_ruleRegistry = new WeakMap(), _PlayerTreasury_cityBuildRegistry = new WeakMap();
79
+ _PlayerTreasury_cityBuildRegistry = new WeakMap(), _PlayerTreasury_player = new WeakMap(), _PlayerTreasury_ruleRegistry = new WeakMap(), _PlayerTreasury_value = new WeakMap(), _PlayerTreasury_yield = new WeakMap();
54
80
  exports.default = PlayerTreasury;
55
81
  //# sourceMappingURL=PlayerTreasury.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerTreasury.js","sourceRoot":"","sources":["PlayerTreasury.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oFAGsD;AACtD,oEAG2C;AAG3C,yCAAkC;AAClC,uDAAgD;AAQhD,MAAa,cAAe,SAAQ,eAAK;IAKvC,YACE,MAAc,EACd,oBAAuC,4BAAyB,EAChE,eAA6B,uBAAoB;QAEjD,KAAK,EAAE,CAAC;QATV,yCAAgB;QAChB,+CAA4B;QAC5B,oDAAsC;QASpC,uBAAA,IAAI,0BAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,gCAAiB,YAAY,MAAA,CAAC;QAClC,uBAAA,IAAI,qCAAsB,iBAAiB,MAAA,CAAC;IAC9C,CAAC;IAED,GAAG,CAAC,IAAU;QACZ,MAAM,SAAS,GAAG,uBAAA,IAAI,yCAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,EACvD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,uBAAA,IAAI,8BAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE;YACjE,OAAO;SACR;QAED,kDAAkD;QAClD,SAAS,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,IAAU;QACb,MAAM,SAAS,GAAG,uBAAA,IAAI,yCAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE1D,OAAO,uBAAA,IAAI,oCAAc;aACtB,OAAO,CAAC,eAAK,EAAE,SAAS,CAAC;aACzB,MAAM,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE;YACnC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAE7B,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM;QACJ,OAAO,uBAAA,IAAI,8BAAQ,CAAC;IACtB,CAAC;CACF;AA9CD,wCA8CC;;AAED,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;IAO5C,YACE,MAAc,EACd,SAAuB,EACvB,oBAAuC,4BAAyB,EAChE,eAA6B,uBAAoB;QAEjD,KAAK,EAAE,CAAC;QAZV,oDAAsC;QACtC,yCAAgB;QAChB,+CAA4B;QAC5B,gCAAiB,CAAC,EAAC;QACnB,wCAAqB;QAUnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9B,uBAAA,IAAI,qCAAsB,iBAAiB,MAAA,CAAC;QAC5C,uBAAA,IAAI,0BAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,gCAAiB,YAAY,MAAA,CAAC;QAClC,uBAAA,IAAI,yBAAU,SAAS,MAAA,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,+GAAe,KAAK,MAAA,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,IAAU;QACZ,MAAM,SAAS,GAAG,uBAAA,IAAI,yCAAmB,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,uBAAA,IAAI,6BAAO,CACpD,EACD,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,uBAAA,IAAI,8BAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE;YACzD,OAAO;SACR;QAED,uBAAA,IAAI,oCAAc,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,uBAAA,IAAI,yCAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE1D,OAAO,uBAAA,IAAI,oCAAc,CAAC,OAAO,CAAC,eAAK,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,MAAM;QACJ,OAAO,uBAAA,IAAI,8BAAQ,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAqB;QACvB,uBAAA,IAAI,yBAAU,CAAC,MAAA,CAAC;QAEhB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,KAAqB;QAC5B,IAAI,KAAK,YAAY,eAAK,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAExB,OAAO;SACR;QAED,+GAAe,KAAK,MAAA,CAAC;IACvB,CAAC;IAED,KAAK;QACH,OAAO,uBAAA,IAAI,6BAAO,CAAC;IACrB,CAAC;IAED,KAAK;QACH,OAAO,uBAAA,IAAI,6BAAO,CAAC;IACrB,CAAC;CACF;AApFD,wCAoFC;;AAED,kBAAe,cAAc,CAAC"}
package/PlayerTreasury.ts CHANGED
@@ -7,62 +7,107 @@ import {
7
7
  instance as ruleRegistryInstance,
8
8
  } from '@civ-clone/core-rule/RuleRegistry';
9
9
  import City from '@civ-clone/core-city/City';
10
+ import DataObject from '@civ-clone/core-data-object/DataObject';
10
11
  import Player from '@civ-clone/core-player/Player';
11
12
  import Spend from './Rules/Spend';
13
+ import SpendCost from './SpendCost';
12
14
  import Yield from '@civ-clone/core-yield/Yield';
15
+ import Rush from './Rules/Rush';
13
16
 
14
17
  export interface IPlayerTreasury {
18
+ add(value: Yield | number, provider: string): void;
15
19
  buy(city: City): void;
16
- cost(city: City): Yield;
20
+ cost(city: City): SpendCost[];
17
21
  player(): Player;
22
+ set(value: Yield | number, provider: string): void;
23
+ subtract(value: Yield | number, provider: string): void;
24
+ yield(): typeof Yield;
18
25
  }
19
26
 
20
- export class PlayerTreasury extends Yield implements IPlayerTreasury {
27
+ export class PlayerTreasury extends DataObject implements IPlayerTreasury {
28
+ #cityBuildRegistry: CityBuildRegistry;
21
29
  #player: Player;
22
30
  #ruleRegistry: RuleRegistry;
23
- #cityBuildRegistry: CityBuildRegistry;
31
+ #value: number = 0;
32
+ #yield: typeof Yield;
24
33
 
25
34
  constructor(
26
35
  player: Player,
36
+ YieldType: typeof Yield,
27
37
  cityBuildRegistry: CityBuildRegistry = cityBuildRegistryInstance,
28
38
  ruleRegistry: RuleRegistry = ruleRegistryInstance
29
39
  ) {
30
40
  super();
31
41
 
42
+ this.addKey('value', 'yield');
43
+
44
+ this.#cityBuildRegistry = cityBuildRegistry;
32
45
  this.#player = player;
33
46
  this.#ruleRegistry = ruleRegistry;
34
- this.#cityBuildRegistry = cityBuildRegistry;
47
+ this.#yield = YieldType;
48
+ }
49
+
50
+ add(value: Yield | number): void {
51
+ if (value instanceof Yield) {
52
+ this.add(value.value());
53
+
54
+ return;
55
+ }
56
+
57
+ this.#value += value;
35
58
  }
36
59
 
37
60
  buy(city: City): void {
38
61
  const cityBuild = this.#cityBuildRegistry.getByCity(city),
39
- cost = this.cost(city);
62
+ [spendCost] = this.cost(city).filter(
63
+ (spendCost) => spendCost.resource() === this.#yield
64
+ ),
65
+ cost = spendCost.value();
40
66
 
41
- if (city.player() !== this.#player || this.value() < cost.value()) {
67
+ if (city.player() !== this.#player || this.value() < cost) {
42
68
  return;
43
69
  }
44
70
 
71
+ this.#ruleRegistry.process(Rush, cityBuild, spendCost);
45
72
  // TODO: do this via Rules and then use Production
46
73
  cityBuild.add(new Yield(cityBuild.remaining()));
47
74
 
48
- this.subtract(cost.value());
75
+ this.subtract(cost);
49
76
  }
50
77
 
51
- cost(city: City): Yield {
78
+ cost(city: City): SpendCost[] {
52
79
  const cityBuild = this.#cityBuildRegistry.getByCity(city);
53
80
 
54
- return this.#ruleRegistry
55
- .process(Spend, cityBuild)
56
- .reduce((totalYield, currentYield) => {
57
- totalYield.add(currentYield);
58
-
59
- return totalYield;
60
- });
81
+ return this.#ruleRegistry.process(Spend, cityBuild);
61
82
  }
62
83
 
63
84
  player(): Player {
64
85
  return this.#player;
65
86
  }
87
+
88
+ set(value: Yield | number): void {
89
+ this.#value = 0;
90
+
91
+ this.add(value);
92
+ }
93
+
94
+ subtract(value: Yield | number): void {
95
+ if (value instanceof Yield) {
96
+ this.add(value.value());
97
+
98
+ return;
99
+ }
100
+
101
+ this.#value -= value;
102
+ }
103
+
104
+ value(): number {
105
+ return this.#value;
106
+ }
107
+
108
+ yield(): typeof Yield {
109
+ return this.#yield;
110
+ }
66
111
  }
67
112
 
68
113
  export default PlayerTreasury;
@@ -4,15 +4,18 @@ import {
4
4
  } from '@civ-clone/core-registry/EntityRegistry';
5
5
  import Player from '@civ-clone/core-player/Player';
6
6
  import PlayerTreasury from './PlayerTreasury';
7
+ import Yield from '@civ-clone/core-yield/Yield';
7
8
  interface IPlayerTreasuryRegistry extends IEntityRegistry<PlayerTreasury> {
8
- getByPlayer(player: Player): PlayerTreasury;
9
+ getByPlayer(player: Player): PlayerTreasury[];
10
+ getByPlayerAndType(player: Player, YieldType: typeof Yield): PlayerTreasury;
9
11
  }
10
12
  export declare class PlayerTreasuryRegistry
11
13
  extends EntityRegistry<PlayerTreasury>
12
14
  implements IPlayerTreasuryRegistry
13
15
  {
14
16
  constructor();
15
- getByPlayer(player: Player): PlayerTreasury;
17
+ getByPlayer(player: Player): PlayerTreasury[];
18
+ getByPlayerAndType(player: Player, YieldType: typeof Yield): PlayerTreasury;
16
19
  }
17
20
  export declare const instance: PlayerTreasuryRegistry;
18
21
  export default PlayerTreasuryRegistry;
@@ -8,9 +8,13 @@ class PlayerTreasuryRegistry extends EntityRegistry_1.EntityRegistry {
8
8
  super(PlayerTreasury_1.default);
9
9
  }
10
10
  getByPlayer(player) {
11
- const playerTreasuries = this.getBy('player', player);
11
+ return this.getBy('player', player);
12
+ }
13
+ getByPlayerAndType(player, YieldType) {
14
+ const playerTreasuries = this.filter((playerTreasury) => playerTreasury.player() === player &&
15
+ playerTreasury.yield() === YieldType);
12
16
  if (playerTreasuries.length !== 1) {
13
- throw new TypeError('Wrong number of PlayerTreasuries for player.');
17
+ throw new TypeError(`Wrong number of playerTreasuries: ${playerTreasuries.length}`);
14
18
  }
15
19
  return playerTreasuries[0];
16
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerTreasuryRegistry.js","sourceRoot":"","sources":["PlayerTreasuryRegistry.ts"],"names":[],"mappings":";;;AAAA,4EAGiD;AAEjD,qDAA8C;AAM9C,MAAa,sBACX,SAAQ,+BAA8B;IAGtC;QACE,KAAK,CAAC,wBAAc,CAAC,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEtD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;SACrE;QAED,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;CACF;AAjBD,wDAiBC;AAEY,QAAA,QAAQ,GAA2B,IAAI,sBAAsB,EAAE,CAAC;AAE7E,kBAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"PlayerTreasuryRegistry.js","sourceRoot":"","sources":["PlayerTreasuryRegistry.ts"],"names":[],"mappings":";;;AAAA,4EAGiD;AAEjD,qDAA8C;AAQ9C,MAAa,sBACX,SAAQ,+BAA8B;IAGtC;QACE,KAAK,CAAC,wBAAc,CAAC,CAAC;IACxB,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,SAAuB;QACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAClC,CAAC,cAA8B,EAAW,EAAE,CAC1C,cAAc,CAAC,MAAM,EAAE,KAAK,MAAM;YAClC,cAAc,CAAC,KAAK,EAAE,KAAK,SAAS,CACvC,CAAC;QAEF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,MAAM,IAAI,SAAS,CACjB,qCAAqC,gBAAgB,CAAC,MAAM,EAAE,CAC/D,CAAC;SACH;QAED,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;CACF;AA3BD,wDA2BC;AAEY,QAAA,QAAQ,GAA2B,IAAI,sBAAsB,EAAE,CAAC;AAE7E,kBAAe,sBAAsB,CAAC"}
@@ -4,9 +4,11 @@ import {
4
4
  } from '@civ-clone/core-registry/EntityRegistry';
5
5
  import Player from '@civ-clone/core-player/Player';
6
6
  import PlayerTreasury from './PlayerTreasury';
7
+ import Yield from '@civ-clone/core-yield/Yield';
7
8
 
8
9
  interface IPlayerTreasuryRegistry extends IEntityRegistry<PlayerTreasury> {
9
- getByPlayer(player: Player): PlayerTreasury;
10
+ getByPlayer(player: Player): PlayerTreasury[];
11
+ getByPlayerAndType(player: Player, YieldType: typeof Yield): PlayerTreasury;
10
12
  }
11
13
 
12
14
  export class PlayerTreasuryRegistry
@@ -17,11 +19,21 @@ export class PlayerTreasuryRegistry
17
19
  super(PlayerTreasury);
18
20
  }
19
21
 
20
- getByPlayer(player: Player): PlayerTreasury {
21
- const playerTreasuries = this.getBy('player', player);
22
+ getByPlayer(player: Player): PlayerTreasury[] {
23
+ return this.getBy('player', player);
24
+ }
25
+
26
+ getByPlayerAndType(player: Player, YieldType: typeof Yield): PlayerTreasury {
27
+ const playerTreasuries = this.filter(
28
+ (playerTreasury: PlayerTreasury): boolean =>
29
+ playerTreasury.player() === player &&
30
+ playerTreasury.yield() === YieldType
31
+ );
22
32
 
23
33
  if (playerTreasuries.length !== 1) {
24
- throw new TypeError('Wrong number of PlayerTreasuries for player.');
34
+ throw new TypeError(
35
+ `Wrong number of playerTreasuries: ${playerTreasuries.length}`
36
+ );
25
37
  }
26
38
 
27
39
  return playerTreasuries[0];
@@ -0,0 +1,5 @@
1
+ import CityBuild from '@civ-clone/core-city-build/CityBuild';
2
+ import Rule from '@civ-clone/core-rule/Rule';
3
+ import SpendCost from '../SpendCost';
4
+ export declare class Rush extends Rule<[CityBuild, SpendCost], void> {}
5
+ export default Rush;
package/Rules/Rush.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Rush = void 0;
4
+ const Rule_1 = require("@civ-clone/core-rule/Rule");
5
+ class Rush extends Rule_1.default {
6
+ }
7
+ exports.Rush = Rush;
8
+ exports.default = Rush;
9
+ //# sourceMappingURL=Rush.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Rush.js","sourceRoot":"","sources":["Rush.ts"],"names":[],"mappings":";;;AACA,oDAA6C;AAG7C,MAAa,IAAK,SAAQ,cAAkC;CAAG;AAA/D,oBAA+D;AAE/D,kBAAe,IAAI,CAAC"}
package/Rules/Rush.ts ADDED
@@ -0,0 +1,7 @@
1
+ import CityBuild from '@civ-clone/core-city-build/CityBuild';
2
+ import Rule from '@civ-clone/core-rule/Rule';
3
+ import SpendCost from '../SpendCost';
4
+
5
+ export class Rush extends Rule<[CityBuild, SpendCost], void> {}
6
+
7
+ export default Rush;
package/Rules/Spend.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import CityBuild from '@civ-clone/core-city-build/CityBuild';
2
2
  import Rule from '@civ-clone/core-rule/Rule';
3
- import Yield from '@civ-clone/core-yield/Yield';
4
- export declare class Spend extends Rule<[CityBuild], Yield> {}
3
+ import SpendCost from '../SpendCost';
4
+ export declare class Spend extends Rule<[CityBuild], SpendCost> {}
5
5
  export default Spend;
@@ -1 +1 @@
1
- {"version":3,"file":"Spend.js","sourceRoot":"","sources":["Spend.ts"],"names":[],"mappings":";;;AACA,oDAA6C;AAG7C,MAAa,KAAM,SAAQ,cAAwB;CAAG;AAAtD,sBAAsD;AAEtD,kBAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Spend.js","sourceRoot":"","sources":["Spend.ts"],"names":[],"mappings":";;;AACA,oDAA6C;AAG7C,MAAa,KAAM,SAAQ,cAA4B;CAAG;AAA1D,sBAA0D;AAE1D,kBAAe,KAAK,CAAC"}
package/Rules/Spend.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import CityBuild from '@civ-clone/core-city-build/CityBuild';
2
2
  import Rule from '@civ-clone/core-rule/Rule';
3
- import Yield from '@civ-clone/core-yield/Yield';
3
+ import SpendCost from '../SpendCost';
4
4
 
5
- export class Spend extends Rule<[CityBuild], Yield> {}
5
+ export class Spend extends Rule<[CityBuild], SpendCost> {}
6
6
 
7
7
  export default Spend;
@@ -1,9 +1,5 @@
1
1
  import City from '@civ-clone/core-city/City';
2
- import { IRuleRegistry } from '@civ-clone/core-rule/RuleRegistry';
3
2
  import PlayerTreasury from '../PlayerTreasury';
4
3
  import Rule from '@civ-clone/core-rule/Rule';
5
- declare type UpdatedArgs = [PlayerTreasury, City];
6
- export declare class Updated extends Rule<UpdatedArgs, void> {}
4
+ export declare class Updated extends Rule<[PlayerTreasury, City], void> {}
7
5
  export default Updated;
8
- export interface IUpdatedRegistry
9
- extends IRuleRegistry<Updated, UpdatedArgs, void> {}
@@ -1 +1 @@
1
- {"version":3,"file":"Updated.js","sourceRoot":"","sources":["Updated.ts"],"names":[],"mappings":";;;AAGA,oDAA6C;AAI7C,MAAa,OAAQ,SAAQ,cAAuB;CAAG;AAAvD,0BAAuD;AAEvD,kBAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Updated.js","sourceRoot":"","sources":["Updated.ts"],"names":[],"mappings":";;;AAEA,oDAA6C;AAE7C,MAAa,OAAQ,SAAQ,cAAkC;CAAG;AAAlE,0BAAkE;AAElE,kBAAe,OAAO,CAAC"}
package/Rules/Updated.ts CHANGED
@@ -1,13 +1,7 @@
1
1
  import City from '@civ-clone/core-city/City';
2
- import { IRuleRegistry } from '@civ-clone/core-rule/RuleRegistry';
3
2
  import PlayerTreasury from '../PlayerTreasury';
4
3
  import Rule from '@civ-clone/core-rule/Rule';
5
4
 
6
- type UpdatedArgs = [PlayerTreasury, City];
7
-
8
- export class Updated extends Rule<UpdatedArgs, void> {}
5
+ export class Updated extends Rule<[PlayerTreasury, City], void> {}
9
6
 
10
7
  export default Updated;
11
-
12
- export interface IUpdatedRegistry
13
- extends IRuleRegistry<Updated, UpdatedArgs, void> {}
package/SpendCost.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import DataObject from '@civ-clone/core-data-object/DataObject';
2
+ import Yield from '@civ-clone/core-yield/Yield';
3
+ interface ISpend {
4
+ resource(): typeof Yield;
5
+ value(): number;
6
+ }
7
+ export declare class SpendCost extends DataObject implements ISpend {
8
+ #private;
9
+ constructor(resource: typeof Yield, value: number);
10
+ resource(): typeof Yield;
11
+ value(): number;
12
+ }
13
+ export default SpendCost;
package/SpendCost.js ADDED
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _SpendCost_resource, _SpendCost_value;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SpendCost = void 0;
16
+ const DataObject_1 = require("@civ-clone/core-data-object/DataObject");
17
+ class SpendCost extends DataObject_1.default {
18
+ constructor(resource, value) {
19
+ super();
20
+ _SpendCost_resource.set(this, void 0);
21
+ _SpendCost_value.set(this, void 0);
22
+ this.addKey('resource', 'value');
23
+ __classPrivateFieldSet(this, _SpendCost_resource, resource, "f");
24
+ __classPrivateFieldSet(this, _SpendCost_value, value, "f");
25
+ }
26
+ resource() {
27
+ return __classPrivateFieldGet(this, _SpendCost_resource, "f");
28
+ }
29
+ value() {
30
+ return __classPrivateFieldGet(this, _SpendCost_value, "f");
31
+ }
32
+ }
33
+ exports.SpendCost = SpendCost;
34
+ _SpendCost_resource = new WeakMap(), _SpendCost_value = new WeakMap();
35
+ exports.default = SpendCost;
36
+ //# sourceMappingURL=SpendCost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpendCost.js","sourceRoot":"","sources":["SpendCost.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,uEAAgE;AAQhE,MAAa,SAAU,SAAQ,oBAAU;IAIvC,YAAY,QAAsB,EAAE,KAAa;QAC/C,KAAK,EAAE,CAAC;QAJV,sCAAwB;QACxB,mCAAe;QAKb,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjC,uBAAA,IAAI,uBAAa,QAAQ,MAAA,CAAC;QAC1B,uBAAA,IAAI,oBAAU,KAAK,MAAA,CAAC;IACtB,CAAC;IAED,QAAQ;QACN,OAAO,uBAAA,IAAI,2BAAU,CAAC;IACxB,CAAC;IAED,KAAK;QACH,OAAO,uBAAA,IAAI,wBAAO,CAAC;IACrB,CAAC;CACF;AApBD,8BAoBC;;AAED,kBAAe,SAAS,CAAC"}
package/SpendCost.ts ADDED
@@ -0,0 +1,31 @@
1
+ import DataObject from '@civ-clone/core-data-object/DataObject';
2
+ import Yield from '@civ-clone/core-yield/Yield';
3
+
4
+ interface ISpend {
5
+ resource(): typeof Yield;
6
+ value(): number;
7
+ }
8
+
9
+ export class SpendCost extends DataObject implements ISpend {
10
+ #resource: typeof Yield;
11
+ #value: number;
12
+
13
+ constructor(resource: typeof Yield, value: number) {
14
+ super();
15
+
16
+ this.addKey('resource', 'value');
17
+
18
+ this.#resource = resource;
19
+ this.#value = value;
20
+ }
21
+
22
+ resource(): typeof Yield {
23
+ return this.#resource;
24
+ }
25
+
26
+ value(): number {
27
+ return this.#value;
28
+ }
29
+ }
30
+
31
+ export default SpendCost;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civ-clone/core-treasury",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "main": "index.js",
5
5
  "repository": "git@github.com:civ-clone/core-treasury.git",
6
6
  "keywords": [
@@ -23,6 +23,7 @@
23
23
  "dependencies": {
24
24
  "@civ-clone/core-city": "^0.1.0",
25
25
  "@civ-clone/core-city-build": "^0.1.0",
26
+ "@civ-clone/core-data-object": "^0.1.0",
26
27
  "@civ-clone/core-player": "^0.1.0",
27
28
  "@civ-clone/core-registry": "^0.1.0",
28
29
  "@civ-clone/core-rule": "^0.1.0",
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const AdditionalDataRegistry_1 = require("@civ-clone/core-data-object/AdditionalDataRegistry");
4
- const treasury_1 = require("./AdditionalData/treasury");
5
- AdditionalDataRegistry_1.instance.register(...(0, treasury_1.default)());
4
+ const spend_cost_1 = require("./AdditionalData/spend-cost");
5
+ const treasuries_1 = require("./AdditionalData/treasuries");
6
+ AdditionalDataRegistry_1.instance.register(...(0, spend_cost_1.default)(), ...(0, treasuries_1.default)());
6
7
  //# sourceMappingURL=registerAdditionalData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registerAdditionalData.js","sourceRoot":"","sources":["registerAdditionalData.ts"],"names":[],"mappings":";;AAAA,+FAAgH;AAChH,wDAAiD;AAEjD,iCAA8B,CAAC,QAAQ,CAAC,GAAG,IAAA,kBAAQ,GAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"registerAdditionalData.js","sourceRoot":"","sources":["registerAdditionalData.ts"],"names":[],"mappings":";;AAAA,+FAAgH;AAChH,4DAAoD;AACpD,4DAAmD;AAEnD,iCAA8B,CAAC,QAAQ,CAAC,GAAG,IAAA,oBAAS,GAAE,EAAE,GAAG,IAAA,oBAAQ,GAAE,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { instance as additionalDataRegistryInstance } from '@civ-clone/core-data-object/AdditionalDataRegistry';
2
- import treasury from './AdditionalData/treasury';
2
+ import spendCost from './AdditionalData/spend-cost';
3
+ import treasury from './AdditionalData/treasuries';
3
4
 
4
- additionalDataRegistryInstance.register(...treasury());
5
+ additionalDataRegistryInstance.register(...spendCost(), ...treasury());
@@ -1 +0,0 @@
1
- {"version":3,"file":"treasury.js","sourceRoot":"","sources":["treasury.ts"],"names":[],"mappings":";;;AAAA,sEAGmC;AACnC,+EAAwE;AACxE,0DAAmD;AAE5C,MAAM,iBAAiB,GAAG,CAC/B,yBAAiD,iCAA8B,EAC/E,EAAE,CAAC;IACH,IAAI,wBAAc,CAAC,gBAAM,EAAE,UAAU,EAAE,CAAC,MAAc,EAAE,EAAE,CACxD,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,CAC3C;CACF,CAAC;AANW,QAAA,iBAAiB,qBAM5B;AAEF,kBAAe,yBAAiB,CAAC"}