From be4c716e3a8fe08d3be25aae04bff8d620cbb814 Mon Sep 17 00:00:00 2001 From: David Reess Date: Sun, 20 Jul 2025 18:30:59 +0100 Subject: [PATCH] Revert "[GW2E-1686] Allow exact component amounts and totalQuantity" --- src/calculateTreeQuantity.ts | 9 ++- .../calculateTreeQuantity.spec.ts.snap | 72 +++++++++---------- 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/src/calculateTreeQuantity.ts b/src/calculateTreeQuantity.ts index 3efe2b3..1eb07c0 100755 --- a/src/calculateTreeQuantity.ts +++ b/src/calculateTreeQuantity.ts @@ -33,8 +33,11 @@ function calculateTreeQuantityInner( const output = tree.output || 1 // Calculate the total quantity needed - const treeQuantity = amount * tree.quantity - const totalQuantity = treeQuantity + let treeQuantity = amount * tree.quantity + + // Round amount to nearest multiple of the tree output + treeQuantity = Math.ceil(treeQuantity / output) * output + const totalQuantity = Math.round(treeQuantity) // If the item is available and the higher tree is not // bought or already available get as many items of it as possible @@ -52,7 +55,7 @@ function calculateTreeQuantityInner( // Get the amount of components that need to be crafted // e.g. a recipe outputs 10 and we need 20 -> 2x components - const componentAmount = usedQuantity / output + const componentAmount = Math.ceil(usedQuantity / output) // Ignore available items in components if the tree // doesn't get crafted or is completely available anyway diff --git a/tests/__snapshots__/calculateTreeQuantity.spec.ts.snap b/tests/__snapshots__/calculateTreeQuantity.spec.ts.snap index cfd1794..0205be5 100644 --- a/tests/__snapshots__/calculateTreeQuantity.spec.ts.snap +++ b/tests/__snapshots__/calculateTreeQuantity.spec.ts.snap @@ -165,9 +165,9 @@ Object { "output": 1, "prerequisites": Array [], "quantity": 1, - "totalQuantity": 0.2, + "totalQuantity": 1, "type": "Item", - "usedQuantity": 0.2, + "usedQuantity": 1, "weekly_purchase_cap": 0, }, Object { @@ -180,9 +180,9 @@ Object { "output": 1, "prerequisites": Array [], "quantity": 5, - "totalQuantity": 1, + "totalQuantity": 5, "type": "Item", - "usedQuantity": 1, + "usedQuantity": 5, "weekly_purchase_cap": 0, }, ], @@ -201,9 +201,9 @@ Object { }, ], "quantity": 1, - "totalQuantity": 1, + "totalQuantity": 5, "type": "Recipe", - "usedQuantity": 1, + "usedQuantity": 5, "weekly_purchase_cap": 0, } `; @@ -221,9 +221,9 @@ Object { "output": 1, "prerequisites": Array [], "quantity": 1, - "totalQuantity": 0.8, + "totalQuantity": 1, "type": "Item", - "usedQuantity": 0.8, + "usedQuantity": 1, "weekly_purchase_cap": 0, }, Object { @@ -236,9 +236,9 @@ Object { "output": 1, "prerequisites": Array [], "quantity": 5, - "totalQuantity": 4, + "totalQuantity": 5, "type": "Item", - "usedQuantity": 4, + "usedQuantity": 5, "weekly_purchase_cap": 0, }, ], @@ -257,9 +257,9 @@ Object { }, ], "quantity": 1, - "totalQuantity": 4, + "totalQuantity": 5, "type": "Recipe", - "usedQuantity": 4, + "usedQuantity": 5, "weekly_purchase_cap": 0, } `; @@ -333,9 +333,9 @@ Object { "output": 10, "prerequisites": Array [], "quantity": 1, - "totalQuantity": 0.5, + "totalQuantity": 10, "type": "Item", - "usedQuantity": 0.5, + "usedQuantity": 10, "weekly_purchase_cap": 0, }, Object { @@ -348,9 +348,9 @@ Object { "output": 5, "prerequisites": Array [], "quantity": 7, - "totalQuantity": 3.5, + "totalQuantity": 10, "type": "Item", - "usedQuantity": 3.5, + "usedQuantity": 10, "weekly_purchase_cap": 0, }, ], @@ -369,9 +369,9 @@ Object { }, ], "quantity": 1, - "totalQuantity": 1, + "totalQuantity": 2, "type": "Recipe", - "usedQuantity": 1, + "usedQuantity": 2, "weekly_purchase_cap": 0, } `; @@ -389,9 +389,9 @@ Object { "output": 10, "prerequisites": Array [], "quantity": 1, - "totalQuantity": 1.5, + "totalQuantity": 10, "type": "Item", - "usedQuantity": 1.5, + "usedQuantity": 10, "weekly_purchase_cap": 0, }, Object { @@ -404,9 +404,9 @@ Object { "output": 5, "prerequisites": Array [], "quantity": 7, - "totalQuantity": 10.5, + "totalQuantity": 15, "type": "Item", - "usedQuantity": 10.5, + "usedQuantity": 15, "weekly_purchase_cap": 0, }, ], @@ -425,9 +425,9 @@ Object { }, ], "quantity": 1, - "totalQuantity": 3, + "totalQuantity": 4, "type": "Recipe", - "usedQuantity": 3, + "usedQuantity": 4, "weekly_purchase_cap": 0, } `; @@ -760,9 +760,9 @@ Object { "output": 1, "prerequisites": Array [], "quantity": 25, - "totalQuantity": 35, + "totalQuantity": 50, "type": "Item", - "usedQuantity": 35, + "usedQuantity": 50, "weekly_purchase_cap": 0, }, Object { @@ -777,9 +777,9 @@ Object { "output": 1, "prerequisites": Array [], "quantity": 3, - "totalQuantity": 42, + "totalQuantity": 60, "type": "Item", - "usedQuantity": 42, + "usedQuantity": 60, "weekly_purchase_cap": 0, }, ], @@ -798,9 +798,9 @@ Object { }, ], "quantity": 10, - "totalQuantity": 14, + "totalQuantity": 20, "type": "Recipe", - "usedQuantity": 14, + "usedQuantity": 20, "weekly_purchase_cap": 0, }, Object { @@ -815,9 +815,9 @@ Object { "output": 1, "prerequisites": Array [], "quantity": 2, - "totalQuantity": 11.2, + "totalQuantity": 16, "type": "Item", - "usedQuantity": 11.2, + "usedQuantity": 16, "weekly_purchase_cap": 0, }, ], @@ -836,9 +836,9 @@ Object { }, ], "quantity": 4, - "totalQuantity": 5.6, + "totalQuantity": 8, "type": "Recipe", - "usedQuantity": 5.6, + "usedQuantity": 8, "weekly_purchase_cap": 0, }, ], @@ -857,9 +857,9 @@ Object { }, ], "quantity": 1, - "totalQuantity": 7, + "totalQuantity": 10, "type": "Recipe", - "usedQuantity": 7, + "usedQuantity": 10, "weekly_purchase_cap": 0, } `;