From a0699b83b0abc7148fd9a180178f82faa6e36788 Mon Sep 17 00:00:00 2001 From: Aki Date: Sun, 5 Feb 2023 02:05:34 +0100 Subject: Fixed boundary damage dealing and resulting side effect in totals --- sim/src/HitPoints.cpp | 11 +++++++---- sim/tests/HitPoints.cpp | 6 +++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/sim/src/HitPoints.cpp b/sim/src/HitPoints.cpp index f850451..f23cafd 100644 --- a/sim/src/HitPoints.cpp +++ b/sim/src/HitPoints.cpp @@ -1,5 +1,7 @@ #include +#include + #include @@ -23,11 +25,12 @@ HitPoints::Layer::consume(double& damage) if (damage <= 0.0 || points <= 0.0) return 0.0; const double modifier = 1.0 - resists; - const double actual_damage = damage * modifier; - const double left_to_deal = (actual_damage - points) / modifier; - points -= actual_damage; + const double potential_damage = damage * modifier; + const double taken_damage = std::min(potential_damage, points); + const double left_to_deal = (potential_damage - taken_damage) / modifier; + points -= taken_damage; damage = left_to_deal; - return actual_damage; + return taken_damage; } diff --git a/sim/tests/HitPoints.cpp b/sim/tests/HitPoints.cpp index 8b8ef84..5c90b4f 100644 --- a/sim/tests/HitPoints.cpp +++ b/sim/tests/HitPoints.cpp @@ -30,9 +30,9 @@ TEST(HitPoints, Deal) EXPECT_DOUBLE_EQ(300.0, points.total()); EXPECT_DOUBLE_EQ(50.0, points.deal(100.0)); EXPECT_DOUBLE_EQ(250.0, points.total()); - EXPECT_DOUBLE_EQ(50.0, points.deal(100.0)); - EXPECT_DOUBLE_EQ(200.0, points.total()); - EXPECT_DOUBLE_EQ(100.0, points.deal(125.0)); + EXPECT_DOUBLE_EQ(50.0 + 80.0, points.deal(200.0)); + EXPECT_DOUBLE_EQ(120.0, points.total()); + EXPECT_DOUBLE_EQ(20.0, points.deal(25.0)); EXPECT_DOUBLE_EQ(100.0, points.total()); EXPECT_DOUBLE_EQ(100.0, points.deal(200.0)); EXPECT_DOUBLE_EQ(0.0, points.total()); -- cgit v1.1