ACCESS: Improvements for horizontal scrolling

This commit is contained in:
Paul Gilbert
2014-08-23 17:19:54 -04:00
parent ec70f3feaf
commit f98d4668d7
5 changed files with 53 additions and 44 deletions
+20
View File
@@ -324,4 +324,24 @@ void ASurface::flipHorizontal(ASurface &dest) {
}
void ASurface::moveBufferLeft() {
byte *p = (byte *)getPixels();
Common::copy(p + TILE_WIDTH, p + (w * h), p);
}
void ASurface::moveBufferRight() {
byte *p = (byte *)getPixels();
Common::copy_backward(p, p + (w * h) - TILE_WIDTH, p + (w * h));
}
void ASurface::moveBufferUp() {
byte *p = (byte *)getPixels();
Common::copy(p + w, p + (w * h), p);
}
void ASurface::moveBufferDown() {
byte *p = (byte *)getPixels();
Common::copy_backward(p, p + (w * (h - 1)), p + (w * h));
}
} // End of namespace Access
+8
View File
@@ -97,6 +97,14 @@ public:
void restoreBlock();
void drawRect();
void moveBufferLeft();
void moveBufferRight();
void moveBufferUp();
void moveBufferDown();
};
class SpriteFrame : public ASurface {
+25 -26
View File
@@ -738,7 +738,7 @@ bool Player::scrollUp() {
while (_vm->_screen->_scrollY >= TILE_HEIGHT && !_vm->shouldQuit()) {
_vm->_screen->_scrollY -= TILE_HEIGHT;
++_vm->_screen->_scrollRow;
_vm->_screen->moveBufferUp();
_vm->_buffer1.moveBufferUp();
_vm->_room->buildRow(_vm->_screen->_scrollRow + _vm->_screen->_vWindowHeight,
_vm->_screen->_vWindowLinesTall * _vm->_screen->_bufferBytesWide);
@@ -766,7 +766,7 @@ bool Player::scrollDown() {
if (--_vm->_screen->_scrollRow < 0)
break;
_vm->_screen->moveBufferDown();
_vm->_buffer1.moveBufferDown();
_vm->_room->buildRow(_vm->_screen->_scrollRow, 0);
if (_vm->_screen->_scrollY >= 0)
@@ -780,28 +780,29 @@ bool Player::scrollDown() {
}
bool Player::scrollLeft() {
_scrollAmount = -(_vm->_screen->_clipWidth - _playerX - _scrollThreshold);
if ((_vm->_rScrollCol + _vm->_screen->_vWindowWidth) == _vm->_room->_playFieldWidth) {
Screen &screen = *_vm->_screen;
_scrollAmount = -(screen._clipWidth - _playerX - _scrollThreshold);
if ((_vm->_rScrollCol + screen._vWindowWidth) == _vm->_room->_playFieldWidth) {
_scrollEnd = 2;
_vm->_screen->_scrollX = 0;
screen._scrollX = 0;
_scrollFlag = true;
return true;
} else {
_scrollFlag = true;
_vm->_screen->_scrollX = _vm->_screen->_scrollX + _scrollAmount;
screen._scrollX = screen._scrollX + _scrollAmount;
while (_vm->_screen->_scrollX >= TILE_WIDTH && !_vm->shouldQuit()) {
_vm->_screen->_scrollX -= TILE_WIDTH;
++_vm->_screen->_scrollCol;
_vm->_screen->moveBufferLeft();
_vm->_room->buildColumn(_vm->_screen->_scrollCol +
_vm->_screen->_vWindowWidth, _vm->_screen->_vWindowBytesWide);
do {
if (screen._scrollX < TILE_WIDTH)
return true;
if (_vm->_screen->_scrollX < TILE_WIDTH)
return _playerDirection == UPRIGHT;
}
screen._scrollX -= TILE_WIDTH;
++screen._scrollCol;
_vm->_buffer1.moveBufferLeft();
_vm->_room->buildColumn(screen._scrollCol + screen._vWindowWidth,
screen._vWindowBytesWide);
} while (!_vm->shouldQuit() && (screen._scrollX >= TILE_WIDTH));
return true;
return (_playerDirection == UPRIGHT);
}
}
@@ -811,18 +812,16 @@ bool Player::scrollRight() {
_vm->_screen->_scrollX -= _scrollAmount;
if (_vm->_screen->_scrollX < 0) {
_scrollFlag = true;
_vm->_screen->_scrollX += _scrollAmount;
do {
_vm->_screen->_scrollX += TILE_WIDTH;
if (--_vm->_screen->_scrollCol < 0)
return true;
while (_vm->_screen->_scrollX >= TILE_WIDTH && !_vm->shouldQuit()) {
_vm->_screen->_scrollX -= TILE_WIDTH;
_vm->_screen->moveBufferLeft();
_vm->_room->buildColumn(_vm->_screen->_scrollCol -
_vm->_screen->_vWindowWidth, _vm->_screen->_vWindowBytesWide);
_vm->_buffer1.moveBufferRight();
_vm->_room->buildColumn(_vm->_screen->_scrollCol, 0);
} while (!_vm->shouldQuit() && (_vm->_screen->_scrollX >= 0));
if (_vm->_screen->_scrollX < TILE_WIDTH)
return _playerDirection == UPLEFT;
}
return false;
}
return true;
-12
View File
@@ -224,18 +224,6 @@ void Screen::restoreScreen() {
_screenYOff = _screenSave._screenYOff;
}
void Screen::moveBufferLeft() {
error("TODO: LEFT");
}
void Screen::moveBufferDown() {
error("TODO: DOWN");
}
void Screen::moveBufferUp() {
error("TODO: UP");
}
void Screen::copyBlock(ASurface *src, const Common::Rect &bounds) {
Common::Rect destBounds = bounds;
destBounds.translate(_windowXAdd, _windowYAdd + _screenYOff);
-6
View File
@@ -149,12 +149,6 @@ public:
* Restores previously saved screen display state variables
*/
void restoreScreen();
void moveBufferLeft();
void moveBufferDown();
void moveBufferUp();
};
} // End of namespace Access