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;
|
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 boxRight = left + 325;
|
||||||
int32 newBoxLeft = left + 25;
|
int32 newBoxLeft = left + 25;
|
||||||
|
@ -818,7 +818,7 @@ void Menu::drawInfoMenu(int16 left, int16 top) {
|
||||||
drawBox(newBoxLeft, boxTop, left + 324, boxTop + 14);
|
drawBox(newBoxLeft, boxTop, left + 324, boxTop + 14);
|
||||||
|
|
||||||
if (!_engine->_gameState->inventoryDisabled() && _engine->_gameState->hasItem(InventoryItems::kiTunic)) {
|
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) {
|
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);
|
_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;
|
boxLeft = left + 340;
|
||||||
|
|
||||||
/** draw coin sprite */
|
/** 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);
|
_engine->_text->setFontColor(155);
|
||||||
Common::String inventoryNumKashes = Common::String::format("%d", _engine->_gameState->inventoryNumKashes);
|
Common::String inventoryNumKashes = Common::String::format("%d", _engine->_gameState->inventoryNumKashes);
|
||||||
_engine->_text->drawText(left + 370, top + 5, inventoryNumKashes.c_str());
|
_engine->_text->drawText(left + 370, top + 5, inventoryNumKashes.c_str());
|
||||||
|
|
||||||
/** draw key sprite */
|
/** 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);
|
_engine->_text->setFontColor(155);
|
||||||
Common::String inventoryNumKeys = Common::String::format("%d", _engine->_gameState->inventoryNumKeys);
|
Common::String inventoryNumKeys = Common::String::format("%d", _engine->_gameState->inventoryNumKeys);
|
||||||
_engine->_text->drawText(left + 370, top + 40, inventoryNumKeys.c_str());
|
_engine->_text->drawText(left + 370, top + 40, inventoryNumKeys.c_str());
|
||||||
|
@ -846,12 +846,12 @@ void Menu::drawInfoMenu(int16 left, int16 top) {
|
||||||
|
|
||||||
// Clover leaf boxes
|
// Clover leaf boxes
|
||||||
for (int32 i = 0; i < _engine->_gameState->inventoryNumLeafsBox; i++) {
|
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
|
// Clover leafs
|
||||||
for (int32 i = 0; i < _engine->_gameState->inventoryNumLeafs; i++) {
|
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);
|
_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) {
|
void Redraw::processDrawListActorSprites(const DrawListStruct &drawCmd, bool bgRedraw) {
|
||||||
int32 actorIdx = drawCmd.actorIdx;
|
int32 actorIdx = drawCmd.actorIdx;
|
||||||
ActorStruct *actor = _engine->_scene->getActor(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
|
// get actor position on screen
|
||||||
_engine->_renderer->projectPositionOnScreen(actor->x - _engine->_grid->cameraX, actor->y - _engine->_grid->cameraY, actor->z - _engine->_grid->cameraZ);
|
_engine->_renderer->projectPositionOnScreen(actor->x - _engine->_grid->cameraX, actor->y - _engine->_grid->cameraY, actor->z - _engine->_grid->cameraZ);
|
||||||
|
|
||||||
int32 spriteWidth, spriteHeight;
|
const int32 spriteWidth = spritePtr.surface().w;
|
||||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr);
|
const int32 spriteHeight = spritePtr.surface().h;
|
||||||
|
|
||||||
// calculate sprite position on screen
|
// calculate sprite position on screen
|
||||||
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(actor->entity);
|
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(actor->entity);
|
||||||
|
@ -478,8 +478,9 @@ void Redraw::processDrawListExtras(const DrawListStruct &drawCmd) {
|
||||||
if (extra->info0 & 0x8000) {
|
if (extra->info0 & 0x8000) {
|
||||||
_engine->_extra->drawExtraSpecial(actorIdx, _engine->_renderer->projPosX, _engine->_renderer->projPosY);
|
_engine->_extra->drawExtraSpecial(actorIdx, _engine->_renderer->projPosX, _engine->_renderer->projPosY);
|
||||||
} else {
|
} else {
|
||||||
int32 spriteWidth, spriteHeight;
|
const SpriteData &spritePtr = _engine->_resources->spriteData[extra->info0];
|
||||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, _engine->_resources->spriteTable[extra->info0]);
|
const int32 spriteWidth = spritePtr.surface().w;
|
||||||
|
const int32 spriteHeight = spritePtr.surface().h;
|
||||||
|
|
||||||
// calculate sprite position on screen
|
// calculate sprite position on screen
|
||||||
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(extra->info0);
|
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.right = renderRect.left + spriteWidth;
|
||||||
renderRect.bottom = renderRect.top + spriteHeight;
|
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);
|
_engine->_interface->setClip(renderRect);
|
||||||
|
@ -569,10 +570,9 @@ void Redraw::renderOverlays() {
|
||||||
// process overlay type
|
// process overlay type
|
||||||
switch (overlay->type) {
|
switch (overlay->type) {
|
||||||
case OverlayType::koSprite: {
|
case OverlayType::koSprite: {
|
||||||
const uint8 *spritePtr = _engine->_resources->spriteTable[overlay->info0];
|
const SpriteData &spritePtr = _engine->_resources->spriteData[overlay->info0];
|
||||||
|
const int32 spriteWidth = spritePtr.surface().w;
|
||||||
int32 spriteWidth, spriteHeight;
|
const int32 spriteHeight = spritePtr.surface().h;
|
||||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr);
|
|
||||||
|
|
||||||
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(overlay->info0);
|
const SpriteDim* dim = _engine->_resources->spriteBoundingBox.dim(overlay->info0);
|
||||||
renderRect.left = dim->x + overlay->x;
|
renderRect.left = dim->x + overlay->x;
|
||||||
|
@ -777,9 +777,9 @@ void Redraw::drawBubble(int32 actorIdx) {
|
||||||
bubbleActor = actorIdx;
|
bubbleActor = actorIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8 *spritePtr = _engine->_resources->spriteTable[bubbleSpriteIndex];
|
const SpriteData &spritePtr = _engine->_resources->spriteData[bubbleSpriteIndex];
|
||||||
int32 spriteWidth, spriteHeight;
|
const int32 spriteWidth = spritePtr.surface().w;
|
||||||
_engine->_grid->getSpriteSize(0, &spriteWidth, &spriteHeight, spritePtr);
|
const int32 spriteHeight = spritePtr.surface().h;
|
||||||
|
|
||||||
// calculate sprite position on screen
|
// calculate sprite position on screen
|
||||||
if (bubbleSpriteIndex == SPRITEHQR_DIAG_BUBBLE_RIGHT) {
|
if (bubbleSpriteIndex == SPRITEHQR_DIAG_BUBBLE_RIGHT) {
|
||||||
|
|
|
@ -142,6 +142,11 @@ private:
|
||||||
void preloadAnimations();
|
void preloadAnimations();
|
||||||
void preloadSamples();
|
void preloadSamples();
|
||||||
|
|
||||||
|
/** Table with all loaded sprites */
|
||||||
|
uint8 *spriteTable[NUM_SPRITES] {nullptr};
|
||||||
|
/** Table with all loaded sprite sizes */
|
||||||
|
uint32 spriteSizeTable[NUM_SPRITES] {0};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Resources(TwinEEngine *engine) : _engine(engine) {}
|
Resources(TwinEEngine *engine) : _engine(engine) {}
|
||||||
~Resources();
|
~Resources();
|
||||||
|
@ -151,10 +156,6 @@ public:
|
||||||
/** Table with all loaded samples sizes */
|
/** Table with all loaded samples sizes */
|
||||||
uint32 inventorySizeTable[NUM_INVENTORY_ITEMS] {0};
|
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];
|
SpriteData spriteData[NUM_SPRITES];
|
||||||
|
|
||||||
/** Table with all loaded animations */
|
/** Table with all loaded animations */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue