aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/item_pickup.cpp
diff options
context:
space:
mode:
authorPeter Kohaut2016-10-08 21:06:22 +0200
committerPeter Kohaut2016-10-08 21:06:22 +0200
commitf30f3c46e38d91729983a36e87f629d6b3a47a34 (patch)
tree5f1026a7fdbb339ffbe15cd0c02a1b1970538433 /engines/bladerunner/item_pickup.cpp
parentc934941e4f1d72723924f6f6fb7b76712784ff82 (diff)
downloadscummvm-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.cpp108
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