aboutsummaryrefslogtreecommitdiff
path: root/engines/gob/minigames/geisha/meter.cpp
diff options
context:
space:
mode:
authorSven Hesse2012-06-05 17:01:40 +0200
committerSven Hesse2012-06-05 17:01:40 +0200
commit4392e4d7aab9114ff66a1fcda34d21f404b4ebcd (patch)
tree367134fbcfdf9761f3d344b20828c17d9e1570d8 /engines/gob/minigames/geisha/meter.cpp
parent73776406686709bc79ff9c6423937dce0e43c5d6 (diff)
downloadscummvm-rg350-4392e4d7aab9114ff66a1fcda34d21f404b4ebcd.tar.gz
scummvm-rg350-4392e4d7aab9114ff66a1fcda34d21f404b4ebcd.tar.bz2
scummvm-rg350-4392e4d7aab9114ff66a1fcda34d21f404b4ebcd.zip
GOB: Implement health gain/loss for mouths
Diffstat (limited to 'engines/gob/minigames/geisha/meter.cpp')
-rw-r--r--engines/gob/minigames/geisha/meter.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/engines/gob/minigames/geisha/meter.cpp b/engines/gob/minigames/geisha/meter.cpp
index 9dcc717e48..719ecf3d18 100644
--- a/engines/gob/minigames/geisha/meter.cpp
+++ b/engines/gob/minigames/geisha/meter.cpp
@@ -63,22 +63,36 @@ void Meter::setMaxValue() {
setValue(_maxValue);
}
-void Meter::increase(int32 n) {
+int32 Meter::increase(int32 n) {
+ if (n < 0)
+ return decrease(-n);
+
+ int32 overflow = MAX(0, (_value + n) - _maxValue);
+
int32 value = CLIP<int32>(_value + n, 0, _maxValue);
if (_value == value)
- return;
+ return overflow;
_value = value;
_needUpdate = true;
+
+ return overflow;
}
-void Meter::decrease(int32 n) {
+int32 Meter::decrease(int32 n) {
+ if (n < 0)
+ return increase(-n);
+
+ int32 underflow = -MIN(0, _value - n);
+
int32 value = CLIP<int32>(_value - n, 0, _maxValue);
if (_value == value)
- return;
+ return underflow;
_value = value;
_needUpdate = true;
+
+ return underflow;
}
void Meter::draw(Surface &dest, int16 &left, int16 &top, int16 &right, int16 &bottom) {