mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 09:23:37 +00:00
DIRECTOR: Encapsulated tile access and implement override by VWTL
This commit is contained in:
parent
a2a37604ce
commit
b7735a6326
@ -1370,7 +1370,7 @@ void Cast::loadVWTL(Common::SeekableReadStreamEndian &stream) {
|
||||
uint16 castLibId = 0; // default for pre-D5
|
||||
uint16 memberId;
|
||||
|
||||
for (int i = 0; i < NUMTILEPATTERNS; i++) {
|
||||
for (int i = 0; i < kNumBuiltinTiles; i++) {
|
||||
stream.readUint32(); // unused
|
||||
|
||||
if (_version >= kFileVer500)
|
||||
@ -1380,9 +1380,9 @@ void Cast::loadVWTL(Common::SeekableReadStreamEndian &stream) {
|
||||
|
||||
r = Movie::readRect(stream);
|
||||
|
||||
_patterns[i].bitmapId.castLib = castLibId;
|
||||
_patterns[i].bitmapId.member = memberId;
|
||||
_patterns[i].rect = r;
|
||||
_tiles[i].bitmapId.castLib = castLibId;
|
||||
_tiles[i].bitmapId.member = memberId;
|
||||
_tiles[i].rect = r;
|
||||
|
||||
debugC(2, kDebugLoading, "Cast::loadCastDataVWCR(): entry %d - %u:%u [%d, %d, %d, %d]", i, castLibId, memberId,
|
||||
r.left, r.top, r.right, r.bottom);
|
||||
|
@ -142,6 +142,7 @@ public:
|
||||
Common::Rect _movieRect;
|
||||
uint16 _stageColor;
|
||||
int _defaultPalette;
|
||||
TilePatternEntry _tiles[kNumBuiltinTiles];
|
||||
|
||||
LingoArchive *_lingoArchive;
|
||||
|
||||
@ -157,8 +158,6 @@ private:
|
||||
Common::HashMap<uint16, CastMemberInfo *> _castsInfo;
|
||||
Common::HashMap<Common::String, int, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _castsNames;
|
||||
Common::HashMap<uint16, int> _castsScriptIds;
|
||||
|
||||
TilePatternEntry _patterns[NUMTILEPATTERNS];
|
||||
};
|
||||
|
||||
} // End of namespace Director
|
||||
|
@ -124,9 +124,17 @@ struct MacShape {
|
||||
int lineSize;
|
||||
uint pattern;
|
||||
|
||||
Image::ImageDecoder *tile;
|
||||
Common::Rect *tileRect;
|
||||
|
||||
Graphics::MacPlotData *pd;
|
||||
};
|
||||
|
||||
struct PatternTile {
|
||||
Image::ImageDecoder *img;
|
||||
Common::Rect rect;
|
||||
};
|
||||
|
||||
const int SCALE_THRESHOLD = 0x100;
|
||||
|
||||
class DirectorEngine : public ::Engine {
|
||||
@ -178,6 +186,8 @@ public:
|
||||
uint16 getPaletteColorCount() const { return _currentPaletteLength; }
|
||||
|
||||
void loadPatterns();
|
||||
Image::ImageDecoder *getTile(int num);
|
||||
const Common::Rect &getTileRect(int num);
|
||||
uint32 transformColor(uint32 color);
|
||||
Graphics::MacPatterns &getPatterns();
|
||||
void setCursor(DirectorCursor type);
|
||||
@ -236,10 +246,8 @@ private:
|
||||
|
||||
Graphics::MacPatterns _director3Patterns;
|
||||
Graphics::MacPatterns _director3QuickDrawPatterns;
|
||||
public:
|
||||
Image::ImageDecoder *_builtinTiles[kNumBuiltinTiles];
|
||||
PatternTile _builtinTiles[kNumBuiltinTiles];
|
||||
|
||||
private:
|
||||
Common::HashMap<int, PaletteV4> _loadedPalettes;
|
||||
|
||||
Graphics::ManagedSurface *_surface;
|
||||
|
@ -24,6 +24,9 @@
|
||||
#include "graphics/macgui/macwindowmanager.h"
|
||||
|
||||
#include "director/director.h"
|
||||
#include "director/cast.h"
|
||||
#include "director/castmember.h"
|
||||
#include "director/movie.h"
|
||||
#include "director/images.h"
|
||||
|
||||
namespace Director {
|
||||
@ -51,13 +54,17 @@ void DirectorEngine::loadPatterns() {
|
||||
for (int i = 0; i < ARRAYSIZE(director3QuickDrawPatterns); i++)
|
||||
_director3QuickDrawPatterns.push_back(director3QuickDrawPatterns[i]);
|
||||
|
||||
// We must set it here for correct work of BITDDecoder.
|
||||
// It is set later in Director properly
|
||||
_pixelformat = Graphics::PixelFormat::createFormatCLUT8();
|
||||
|
||||
for (int i = 0; i < ARRAYSIZE(builtinTiles); i++) {
|
||||
Common::MemoryReadStream stream(builtinTiles[i].ptr, builtinTiles[i].size);
|
||||
|
||||
_builtinTiles[i] = new BITDDecoder(builtinTiles[i].w, builtinTiles[i].h, 8, builtinTiles[i].w, macPalette, kFileVer300);
|
||||
_builtinTiles[i]->loadStream(stream);
|
||||
_builtinTiles[i].img = new BITDDecoder(builtinTiles[i].w, builtinTiles[i].h, 8, builtinTiles[i].w, macPalette, kFileVer300);
|
||||
_builtinTiles[i].img->loadStream(stream);
|
||||
|
||||
_builtinTiles[i].rect = Common::Rect(0, 0, builtinTiles[i].w, builtinTiles[i].h);
|
||||
}
|
||||
}
|
||||
|
||||
@ -66,6 +73,40 @@ Graphics::MacPatterns &DirectorEngine::getPatterns() {
|
||||
return _director3QuickDrawPatterns;
|
||||
}
|
||||
|
||||
Image::ImageDecoder *DirectorEngine::getTile(int num) {
|
||||
TilePatternEntry *tile = &getCurrentMovie()->getCast()->_tiles[num];
|
||||
|
||||
if (tile->bitmapId.isNull())
|
||||
return _builtinTiles[num].img;
|
||||
|
||||
CastMember *member = getCurrentMovie()->getCastMember(tile->bitmapId);
|
||||
|
||||
if (!member) {
|
||||
warning("BUILDBOT: DirectorEngine::getTile(%d) VWTL refers to non-existing cast %s", num,
|
||||
tile->bitmapId.asString().c_str());
|
||||
|
||||
return _builtinTiles[num].img;
|
||||
}
|
||||
|
||||
if (member->_type != kCastBitmap) {
|
||||
warning("BUILDBOT: DirectorEngine::getTile(%d) VWTL refers to incorrect cast %s type %s", num,
|
||||
tile->bitmapId.asString().c_str(), castTypeToString(member->_type).c_str());
|
||||
|
||||
return _builtinTiles[num].img;
|
||||
}
|
||||
|
||||
return ((BitmapCastMember *)member)->_img;
|
||||
}
|
||||
|
||||
const Common::Rect &DirectorEngine::getTileRect(int num) {
|
||||
TilePatternEntry *tile = &getCurrentMovie()->getCast()->_tiles[num];
|
||||
|
||||
if (tile->bitmapId.isNull())
|
||||
return _builtinTiles[num].rect;
|
||||
|
||||
return tile->rect;
|
||||
}
|
||||
|
||||
void DirectorEngine::loadDefaultPalettes() {
|
||||
_loadedPalettes[kClutSystemMac] = PaletteV4(kClutSystemMac, macPalette, 256);
|
||||
_loadedPalettes[kClutRainbow] = PaletteV4(kClutRainbow, rainbowPalette, 256);
|
||||
|
@ -212,6 +212,8 @@ MacShape *Sprite::getShape() {
|
||||
shape->backColor = _backColor;
|
||||
shape->lineSize = _thickness & 0x3;
|
||||
shape->pattern = getPattern();
|
||||
shape->tile = nullptr;
|
||||
shape->tileRect = nullptr;
|
||||
|
||||
if (g_director->getVersion() >= 300 && shape->spriteType == kCastMemberSprite) {
|
||||
if (!_cast) {
|
||||
|
@ -101,9 +101,10 @@ void Window::testFontScaling() {
|
||||
|
||||
x = 10;
|
||||
for (int i = 0; i < kNumBuiltinTiles; i++) {
|
||||
surface.blitFrom(g_director->_builtinTiles[i]->getSurface(), Common::Point(x, 250));
|
||||
Image::ImageDecoder *tile = g_director->getTile(i);
|
||||
surface.blitFrom(tile->getSurface(), Common::Point(x, 250));
|
||||
|
||||
x += g_director->_builtinTiles[i]->getSurface()->w + 10;
|
||||
x += tile->getSurface()->w + 10;
|
||||
}
|
||||
|
||||
g_system->copyRectToScreen(surface.getPixels(), surface.pitch, 0, 0, w, h); // testing fonts
|
||||
|
@ -382,6 +382,8 @@ struct CastMemberID {
|
||||
return member != c.member || castLib != c.castLib;
|
||||
}
|
||||
|
||||
bool isNull() { return member == 0 && castLib == 0; }
|
||||
|
||||
Common::String asString() const;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user