TWINE: use SpriteData for rendering
This commit is contained in:
parent
e1f827c323
commit
c1b89c9878
3 changed files with 24 additions and 23 deletions
|
@ -806,7 +806,7 @@ void Menu::drawInfoMenu(int16 left, int16 top) {
|
|||
|
||||
int32 newBoxLeft2 = left + 9;
|
||||
|
||||
_engine->_grid->drawSprite(0, newBoxLeft2, top + 13, _engine->_resources->spriteTable[SPRITEHQR_LIFEPOINTS]);
|
||||
_engine->_grid->drawSprite(0, newBoxLeft2, top + 13, _engine->_resources->spriteData[SPRITEHQR_LIFEPOINTS]);
|
||||
|
||||
int32 boxRight = left + 325;
|
||||
int32 newBoxLeft = left + 25;
|
||||
|
@ -818,7 +818,7 @@ void Menu::drawInfoMenu(int16 left, int16 top) {
|
|||
drawBox(newBoxLeft, boxTop, left + 324, boxTop + 14);
|
||||
|
||||
if (!_engine->_gameState->inventoryDisabled() && _engine->_gameState->hasItem(InventoryItems::kiTunic)) {
|
||||
_engine->_grid->drawSprite(0, newBoxLeft2, top + 36, _engine->_resources->spriteTable[SPRITEHQR_MAGICPOINTS]);
|
||||
_engine->_grid->drawSprite(0, newBoxLeft2, top + 36, _engine->_resources->spriteData[SPRITEHQR_MAGICPOINTS]);
|
||||
if (_engine->_gameState->magicLevelIdx > 0) {
|
||||
_engine->_interface->drawSplittedBox(Common::Rect(newBoxLeft, top + 35, _engine->_screens->crossDot(newBoxLeft, boxRight, 80, _engine->_gameState->inventoryMagicPoints), top + 50), 75);
|
||||
}
|
||||
|
@ -828,13 +828,13 @@ void Menu::drawInfoMenu(int16 left, int16 top) {
|
|||
boxLeft = left + 340;
|
||||
|
||||
/** draw coin sprite */
|
||||
_engine->_grid->drawSprite(0, boxLeft, top + 15, _engine->_resources->spriteTable[SPRITEHQR_KASHES]);
|
||||
_engine->_grid->drawSprite(0, boxLeft, top + 15, _engine->_resources->spriteData[SPRITEHQR_KASHES]);
|
||||
_engine->_text->setFontColor(155);
|
||||
Common::String inventoryNumKashes = Common::String::format("%d", _engine->_gameState->inventoryNumKashes);
|
||||
_engine->_text->drawText(left + 370, top + 5, inventoryNumKashes.c_str());
|
||||
|
||||
/** draw key sprite */
|
||||
_engine->_grid->drawSprite(0, boxLeft, top + 55, _engine->_resources->spriteTable[SPRITEHQR_KEY]);
|
||||
_engine->_grid->drawSprite(0, boxLeft, top + 55, _engine->_resources->spriteData[SPRITEHQR_KEY]);
|
||||
_engine->_text->setFontColor(155);
|
||||
Common::String inventoryNumKeys = Common::String::format("%d", _engine->_gameState->inventoryNumKeys);
|
||||
_engine->_text->drawText(left + 370, top + 40, inventoryNumKeys.c_str());
|
||||
|
@ -846,12 +846,12 @@ void Menu::drawInfoMenu(int16 left, int16 top) {
|
|||
|
||||
// Clover leaf boxes
|
||||
for (int32 i = 0; i < _engine->_gameState->inventoryNumLeafsBox; i++) {
|
||||
_engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i), top + 58, _engine->_resources->spriteTable[SPRITEHQR_CLOVERLEAFBOX]);
|
||||
_engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i), top + 58, _engine->_resources->spriteData[SPRITEHQR_CLOVERLEAFBOX]);
|
||||
}
|
||||
|
||||
// Clover leafs
|
||||
for (int32 i = 0; i < _engine->_gameState->inventoryNumLeafs; i++) {
|
||||
_engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i) + 2, top + 60, _engine->_resources->spriteTable[SPRITEHQR_CLOVERLEAF]);
|
||||
_engine->_grid->drawSprite(0, _engine->_screens->crossDot(left + 25, left + 325, 10, i) + 2, top + 60, _engine->_resources->spriteData[SPRITEHQR_CLOVERLEAF]);
|
||||
}
|
||||
|
||||
_engine->copyBlockPhys(left, top, left + width, top + 135);
|
||||
|
|
|
@ -415,13 +415,13 @@ void Redraw::processDrawListActors(const DrawListStruct &drawCmd, bool bgRedraw)
|
|||
void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgRedraw) {
|
||||
int32 actorIdx = drawCmd.actorIdx;
|
||||
ActorStruct *actor = _engine->_scene->getActor(actorIdx);
|
||||
const uint8 *spritePtr = _engine->_resources->spriteTable[actor->entity];
|
||||
const SpriteData &spritePtr = _engine->_resources->spriteData[actor->entity];
|
||||
|
||||
// get actor position on screen
|
||||
_engine->_renderer->projectPositionOnScreen(actor->x - _engine->_grid->cameraX, actor->y - _engine->_grid->cameraY, actor->z - _engine->_grid->cameraZ);
|
||||
|
||||
int32 spriteWidth, spriteHeight;
|
||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr);
|
||||
const int32 spriteWidth = spritePtr.surface().w;
|
||||
const int32 spriteHeight = spritePtr.surface().h;
|
||||
|
||||
// calculate sprite position on screen
|
||||
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(actor->entity);
|
||||
|
@ -478,8 +478,9 @@ void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) {
|
|||
if (extra->info0 & 0x8000) {
|
||||
_engine->_extra->drawExtraSpecial(actorIdx, _engine->_renderer->projPosX, _engine->_renderer->projPosY);
|
||||
} else {
|
||||
int32 spriteWidth, spriteHeight;
|
||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, _engine->_resources->spriteTable[extra->info0]);
|
||||
const SpriteData &spritePtr = _engine->_resources->spriteData[extra->info0];
|
||||
const int32 spriteWidth = spritePtr.surface().w;
|
||||
const int32 spriteHeight = spritePtr.surface().h;
|
||||
|
||||
// calculate sprite position on screen
|
||||
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(extra->info0);
|
||||
|
@ -488,7 +489,7 @@ void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) {
|
|||
renderRect.right = renderRect.left + spriteWidth;
|
||||
renderRect.bottom = renderRect.top + spriteHeight;
|
||||
|
||||
_engine->_grid->drawSprite(0, renderRect.left, renderRect.top, _engine->_resources->spriteTable[extra->info0]);
|
||||
_engine->_grid->drawSprite(0, renderRect.left, renderRect.top, spritePtr);
|
||||
}
|
||||
|
||||
_engine->_interface->setClip(renderRect);
|
||||
|
@ -569,10 +570,9 @@ void Redraw::renderOverlays() {
|
|||
// process overlay type
|
||||
switch (overlay->type) {
|
||||
case OverlayType::koSprite: {
|
||||
const uint8 *spritePtr = _engine->_resources->spriteTable[overlay->info0];
|
||||
|
||||
int32 spriteWidth, spriteHeight;
|
||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr);
|
||||
const SpriteData &spritePtr = _engine->_resources->spriteData[overlay->info0];
|
||||
const int32 spriteWidth = spritePtr.surface().w;
|
||||
const int32 spriteHeight = spritePtr.surface().h;
|
||||
|
||||
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(overlay->info0);
|
||||
renderRect.left = dim->x + overlay->x;
|
||||
|
@ -777,9 +777,9 @@ void Redraw::drawBubble(int32 actorIdx) {
|
|||
bubbleActor = actorIdx;
|
||||
}
|
||||
|
||||
const uint8 *spritePtr = _engine->_resources->spriteTable[bubbleSpriteIndex];
|
||||
int32 spriteWidth, spriteHeight;
|
||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr);
|
||||
const SpriteData &spritePtr = _engine->_resources->spriteData[bubbleSpriteIndex];
|
||||
const int32 spriteWidth = spritePtr.surface().w;
|
||||
const int32 spriteHeight = spritePtr.surface().h;
|
||||
|
||||
// calculate sprite position on screen
|
||||
if (bubbleSpriteIndex == SPRITEHQR_DIAG_BUBBLE_RIGHT) {
|
||||
|
|
|
@ -142,6 +142,11 @@ private:
|
|||
void preloadAnimations();
|
||||
void preloadSamples();
|
||||
|
||||
/** Table with all loaded sprites */
|
||||
uint8 *spriteTable[NUM_SPRITES] {nullptr};
|
||||
/** Table with all loaded sprite sizes */
|
||||
uint32 spriteSizeTable[NUM_SPRITES] {0};
|
||||
|
||||
public:
|
||||
Resources(TwinEEngine *engine) : _engine(engine) {}
|
||||
~Resources();
|
||||
|
@ -151,10 +156,6 @@ public:
|
|||
/** Table with all loaded samples sizes */
|
||||
uint32 inventorySizeTable[NUM_INVENTORY_ITEMS] {0};
|
||||
|
||||
/** Table with all loaded sprites */
|
||||
uint8 *spriteTable[NUM_SPRITES] {nullptr};
|
||||
/** Table with all loaded sprite sizes */
|
||||
uint32 spriteSizeTable[NUM_SPRITES] {0};
|
||||
SpriteData spriteData[NUM_SPRITES];
|
||||
|
||||
/** Table with all loaded animations */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue