@civ-clone/core-treasury 0.1.3 → 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.
- package/AdditionalData/spend-cost.d.ts +6 -0
- package/AdditionalData/spend-cost.js +13 -0
- package/AdditionalData/spend-cost.js.map +1 -0
- package/AdditionalData/spend-cost.ts +17 -0
- package/AdditionalData/{treasury.d.ts → treasuries.d.ts} +0 -0
- package/AdditionalData/{treasury.js → treasuries.js} +2 -2
- package/AdditionalData/treasuries.js.map +1 -0
- package/AdditionalData/{treasury.ts → treasuries.ts} +1 -1
- package/PlayerTreasury.d.ts +18 -3
- package/PlayerTreasury.js +42 -16
- package/PlayerTreasury.js.map +1 -1
- package/PlayerTreasury.ts +61 -17
- package/PlayerTreasuryRegistry.d.ts +5 -2
- package/PlayerTreasuryRegistry.js +6 -2
- package/PlayerTreasuryRegistry.js.map +1 -1
- package/PlayerTreasuryRegistry.ts +16 -4
- package/Rules/Rush.d.ts +5 -0
- package/Rules/Rush.js +9 -0
- package/Rules/Rush.js.map +1 -0
- package/Rules/Rush.ts +7 -0
- package/Rules/Spend.d.ts +2 -2
- package/Rules/Spend.js.map +1 -1
- package/Rules/Spend.ts +2 -2
- package/SpendCost.d.ts +13 -0
- package/SpendCost.js +36 -0
- package/SpendCost.js.map +1 -0
- package/SpendCost.ts +31 -0
- package/package.json +2 -1
- package/registerAdditionalData.js +3 -2
- package/registerAdditionalData.js.map +1 -1
- package/registerAdditionalData.ts +3 -2
- package/AdditionalData/treasury.js.map +0 -1
|
@@ -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;
|
|
File without changes
|
|
@@ -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, '
|
|
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=
|
|
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, '
|
|
11
|
+
new AdditionalData(Player, 'treasuries', (player: Player) =>
|
|
12
12
|
playerTreasuryRegistry.getByPlayer(player)
|
|
13
13
|
),
|
|
14
14
|
];
|
package/PlayerTreasury.d.ts
CHANGED
|
@@ -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):
|
|
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
|
|
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):
|
|
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,
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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,
|
|
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),
|
|
32
|
-
if (city.player() !== __classPrivateFieldGet(this, _PlayerTreasury_player, "f") || this.value() < cost
|
|
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
|
|
51
|
+
this.subtract(cost);
|
|
38
52
|
}
|
|
39
53
|
cost(city) {
|
|
40
|
-
const cityBuild = __classPrivateFieldGet(this, _PlayerTreasury_cityBuildRegistry, "f").getByCity(city)
|
|
41
|
-
return __classPrivateFieldGet(this, _PlayerTreasury_ruleRegistry, "f")
|
|
42
|
-
.process(Spend_1.default, cityBuild, cost)
|
|
43
|
-
.reduce((totalYield, currentYield) => {
|
|
44
|
-
totalYield.add(currentYield);
|
|
45
|
-
return totalYield;
|
|
46
|
-
});
|
|
54
|
+
const cityBuild = __classPrivateFieldGet(this, _PlayerTreasury_cityBuildRegistry, "f").getByCity(city);
|
|
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(),
|
|
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
|
package/PlayerTreasury.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerTreasury.js","sourceRoot":"","sources":["PlayerTreasury.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oFAGsD;AACtD,oEAG2C;
|
|
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,63 +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):
|
|
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
|
|
27
|
+
export class PlayerTreasury extends DataObject implements IPlayerTreasury {
|
|
28
|
+
#cityBuildRegistry: CityBuildRegistry;
|
|
21
29
|
#player: Player;
|
|
22
30
|
#ruleRegistry: RuleRegistry;
|
|
23
|
-
#
|
|
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.#
|
|
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
|
-
|
|
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
|
|
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
|
|
75
|
+
this.subtract(cost);
|
|
49
76
|
}
|
|
50
77
|
|
|
51
|
-
cost(city: City):
|
|
52
|
-
const cityBuild = this.#cityBuildRegistry.getByCity(city)
|
|
53
|
-
cost = new Yield();
|
|
54
|
-
|
|
55
|
-
return this.#ruleRegistry
|
|
56
|
-
.process(Spend, cityBuild, cost)
|
|
57
|
-
.reduce((totalYield, currentYield) => {
|
|
58
|
-
totalYield.add(currentYield);
|
|
78
|
+
cost(city: City): SpendCost[] {
|
|
79
|
+
const cityBuild = this.#cityBuildRegistry.getByCity(city);
|
|
59
80
|
|
|
60
|
-
|
|
61
|
-
});
|
|
81
|
+
return this.#ruleRegistry.process(Spend, cityBuild);
|
|
62
82
|
}
|
|
63
83
|
|
|
64
84
|
player(): Player {
|
|
65
85
|
return this.#player;
|
|
66
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
|
+
}
|
|
67
111
|
}
|
|
68
112
|
|
|
69
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
|
-
|
|
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(
|
|
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;
|
|
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
|
-
|
|
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(
|
|
34
|
+
throw new TypeError(
|
|
35
|
+
`Wrong number of playerTreasuries: ${playerTreasuries.length}`
|
|
36
|
+
);
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
return playerTreasuries[0];
|
package/Rules/Rush.d.ts
ADDED
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
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
|
|
4
|
-
export declare class Spend extends Rule<[CityBuild
|
|
3
|
+
import SpendCost from '../SpendCost';
|
|
4
|
+
export declare class Spend extends Rule<[CityBuild], SpendCost> {}
|
|
5
5
|
export default Spend;
|
package/Rules/Spend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spend.js","sourceRoot":"","sources":["Spend.ts"],"names":[],"mappings":";;;AACA,oDAA6C;AAG7C,MAAa,KAAM,SAAQ,
|
|
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
|
|
3
|
+
import SpendCost from '../SpendCost';
|
|
4
4
|
|
|
5
|
-
export class Spend extends Rule<[CityBuild
|
|
5
|
+
export class Spend extends Rule<[CityBuild], SpendCost> {}
|
|
6
6
|
|
|
7
7
|
export default Spend;
|
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
|
package/SpendCost.js.map
ADDED
|
@@ -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.
|
|
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
|
|
5
|
-
|
|
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,
|
|
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
|
|
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"}
|