diff options
Diffstat (limited to 'engines/pink/director.cpp')
-rw-r--r-- | engines/pink/director.cpp | 150 |
1 files changed, 75 insertions, 75 deletions
diff --git a/engines/pink/director.cpp b/engines/pink/director.cpp index 10c3e1d86b..4ac5c9424f 100644 --- a/engines/pink/director.cpp +++ b/engines/pink/director.cpp @@ -30,112 +30,112 @@ namespace Pink { Director::Director(OSystem *system) - : _system(system), showBounds(1) {} + : _system(system), showBounds(1) {} void Director::draw() { - _system->fillScreen(0); - for (uint i = 0; i < _sprites.size(); ++i) { - drawSprite(_sprites[i]); - } - _system->updateScreen(); + _system->fillScreen(0); + for (uint i = 0; i < _sprites.size(); ++i) { + drawSprite(_sprites[i]); + } + _system->updateScreen(); } void Director::drawSprite(ActionCEL *sprite) { - CelDecoder *decoder = sprite->getDecoder(); - const Graphics::Surface *surface; - if (decoder->needsUpdate()) { - - surface = decoder->decodeNextFrame(); - } - else surface = decoder->getCurrentFrame(); - - int h = surface->h; - if (surface->h + decoder->getY() > 480) - h = 480 - decoder->getY(); - int w = surface->w; - if (surface->w + decoder->getX() > 640) - w = 640 - decoder->getX(); - - if (!showBounds) { - Graphics::Surface *screen = _system->lockScreen(); - - for (int y = 0; y < h; ++y) { - for (int x = 0; x < w; ++x) { - uint16 spritePixelColourIndex = *(byte*)surface->getBasePtr(x, y); - if (spritePixelColourIndex != decoder->getTransparentColourIndex()) { - *(byte *) screen->getBasePtr(decoder->getX() + x, decoder->getY() + y) = spritePixelColourIndex; - } - } - } - _system->unlockScreen(); - } - else _system->copyRectToScreen(surface->getPixels(), surface->pitch, - decoder->getX(), decoder->getY(), - w, h); + CelDecoder *decoder = sprite->getDecoder(); + const Graphics::Surface *surface; + if (decoder->needsUpdate()) { + + surface = decoder->decodeNextFrame(); + } + else surface = decoder->getCurrentFrame(); + + int h = surface->h; + if (surface->h + decoder->getY() > 480) + h = 480 - decoder->getY(); + int w = surface->w; + if (surface->w + decoder->getX() > 640) + w = 640 - decoder->getX(); + + if (!showBounds) { + Graphics::Surface *screen = _system->lockScreen(); + + for (int y = 0; y < h; ++y) { + for (int x = 0; x < w; ++x) { + uint16 spritePixelColourIndex = *(byte*)surface->getBasePtr(x, y); + if (spritePixelColourIndex != decoder->getTransparentColourIndex()) { + *(byte *) screen->getBasePtr(decoder->getX() + x, decoder->getY() + y) = spritePixelColourIndex; + } + } + } + _system->unlockScreen(); + } + else _system->copyRectToScreen(surface->getPixels(), surface->pitch, + decoder->getX(), decoder->getY(), + w, h); } void Director::addSprite(ActionCEL *sprite) { - _sprites.push_back(sprite); - int i; - for (i = _sprites.size() - 1; i > 0 ; --i) { - if (sprite->getZ() < _sprites[i - 1]->getZ()){ - _sprites[i] = _sprites[i - 1]; - } else break; - } - _sprites[i] = sprite; + _sprites.push_back(sprite); + int i; + for (i = _sprites.size() - 1; i > 0 ; --i) { + if (sprite->getZ() < _sprites[i - 1]->getZ()){ + _sprites[i] = _sprites[i - 1]; + } else break; + } + _sprites[i] = sprite; } void Director::removeSprite(ActionCEL *sprite) { - for (uint i = 0; i < _sprites.size(); ++i) { - if (sprite == _sprites[i]) { - _sprites.remove_at(i); - break; - } - } + for (uint i = 0; i < _sprites.size(); ++i) { + if (sprite == _sprites[i]) { + _sprites.remove_at(i); + break; + } + } } void Director::setPallette(const byte *pallete) { - _system->getPaletteManager()->setPalette(pallete, 0, 256); + _system->getPaletteManager()->setPalette(pallete, 0, 256); } void Director::update() { - for (uint i = 0; i < _sounds.size(); ++i) { - _sounds[i]->update(); - } - for (uint i = 0; i < _sprites.size(); ++i) { - _sprites[i]->update(); - } + for (uint i = 0; i < _sounds.size(); ++i) { + _sounds[i]->update(); + } + for (uint i = 0; i < _sprites.size(); ++i) { + _sprites[i]->update(); + } } void Director::addSound(ActionSound *sound) { - _sounds.push_back(sound); + _sounds.push_back(sound); } void Director::removeSound(ActionSound *sound) { - for (uint i = 0; i < _sounds.size(); ++i) { - if (_sounds[i] == sound) - _sounds.remove_at(i); - } + for (uint i = 0; i < _sounds.size(); ++i) { + if (_sounds[i] == sound) + _sounds.remove_at(i); + } } void Director::clear() { - _sprites.clear(); + _sprites.clear(); } Actor *Director::getActorByPoint(Common::Point point) { - for (int i = _sprites.size() - 1; i >= 0; --i) { - CelDecoder *decoder = _sprites[i]->getDecoder(); - const Graphics::Surface *frame = decoder->getCurrentFrame(); - Common::Rect &rect = decoder->getRectangle(); - if (rect.contains(point) && - *(byte*)frame->getBasePtr(point.x - rect.left, point.y - rect.top) - != decoder->getTransparentColourIndex()) - return _sprites[i]->getActor(); - } - - return nullptr; + for (int i = _sprites.size() - 1; i >= 0; --i) { + CelDecoder *decoder = _sprites[i]->getDecoder(); + const Graphics::Surface *frame = decoder->getCurrentFrame(); + Common::Rect &rect = decoder->getRectangle(); + if (rect.contains(point) && + *(byte*)frame->getBasePtr(point.x - rect.left, point.y - rect.top) + != decoder->getTransparentColourIndex()) + return _sprites[i]->getActor(); + } + + return nullptr; } } |