#include "StdInc.h" #include "CStackQueue.h" #include "CBattleInterface.h" #include "../../lib/BattleState.h" #include "../Graphics.h" #include "../SDL_Extensions.h" #include "../CPlayerInterface.h" #include "../CBitmapHandler.h" #include "../../CCallback.h" #include "../UIFramework/CGuiHandler.h" void CStackQueue::update() { stacksSorted.clear(); owner->curInt->cb->getStackQueue(stacksSorted, QUEUE_SIZE); for (int i = 0; i < QUEUE_SIZE ; i++) { stackBoxes[i]->setStack(stacksSorted[i]); } } CStackQueue::CStackQueue(bool Embedded, CBattleInterface * _owner) :embedded(Embedded), owner(_owner) { OBJ_CONSTRUCTION_CAPTURING_ALL; if(embedded) { box = NULL; bg = NULL; pos.w = QUEUE_SIZE * 37; pos.h = 32; //height of small creature img pos.x = screen->w/2 - pos.w/2; pos.y = (screen->h - 600)/2 + 10; } else { box = BitmapHandler::loadBitmap("CHRROP.pcx"); bg = BitmapHandler::loadBitmap("DIBOXPI.pcx"); pos.w = 600; pos.h = bg->h; } stackBoxes.resize(QUEUE_SIZE); for (int i = 0; i < QUEUE_SIZE; i++) { stackBoxes[i] = new StackBox(box); stackBoxes[i]->pos.x += 6 + (embedded ? 37 : 79)*i; } } CStackQueue::~CStackQueue() { SDL_FreeSurface(box); } void CStackQueue::showAll( SDL_Surface *to ) { blitBg(to); CIntObject::showAll(to); } void CStackQueue::blitBg( SDL_Surface * to ) { if(bg) { for (int w = 0; w < pos.w; w += bg->w) { blitAtLoc(bg, w, 0, to); } } } void CStackQueue::StackBox::showAll( SDL_Surface *to ) { assert(my); if(bg) { graphics->blueToPlayersAdv(bg, my->owner); //SDL_UpdateRect(bg, 0, 0, 0, 0); SDL_Rect temp_rect = genRect(bg->h, bg->w, pos.x, pos.y); CSDL_Ext::blit8bppAlphaTo24bpp(bg, NULL, to, &temp_rect); //blitAt(bg, pos, to); blitAt(graphics->bigImgs[my->getCreature()->idNumber], pos.x +9, pos.y + 1, to); printAtMiddleLoc(makeNumberShort(my->count), pos.w/2, pos.h - 12, FONT_MEDIUM, zwykly, to); } else { blitAt(graphics->smallImgs[-2], pos, to); blitAt(graphics->smallImgs[my->getCreature()->idNumber], pos, to); const SDL_Color &ownerColor = (my->owner == 255 ? *graphics->neutralColor : graphics->playerColors[my->owner]); CSDL_Ext::drawBorder(to, pos, int3(ownerColor.r, ownerColor.g, ownerColor.b)); printAtMiddleLoc(makeNumberShort(my->count), pos.w/2, pos.h - 8, FONT_TINY, zwykly, to); } } void CStackQueue::StackBox::setStack( const CStack *nStack ) { my = nStack; } CStackQueue::StackBox::StackBox(SDL_Surface *BG) :my(NULL), bg(BG) { if(bg) { pos.w = bg->w; pos.h = bg->h; } else { pos.w = pos.h = 32; } pos.y += 2; } CStackQueue::StackBox::~StackBox() { } void CStackQueue::StackBox::hover( bool on ) { }