diff options
Diffstat (limited to 'engines/bladerunner/mouse.cpp')
-rw-r--r-- | engines/bladerunner/mouse.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/engines/bladerunner/mouse.cpp b/engines/bladerunner/mouse.cpp index 7d67e98de5..093c73fcff 100644 --- a/engines/bladerunner/mouse.cpp +++ b/engines/bladerunner/mouse.cpp @@ -51,6 +51,11 @@ Mouse::Mouse(BladeRunnerEngine *vm) { _disabledCounter = 0; _lastFrameTime = 0; _animCounter = 0; + + _randomCountdownX = 0; + _randomCountdownY = 0; + _randomX = 0; + _randomY = 0; } Mouse::~Mouse() { @@ -161,8 +166,55 @@ void Mouse::getXY(int *x, int *y) const { *y = _y; } +void Mouse::setMouseJitterUp() { + switch (_vm->_settings->getDifficulty()) { + case 0: + _randomCountdownX = 2; + _randomX = _vm->_rnd.getRandomNumberRng(0, 6) - 3; + _randomY = _vm->_rnd.getRandomNumberRng(0, 10) - 20; + break; + + case 1: + _randomCountdownX = 3; + _randomX = _vm->_rnd.getRandomNumberRng(0, 8) - 4; + _randomY = _vm->_rnd.getRandomNumberRng(0, 10) - 25; + break; + + case 2: + _randomCountdownX = 4; + _randomX = _vm->_rnd.getRandomNumberRng(0, 10) - 5; + _randomY = _vm->_rnd.getRandomNumberRng(0, 10) - 30; + break; + } +} + +void Mouse::setMouseJitterDown() { + switch (_vm->_settings->getDifficulty()) { + case 0: + _randomCountdownY = 2; + _randomX = _vm->_rnd.getRandomNumberRng(0, 6) - 3; + _randomY = _vm->_rnd.getRandomNumberRng(10, 20); + break; + + case 1: + _randomCountdownY = 3; + _randomX = _vm->_rnd.getRandomNumberRng(0, 8) - 4; + _randomY = _vm->_rnd.getRandomNumberRng(15, 25); + break; + + case 2: + _randomCountdownY = 4; + _randomX = _vm->_rnd.getRandomNumberRng(0, 10) - 5; + _randomY = _vm->_rnd.getRandomNumberRng(20, 30); + break; + } +} + void Mouse::disable() { ++_disabledCounter; + + _randomCountdownX = 0; + _randomCountdownY = 0; } void Mouse::enable() { @@ -177,9 +229,24 @@ bool Mouse::isDisabled() const { void Mouse::draw(Graphics::Surface &surface, int x, int y) { if (_disabledCounter) { + _randomCountdownX = 0; + _randomCountdownY = 0; return; } + if (_randomCountdownX > 0) { + _randomCountdownX--; + x += _randomX; + y += _randomY; + + if (!_randomCountdownX) + setMouseJitterDown(); + } else if (_randomCountdownY > 0){ + _randomCountdownY--; + x += _randomX; + y += _randomY; + } + _x = CLIP(x, 0, surface.w - 1); _y = CLIP(y, 0, surface.h - 1); |