diff options
author | Benjamin Haisch | 2010-11-03 11:58:17 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2011-11-20 22:43:10 +0100 |
commit | 1cb95f36e72dd4b4e86a0a1bf49e1b797c5781c2 (patch) | |
tree | 6c09c5f5adb105b44db5813e9491e02911a3711a /engines/toltecs/sprite.cpp | |
parent | 9698127c5d78c92f99032d55dec5fe1feb773ae4 (diff) | |
download | scummvm-rg350-1cb95f36e72dd4b4e86a0a1bf49e1b797c5781c2.tar.gz scummvm-rg350-1cb95f36e72dd4b4e86a0a1bf49e1b797c5781c2.tar.bz2 scummvm-rg350-1cb95f36e72dd4b4e86a0a1bf49e1b797c5781c2.zip |
TOLTECS: - More work on the menu system, saving and loading from there is now possible
- Add blastSprite method which draws a sprite directly to the frontScreen without the renderQueue
- Add F10 scancode in sfHandleInput to open the menu
Diffstat (limited to 'engines/toltecs/sprite.cpp')
-rw-r--r-- | engines/toltecs/sprite.cpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/engines/toltecs/sprite.cpp b/engines/toltecs/sprite.cpp index 84b485d49b..b6654b5346 100644 --- a/engines/toltecs/sprite.cpp +++ b/engines/toltecs/sprite.cpp @@ -193,18 +193,16 @@ protected: int _scalerStatus; }; -void Screen::addDrawRequest(const DrawRequest &drawRequest) { - +bool Screen::createSpriteDrawItem(const DrawRequest &drawRequest, SpriteDrawItem &sprite) { int16 scaleValueX, scaleValueY; int16 xoffs, yoffs; byte *spriteData; int16 frameNum; - SpriteDrawItem sprite; memset(&sprite, 0, sizeof(SpriteDrawItem)); if (drawRequest.flags == 0xFFFF) - return; + return false; frameNum = drawRequest.flags & 0x0FFF; @@ -215,7 +213,7 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) { sprite.priority = drawRequest.y; sprite.resIndex = drawRequest.resIndex; sprite.frameNum = frameNum; - + spriteData = _vm->_res->load(drawRequest.resIndex)->data; if (drawRequest.flags & 0x1000) { @@ -233,15 +231,14 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) { // First initialize the sprite item with the values from the sprite resource SpriteFrameEntry spriteFrameEntry(spriteData + frameNum * 12); - + if (spriteFrameEntry.w == 0 || spriteFrameEntry.h == 0) - return; + return false; sprite.offset = spriteFrameEntry.offset; sprite.width = spriteFrameEntry.w; sprite.height = spriteFrameEntry.h; - sprite.origWidth = spriteFrameEntry.w; sprite.origHeight = spriteFrameEntry.h; @@ -278,7 +275,7 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) { sprite.width = sprite.origWidth - scaleValueX; sprite.height = sprite.origHeight - 1 - scaleValueY; if (sprite.width <= 0 || sprite.height <= 0) - return; + return false; xoffs -= (xoffs * scaleValue) / 100; yoffs -= (yoffs * scaleValue) / 100; } @@ -301,7 +298,7 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) { sprite.height -= clipHeight; if (sprite.height <= 0) - return; + return false; sprite.y = _vm->_cameraY; @@ -332,7 +329,6 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) { } spriteFrameData = spriteData + sprite.offset; - // Now the sprite's offset is adjusted to point to the starting line if ((sprite.flags & 0x10) == 0) { while (skipHeight--) { @@ -359,7 +355,7 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) { if (sprite.y + sprite.height - _vm->_cameraY - _vm->_cameraHeight > 0) sprite.height -= sprite.y + sprite.height - _vm->_cameraY - _vm->_cameraHeight; if (sprite.height <= 0) - return; + return false; sprite.skipX = 0; @@ -391,10 +387,15 @@ void Screen::addDrawRequest(const DrawRequest &drawRequest) { } if (sprite.width <= 0) - return; + return false; - _renderQueue->addSprite(sprite); - + return true; +} + +void Screen::addDrawRequest(const DrawRequest &drawRequest) { + SpriteDrawItem sprite; + if (createSpriteDrawItem(drawRequest, sprite)) + _renderQueue->addSprite(sprite); } void Screen::drawSprite(const SpriteDrawItem &sprite) { |