diff options
author | Sven Hesse | 2012-06-05 17:01:40 +0200 |
---|---|---|
committer | Sven Hesse | 2012-06-05 17:01:40 +0200 |
commit | 4392e4d7aab9114ff66a1fcda34d21f404b4ebcd (patch) | |
tree | 367134fbcfdf9761f3d344b20828c17d9e1570d8 /engines/gob/minigames/geisha/meter.cpp | |
parent | 73776406686709bc79ff9c6423937dce0e43c5d6 (diff) | |
download | scummvm-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.cpp | 22 |
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) { |