diff options
author | Peter Kohaut | 2016-10-08 21:06:22 +0200 |
---|---|---|
committer | Peter Kohaut | 2016-10-08 21:06:22 +0200 |
commit | f30f3c46e38d91729983a36e87f629d6b3a47a34 (patch) | |
tree | 5f1026a7fdbb339ffbe15cd0c02a1b1970538433 /engines/bladerunner/item_pickup.cpp | |
parent | c934941e4f1d72723924f6f6fb7b76712784ff82 (diff) | |
download | scummvm-rg350-f30f3c46e38d91729983a36e87f629d6b3a47a34.tar.gz scummvm-rg350-f30f3c46e38d91729983a36e87f629d6b3a47a34.tar.bz2 scummvm-rg350-f30f3c46e38d91729983a36e87f629d6b3a47a34.zip |
BLADERUNNER: added item pickup effect
also added support for rendering items on screen (not in the world)
pickup effect can be tested in debug compilation by clicking on any object (not item, but object like, hydrant, or doors) in first scene
Diffstat (limited to 'engines/bladerunner/item_pickup.cpp')
-rw-r--r-- | engines/bladerunner/item_pickup.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/engines/bladerunner/item_pickup.cpp b/engines/bladerunner/item_pickup.cpp new file mode 100644 index 0000000000..ff5f5e9763 --- /dev/null +++ b/engines/bladerunner/item_pickup.cpp @@ -0,0 +1,108 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "bladerunner/item_pickup.h" + +#include "bladerunner/bladerunner.h" + +#include "bladerunner/audio_player.h" +#include "bladerunner/gameinfo.h" +#include "slice_animations.h" +#include "slice_renderer.h" + +namespace BladeRunner { + +ItemPickup::ItemPickup(BladeRunnerEngine *vm) { + _vm = vm; + _facingStep = float(1.0f / 3000.0f * M_PI); + reset(); +} + +ItemPickup::~ItemPickup() { +} + +void ItemPickup::setup(int animationId, int screenX, int screenY) { + _animationId = animationId; + _animationFrame = 0; + _facing = 0.0; + _timeLeft = 3000; + _scale = 0; + _screenX = CLIP(screenX, 40, 600); + _screenY = CLIP(screenY, 40, 440); + _screenRect.left = _screenX - 40; + _screenRect.right = _screenX + 40; + _screenRect.top = _screenY - 40; + _screenRect.bottom = _screenY + 40; + + int pan = (150 * _screenX - 48000) / 640; + _vm->_audioPlayer->playAud(_vm->_gameInfo->getSfxTrack(335), 80, pan, pan, 50, 0); + + _timeLast = _vm->getTotalPlayTime(); +} + +void ItemPickup::reset() { + _animationId = -1; + _screenX = 0; + _screenY = 0; + _facing = 0.0f; + _scale = 1.0f; + _animationFrame = 0; + _timeLeft = 0; + _timeLast = 0; +} + +void ItemPickup::tick() { + if (_timeLeft == 0) { + return; + } + + int timeNow = _vm->getTotalPlayTime(); + int timeDiff = timeNow - _timeLast; + _timeLast = timeNow; + timeDiff = MIN(MIN(timeDiff, 67), _timeLeft); + _timeLeft -= timeDiff; + + if (_timeLeft >= 2000) { + _scale = 1.0f - (((2000.0f - _timeLeft) / 1000.0f) * ((2000.0f - _timeLeft) / 1000.0f)); + } else if (_timeLeft < 1000) { + _scale = 1.0f - (((1000.0f - _timeLeft) / 1000.0f) * ((1000.0f - _timeLeft) / 1000.0f)); + } else { + _scale = 1.0f; + } + _scale *= 75.0f; + + _facing += _facingStep * timeDiff; + if (_facing > float(2.0f * M_PI)) { + _facing -= float(2.0f * M_PI); + } + + _animationFrame = (_animationFrame + 1) % _vm->_sliceAnimations->getFrameCount(_animationId); +} + +void ItemPickup::draw() { + if (_timeLeft == 0) { + return; + } + + _vm->_sliceRenderer->drawOnScreen(_animationId, _animationFrame, _screenX, _screenY, _facing, _scale, _vm->_surface2, _vm->_zBuffer2); +} +} // End of namespace BladeRunner |