@civ-clone/core-treasury 0.1.0 → 0.1.2
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/.deepsource.toml +14 -0
- package/.github/workflows/build-on-push.yml +2 -3
- package/AdditionalData/treasury.d.ts +6 -0
- package/AdditionalData/treasury.js +12 -0
- package/AdditionalData/treasury.js.map +1 -0
- package/AdditionalData/treasury.ts +16 -0
- package/PlayerTreasury.js +27 -27
- package/PlayerTreasury.js.map +1 -1
- package/PlayerTreasury.ts +10 -6
- package/PlayerTreasuryRegistry.d.ts +2 -1
- package/PlayerTreasuryRegistry.js.map +1 -1
- package/PlayerTreasuryRegistry.ts +2 -1
- package/README.md +8 -1
- package/Rules/Spend.d.ts +1 -5
- package/Rules/Spend.js.map +1 -1
- package/Rules/Spend.ts +1 -7
- package/index.d.ts +1 -0
- package/index.js +4 -0
- package/index.js.map +1 -0
- package/index.ts +1 -0
- package/package.json +2 -3
- package/registerAdditionalData.d.ts +1 -0
- package/registerAdditionalData.js +6 -0
- package/registerAdditionalData.js.map +1 -0
- package/registerAdditionalData.ts +4 -0
- package/tsconfig.json +2 -2
package/.deepsource.toml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PlayerTreasuryRegistry } from '../PlayerTreasuryRegistry';
|
|
2
|
+
import AdditionalData from '@civ-clone/core-data-object/AdditionalData';
|
|
3
|
+
export declare const getAdditionalData: (
|
|
4
|
+
playerTreasuryRegistry?: PlayerTreasuryRegistry
|
|
5
|
+
) => AdditionalData[];
|
|
6
|
+
export default getAdditionalData;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAdditionalData = void 0;
|
|
4
|
+
const PlayerTreasuryRegistry_1 = require("../PlayerTreasuryRegistry");
|
|
5
|
+
const AdditionalData_1 = require("@civ-clone/core-data-object/AdditionalData");
|
|
6
|
+
const Player_1 = require("@civ-clone/core-player/Player");
|
|
7
|
+
const getAdditionalData = (playerTreasuryRegistry = PlayerTreasuryRegistry_1.instance) => [
|
|
8
|
+
new AdditionalData_1.default(Player_1.default, 'treasury', (player) => playerTreasuryRegistry.getByPlayer(player)),
|
|
9
|
+
];
|
|
10
|
+
exports.getAdditionalData = getAdditionalData;
|
|
11
|
+
exports.default = exports.getAdditionalData;
|
|
12
|
+
//# sourceMappingURL=treasury.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PlayerTreasuryRegistry,
|
|
3
|
+
instance as playerTreasuryRegistryInstance,
|
|
4
|
+
} from '../PlayerTreasuryRegistry';
|
|
5
|
+
import AdditionalData from '@civ-clone/core-data-object/AdditionalData';
|
|
6
|
+
import Player from '@civ-clone/core-player/Player';
|
|
7
|
+
|
|
8
|
+
export const getAdditionalData = (
|
|
9
|
+
playerTreasuryRegistry: PlayerTreasuryRegistry = playerTreasuryRegistryInstance
|
|
10
|
+
) => [
|
|
11
|
+
new AdditionalData(Player, 'treasury', (player: Player) =>
|
|
12
|
+
playerTreasuryRegistry.getByPlayer(player)
|
|
13
|
+
),
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
export default getAdditionalData;
|
package/PlayerTreasury.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver,
|
|
3
|
-
if (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return value;
|
|
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;
|
|
8
7
|
};
|
|
9
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver,
|
|
10
|
-
if (!
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return privateMap.get(receiver);
|
|
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);
|
|
14
12
|
};
|
|
15
|
-
var
|
|
13
|
+
var _PlayerTreasury_player, _PlayerTreasury_ruleRegistry, _PlayerTreasury_cityBuildRegistry;
|
|
16
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
15
|
exports.PlayerTreasury = void 0;
|
|
18
16
|
const CityBuildRegistry_1 = require("@civ-clone/core-city-build/CityBuildRegistry");
|
|
@@ -22,16 +20,16 @@ const Yield_1 = require("@civ-clone/core-yield/Yield");
|
|
|
22
20
|
class PlayerTreasury extends Yield_1.default {
|
|
23
21
|
constructor(player, cityBuildRegistry = CityBuildRegistry_1.instance, ruleRegistry = RuleRegistry_1.instance) {
|
|
24
22
|
super();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
__classPrivateFieldSet(this,
|
|
29
|
-
__classPrivateFieldSet(this,
|
|
30
|
-
__classPrivateFieldSet(this,
|
|
23
|
+
_PlayerTreasury_player.set(this, void 0);
|
|
24
|
+
_PlayerTreasury_ruleRegistry.set(this, void 0);
|
|
25
|
+
_PlayerTreasury_cityBuildRegistry.set(this, void 0);
|
|
26
|
+
__classPrivateFieldSet(this, _PlayerTreasury_player, player, "f");
|
|
27
|
+
__classPrivateFieldSet(this, _PlayerTreasury_ruleRegistry, ruleRegistry, "f");
|
|
28
|
+
__classPrivateFieldSet(this, _PlayerTreasury_cityBuildRegistry, cityBuildRegistry, "f");
|
|
31
29
|
}
|
|
32
30
|
buy(city) {
|
|
33
|
-
const cityBuild = __classPrivateFieldGet(this,
|
|
34
|
-
if (city.player() !== __classPrivateFieldGet(this,
|
|
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()) {
|
|
35
33
|
return;
|
|
36
34
|
}
|
|
37
35
|
// TODO: do this via Rules and then use Production
|
|
@@ -39,17 +37,19 @@ class PlayerTreasury extends Yield_1.default {
|
|
|
39
37
|
this.subtract(cost.value());
|
|
40
38
|
}
|
|
41
39
|
cost(city) {
|
|
42
|
-
const cityBuild = __classPrivateFieldGet(this,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
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
|
+
});
|
|
47
47
|
}
|
|
48
48
|
player() {
|
|
49
|
-
return __classPrivateFieldGet(this,
|
|
49
|
+
return __classPrivateFieldGet(this, _PlayerTreasury_player, "f");
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
exports.PlayerTreasury = PlayerTreasury;
|
|
53
|
-
|
|
53
|
+
_PlayerTreasury_player = new WeakMap(), _PlayerTreasury_ruleRegistry = new WeakMap(), _PlayerTreasury_cityBuildRegistry = new WeakMap();
|
|
54
54
|
exports.default = PlayerTreasury;
|
|
55
55
|
//# sourceMappingURL=PlayerTreasury.js.map
|
package/PlayerTreasury.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerTreasury.js","sourceRoot":"","sources":["PlayerTreasury.ts"],"names":[],"mappings":"
|
|
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"}
|
package/PlayerTreasury.ts
CHANGED
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
RuleRegistry,
|
|
7
7
|
instance as ruleRegistryInstance,
|
|
8
8
|
} from '@civ-clone/core-rule/RuleRegistry';
|
|
9
|
-
import { Spend, ISpendRegistry } from './Rules/Spend';
|
|
10
9
|
import City from '@civ-clone/core-city/City';
|
|
11
10
|
import Player from '@civ-clone/core-player/Player';
|
|
11
|
+
import Spend from './Rules/Spend';
|
|
12
12
|
import Yield from '@civ-clone/core-yield/Yield';
|
|
13
13
|
|
|
14
14
|
export interface IPlayerTreasury {
|
|
@@ -37,6 +37,7 @@ export class PlayerTreasury extends Yield implements IPlayerTreasury {
|
|
|
37
37
|
buy(city: City): void {
|
|
38
38
|
const cityBuild = this.#cityBuildRegistry.getByCity(city),
|
|
39
39
|
cost = this.cost(city);
|
|
40
|
+
|
|
40
41
|
if (city.player() !== this.#player || this.value() < cost.value()) {
|
|
41
42
|
return;
|
|
42
43
|
}
|
|
@@ -48,12 +49,15 @@ export class PlayerTreasury extends Yield implements IPlayerTreasury {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
cost(city: City): Yield {
|
|
51
|
-
const cityBuild = this.#cityBuildRegistry.getByCity(city)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
const cityBuild = this.#cityBuildRegistry.getByCity(city);
|
|
53
|
+
|
|
54
|
+
return this.#ruleRegistry
|
|
55
|
+
.process(Spend, cityBuild)
|
|
56
|
+
.reduce((totalYield, currentYield) => {
|
|
57
|
+
totalYield.add(currentYield);
|
|
55
58
|
|
|
56
|
-
|
|
59
|
+
return totalYield;
|
|
60
|
+
});
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
player(): Player {
|
|
@@ -9,7 +9,8 @@ interface IPlayerTreasuryRegistry extends IEntityRegistry<PlayerTreasury> {
|
|
|
9
9
|
}
|
|
10
10
|
export declare class PlayerTreasuryRegistry
|
|
11
11
|
extends EntityRegistry<PlayerTreasury>
|
|
12
|
-
implements IPlayerTreasuryRegistry
|
|
12
|
+
implements IPlayerTreasuryRegistry
|
|
13
|
+
{
|
|
13
14
|
constructor();
|
|
14
15
|
getByPlayer(player: Player): PlayerTreasury;
|
|
15
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlayerTreasuryRegistry.js","sourceRoot":"","sources":["PlayerTreasuryRegistry.ts"],"names":[],"mappings":";;;AAAA,4EAGiD;AAEjD,qDAA8C;AAM9C,MAAa,sBACX,SAAQ,+BAA8B;
|
|
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"}
|
|
@@ -11,7 +11,8 @@ interface IPlayerTreasuryRegistry extends IEntityRegistry<PlayerTreasury> {
|
|
|
11
11
|
|
|
12
12
|
export class PlayerTreasuryRegistry
|
|
13
13
|
extends EntityRegistry<PlayerTreasury>
|
|
14
|
-
implements IPlayerTreasuryRegistry
|
|
14
|
+
implements IPlayerTreasuryRegistry
|
|
15
|
+
{
|
|
15
16
|
constructor() {
|
|
16
17
|
super(PlayerTreasury);
|
|
17
18
|
}
|
package/README.md
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
# core-treasury
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Classes related to the concept of a `Player` having a treasury of a `Yield`.
|
|
4
4
|
|
|
5
|
+
This could probably benefit from a bit of a rewrite having multiple stores of `Yield`s (`Gold`, `Faith`, etc) that can
|
|
6
|
+
be spent.
|
|
7
|
+
|
|
8
|
+
It would also be nice to separate out the concepts of "buy" and "rush". This would also enable the (Civ 2?) concept of
|
|
9
|
+
sacrificing population to build items quickly.
|
|
10
|
+
|
|
11
|
+
Would be nice to add some core unit tests here too.
|
package/Rules/Spend.d.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import CityBuild from '@civ-clone/core-city-build/CityBuild';
|
|
2
|
-
import { IRuleRegistry } from '@civ-clone/core-rule/RuleRegistry';
|
|
3
2
|
import Rule from '@civ-clone/core-rule/Rule';
|
|
4
3
|
import Yield from '@civ-clone/core-yield/Yield';
|
|
5
|
-
declare
|
|
6
|
-
export declare class Spend extends Rule<SpendArgs, Yield> {}
|
|
4
|
+
export declare class Spend extends Rule<[CityBuild], Yield> {}
|
|
7
5
|
export default Spend;
|
|
8
|
-
export interface ISpendRegistry
|
|
9
|
-
extends IRuleRegistry<Spend, SpendArgs, Yield> {}
|
package/Rules/Spend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spend.js","sourceRoot":"","sources":["Spend.ts"],"names":[],"mappings":";;;
|
|
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"}
|
package/Rules/Spend.ts
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import CityBuild from '@civ-clone/core-city-build/CityBuild';
|
|
2
|
-
import { IRuleRegistry } from '@civ-clone/core-rule/RuleRegistry';
|
|
3
2
|
import Rule from '@civ-clone/core-rule/Rule';
|
|
4
3
|
import Yield from '@civ-clone/core-yield/Yield';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export class Spend extends Rule<SpendArgs, Yield> {}
|
|
5
|
+
export class Spend extends Rule<[CityBuild], Yield> {}
|
|
9
6
|
|
|
10
7
|
export default Spend;
|
|
11
|
-
|
|
12
|
-
export interface ISpendRegistry
|
|
13
|
-
extends IRuleRegistry<Spend, SpendArgs, Yield> {}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './registerAdditionalData';
|
package/index.js
ADDED
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;AAAA,oCAAkC"}
|
package/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './registerAdditionalData';
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@civ-clone/core-treasury",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"main": "index.js",
|
|
4
5
|
"repository": "git@github.com:civ-clone/core-treasury.git",
|
|
5
6
|
"keywords": [
|
|
6
7
|
"typescript",
|
|
@@ -13,8 +14,6 @@
|
|
|
13
14
|
"build": "npm run ts:compile && npm run prettier:format",
|
|
14
15
|
"prettier:check": "prettier --config .prettierrc '**/*.ts'",
|
|
15
16
|
"prettier:format": "prettier --config .prettierrc '**/*.ts' --write",
|
|
16
|
-
"test": "ts-mocha ./tests/*.test.ts",
|
|
17
|
-
"test:coverage": "c8 ts-mocha ./tests/*.test.ts",
|
|
18
17
|
"ts:compile": "tsc --build tsconfig.json"
|
|
19
18
|
},
|
|
20
19
|
"devDependencies": {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
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)());
|
|
6
|
+
//# sourceMappingURL=registerAdditionalData.js.map
|
|
@@ -0,0 +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"}
|