aboutsummaryrefslogtreecommitdiff
path: root/engines/toltecs/sprite.cpp
diff options
context:
space:
mode:
authorBenjamin Haisch2010-11-03 11:58:17 +0000
committerWillem Jan Palenstijn2011-11-20 22:43:10 +0100
commit1cb95f36e72dd4b4e86a0a1bf49e1b797c5781c2 (patch)
tree6c09c5f5adb105b44db5813e9491e02911a3711a /engines/toltecs/sprite.cpp
parent9698127c5d78c92f99032d55dec5fe1feb773ae4 (diff)
downloadscummvm-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.cpp31
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) {