fix: split multi-type golem core upkeep across all mana types (issue #315)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m20s

This commit is contained in:
2026-06-08 13:29:30 +02:00
parent 0894ee8c55
commit b4b499c1b1
9 changed files with 294 additions and 26 deletions
@@ -186,11 +186,49 @@ describe('Computed stats', () => {
const design = makeDesign('basic', 'earth', 'simple');
const stats = computeGolemStats(design);
// Basic core has 1 mana type (earth), so all upkeep goes to earth
expect(stats.upkeepCostPerHour.length).toBe(1);
expect(stats.upkeepCostPerHour[0].amount).toBe(1.0);
expect(stats.upkeepCostPerHour[0].element).toBe('earth');
});
it('multi-type core splits upkeep evenly across selected mana types', () => {
const design = makeDesign('intermediate', 'earth', 'simple');
design.selectedManaTypes = ['fire', 'water'];
const stats = computeGolemStats(design);
// Intermediate core: manaRegen=1.5, upkeep=3.0/hr split across 2 types = 1.5 each
expect(stats.upkeepCostPerHour.length).toBe(2);
expect(stats.upkeepCostPerHour[0].element).toBe('fire');
expect(stats.upkeepCostPerHour[0].amount).toBe(1.5);
expect(stats.upkeepCostPerHour[1].element).toBe('water');
expect(stats.upkeepCostPerHour[1].amount).toBe(1.5);
});
it('advanced core (3 types) splits upkeep three ways', () => {
const design = makeDesign('advanced', 'steel', 'simple');
design.selectedManaTypes = ['fire', 'water', 'earth'];
const stats = computeGolemStats(design);
// Advanced core: manaRegen=3.0, upkeep=6.0/hr split across 3 types = 2.0 each
expect(stats.upkeepCostPerHour.length).toBe(3);
const totalUpkeep = stats.upkeepCostPerHour.reduce((sum, c) => sum + c.amount, 0);
expect(totalUpkeep).toBe(6.0);
for (const cost of stats.upkeepCostPerHour) {
expect(cost.amount).toBe(2.0);
}
});
it('single-type core does not split upkeep', () => {
const design = makeDesign('basic', 'earth', 'simple');
// Basic core has manaTypes=['earth'], selectedManaTypes=[] => uses core.manaTypes
const stats = computeGolemStats(design);
expect(stats.upkeepCostPerHour.length).toBe(1);
expect(stats.upkeepCostPerHour[0].amount).toBe(1.0); // 0.5 * 2 = 1.0
expect(stats.upkeepCostPerHour[0].element).toBe('earth');
});
it('selected mana types override core defaults', () => {
const design = makeDesign('intermediate', 'earth', 'simple');
design.selectedManaTypes = ['fire', 'water'];