diff options
Diffstat (limited to 'sword2/scroll.cpp')
| -rw-r--r-- | sword2/scroll.cpp | 151 |
1 files changed, 0 insertions, 151 deletions
diff --git a/sword2/scroll.cpp b/sword2/scroll.cpp deleted file mode 100644 index 3d0a263bc6..0000000000 --- a/sword2/scroll.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright (C) 1994-1998 Revolution Software Ltd. - * Copyright (C) 2003-2006 The ScummVM project - * - * 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. - * - * $URL$ - * $Id$ - */ - -#include "common/stdafx.h" -#include "sword2/sword2.h" -#include "sword2/defs.h" -#include "sword2/logic.h" - -namespace Sword2 { - -// Max no of pixel allowed to scroll per cycle -#define MAX_SCROLL_DISTANCE 8 - -/** - * Sets the scroll target position for the end of the game cycle. The driver - * will then automatically scroll as many times as it can to reach this - * position in the allotted time. - */ - -void Screen::setScrollTarget(int16 sx, int16 sy) { - _scrollXTarget = sx; - _scrollYTarget = sy; -} - -/** - * If the room is larger than the physical screen, this function is called - * every game cycle to update the scroll offsets. - */ - -void Screen::setScrolling() { - // Normally we aim to get George's feet at (320,250) from top left - // of screen window - // feet_x = 128 + 320 - // feet_y = 128 + 250 - - // Set scroll offsets according to the player's coords - - // If the scroll offsets are being forced in script, ensure that they - // are neither too far to the right nor too far down. - uint32 scrollX = _vm->_logic->readVar(SCROLL_X); - uint32 scrollY = _vm->_logic->readVar(SCROLL_Y); - - if (scrollX || scrollY) { - _thisScreen.scroll_offset_x = MIN((uint16)scrollX, _thisScreen.max_scroll_offset_x); - _thisScreen.scroll_offset_y = MIN((uint16)scrollY, _thisScreen.max_scroll_offset_y); - return; - } - - // George's offset from the centre - the desired position for him - - int16 offset_x = _thisScreen.player_feet_x - _thisScreen.feet_x; - int16 offset_y = _thisScreen.player_feet_y - _thisScreen.feet_y; - - // Prevent scrolling too far left/right/up/down - - if (offset_x < 0) - offset_x = 0; - else if (offset_x > _thisScreen.max_scroll_offset_x) - offset_x = _thisScreen.max_scroll_offset_x; - - if (offset_y < 0) - offset_y = 0; - else if (offset_y > _thisScreen.max_scroll_offset_y) - offset_y = _thisScreen.max_scroll_offset_y; - - // First time on this screen - need absolute scroll immediately! - - if (_thisScreen.scroll_flag == 2) { - debug(5, "init scroll"); - _thisScreen.scroll_offset_x = offset_x; - _thisScreen.scroll_offset_y = offset_y; - _thisScreen.scroll_flag = 1; - return; - } - - // Catch up with required scroll offsets - speed depending on distance - // to catch up (dx and dy) and _scrollFraction used, but limit to - // certain number of pixels per cycle (MAX_SCROLL_DISTANCE) - - int16 dx = _thisScreen.scroll_offset_x - offset_x; - int16 dy = _thisScreen.scroll_offset_y - offset_y; - - uint16 scroll_distance_x; // how much we want to scroll - uint16 scroll_distance_y; - - if (dx < 0) { - // Current scroll_offset_x is less than the required value - - // NB. I'm adding 1 to the result of dx / SCROLL_FRACTION, - // because it would otherwise not scroll at all when - // dx < SCROLL_FRACTION - - // => inc by (fraction of the differnce) NB. dx is -ve, so we - // subtract dx / SCROLL_FRACTION - - scroll_distance_x = 1 - dx / _scrollFraction; - - if (scroll_distance_x > MAX_SCROLL_DISTANCE) - scroll_distance_x = MAX_SCROLL_DISTANCE; - - _thisScreen.scroll_offset_x += scroll_distance_x; - } else if (dx > 0) { - // Current scroll_offset_x is greater than - // the required value - - // => dec by (fraction of the differnce) - - scroll_distance_x = 1 + dx / _scrollFraction; - - if (scroll_distance_x > MAX_SCROLL_DISTANCE) - scroll_distance_x = MAX_SCROLL_DISTANCE; - - _thisScreen.scroll_offset_x -= scroll_distance_x; - } - - if (dy < 0) { - scroll_distance_y = 1 - dy / _scrollFraction; - - if (scroll_distance_y > MAX_SCROLL_DISTANCE) - scroll_distance_y = MAX_SCROLL_DISTANCE; - - _thisScreen.scroll_offset_y += scroll_distance_y; - } else if (dy > 0) { - scroll_distance_y = 1 + dy / _scrollFraction; - - if (scroll_distance_y > MAX_SCROLL_DISTANCE) - scroll_distance_y = MAX_SCROLL_DISTANCE; - - _thisScreen.scroll_offset_y -= scroll_distance_y; - } -} - -} // End of namespace Sword2 |
