summaryrefslogtreecommitdiff
path: root/sim/src/HitPoints.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sim/src/HitPoints.cpp')
-rw-r--r--sim/src/HitPoints.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/sim/src/HitPoints.cpp b/sim/src/HitPoints.cpp
index d83c369..a214f42 100644
--- a/sim/src/HitPoints.cpp
+++ b/sim/src/HitPoints.cpp
@@ -7,26 +7,45 @@ namespace sim
{
+HitPoints::HitPoints(double base_shield, double base_armour, double base_structure) :
+ structure {base_structure},
+ armour {base_armour},
+ shield {base_shield}
+{
+}
+
+
+double
+HitPoints::Layer::consume(double& damage)
+{
+ if (damage <= 0.0)
+ return 0.0;
+ const double left_to_deal = damage - points;
+ const double actual_damage = damage * resists;
+ points -= damage * resists;
+ damage = left_to_deal;
+ return actual_damage;
+}
+
+
double
HitPoints::deal(double damage)
{
- damage *= structure_resists;
- structure -= damage;
- return damage;
+ return shield.consume(damage) + armour.consume(damage) + structure.consume(damage);
}
bool
HitPoints::is_alive() const
{
- return structure > 0.0;
+ return structure.points > 0.0;
}
double
HitPoints::total() const
{
- return structure;
+ return shield.points + armour.points + structure.points;
}