From 5f552c9446ddf3f02ec99ff6902822d66d2cc955 Mon Sep 17 00:00:00 2001 From: Thomas Fach-Pedersen Date: Tue, 28 Mar 2017 17:50:04 +0200 Subject: BLADERUNNER: Implement ZBuffer class --- engines/bladerunner/item.cpp | 67 +++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 26 deletions(-) (limited to 'engines/bladerunner/item.cpp') diff --git a/engines/bladerunner/item.cpp b/engines/bladerunner/item.cpp index b8d4cd2c1f..3ad2868c51 100644 --- a/engines/bladerunner/item.cpp +++ b/engines/bladerunner/item.cpp @@ -25,6 +25,7 @@ #include "bladerunner/bladerunner.h" #include "bladerunner/slice_renderer.h" +#include "bladerunner/zbuffer.h" namespace BladeRunner { @@ -75,40 +76,54 @@ bool Item::isTargetable() { return _isTargetable; } -void Item::tick(bool special) { - if (_isVisible) { - Vector3 postition(_position.x, -_position.z, _position.y); - int animationId = _animationId + (special ? 1 : 0); - _vm->_sliceRenderer->drawInWorld(animationId, 0, postition, M_PI - _angle, 1.0f, _vm->_surface2, _vm->_zBuffer2); - _vm->_sliceRenderer->getScreenRectangle(&_screenRectangle, animationId, 0, postition, M_PI - _angle, 1.0f); +bool Item::tick(Common::Rect *screenRect, bool special) { + if (!_isVisible) { + *screenRect = Common::Rect(); + return false; + } - if (_isSpinning) { - _facing += _facingChange; + bool isVisible = false; - if (_facing >= 1024) { - _facing -= 1024; - } else if (_facing < 0) { - _facing += 1024; - } - _angle = _facing * (M_PI / 512.0f); + Vector3 position(_position.x, -_position.z, _position.y); + int animationId = _animationId + (special ? 1 : 0); + _vm->_sliceRenderer->drawInWorld(animationId, 0, position, M_PI - _angle, 1.0f, _vm->_surface2, _vm->_zbuffer->getData()); + _vm->_sliceRenderer->getScreenRectangle(&_screenRectangle, animationId, 0, position, M_PI - _angle, 1.0f); + + if (!_screenRectangle.isEmpty()) { + *screenRect = _screenRectangle; + isVisible = true; + } else { + *screenRect = Common::Rect(); + } + + if (_isSpinning) { + _facing += _facingChange; + if (_facing >= 1024) { + _facing -= 1024; + } else if (_facing < 0) { + _facing += 1024; + } + _angle = _facing * (M_PI / 512.0f); + + if (_facingChange > 0) { + _facingChange = _facingChange - 20; + if (_facingChange < 0) { + _facingChange = 0; + _isSpinning = false; + } + } else if (_facingChange < 0) { + _facingChange = _facingChange + 20; if (_facingChange > 0) { - _facingChange = _facingChange - 20; - if (_facingChange < 0) { - _facingChange = 0; - _isSpinning = false; - } - } else if (_facingChange < 0) { - _facingChange = _facingChange + 20; - if (_facingChange > 0) { - _facingChange = 0; - _isSpinning = false; - } - } else { + _facingChange = 0; _isSpinning = false; } + } else { + _isSpinning = false; } } + + return isVisible; } void Item::setXYZ(Vector3 position) { -- cgit v1.2.3