make them behave like the MessageBox in the original game

actorid
Sebastian Wick 14 years ago
parent 5198de53b8
commit 315f4078c6

@ -17,7 +17,28 @@ void MessageBoxManager::onFrame (float frameDuration)
it->current += frameDuration; it->current += frameDuration;
if(it->current >= it->max) if(it->current >= it->max)
{ {
removeMessageBox(it->messageBox); it->messageBox->mMarkedToDelete = true;
if(*mMessageBoxes.begin() == it->messageBox) // if this box is the last one
{
// collect all with mMarkedToDelete and delete them.
// and place the other messageboxes on the right position
int height = 0;
std::vector<MessageBox*>::iterator it2 = mMessageBoxes.begin();
while(it2 != mMessageBoxes.end())
{
if((*it2)->mMarkedToDelete)
{
delete (*it2);
it2 = mMessageBoxes.erase(it2);
}
else {
(*it2)->update(height);
height += (*it2)->getHeight();
it2++;
}
}
}
it = mTimers.erase(it); it = mTimers.erase(it);
} }
else else
@ -35,22 +56,24 @@ void MessageBoxManager::createMessageBox (const std::string& message)
removeMessageBox(message.length()*mMessageBoxSpeed, box); removeMessageBox(message.length()*mMessageBoxSpeed, box);
mMessageBoxes.insert(mMessageBoxes.begin(), box); mMessageBoxes.push_back(box);
int height = box->getHeight();
std::vector<MessageBox*>::iterator it; std::vector<MessageBox*>::iterator it;
int i = 0; if(mMessageBoxes.size() > 3) {
for(it = mMessageBoxes.begin()+1; it != mMessageBoxes.end(); ++it) delete *mMessageBoxes.begin();
mMessageBoxes.erase(mMessageBoxes.begin());
}
int height = 0;
for(it = mMessageBoxes.begin(); it != mMessageBoxes.end(); ++it)
{ {
if(i == 2) { if((*it) == box)
delete (*it); {
mMessageBoxes.erase(it); std::cout << "update(" << height << ")" << std::endl;
break; box->update(height);
} }
else { else {
(*it)->update(height);
height += (*it)->getHeight(); height += (*it)->getHeight();
i++;
} }
} }
} }
@ -112,6 +135,7 @@ MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::strin
mFixedWidth = 300; mFixedWidth = 300;
mBottomPadding = 20; mBottomPadding = 20;
mNextBoxPadding = 20; mNextBoxPadding = 20;
mMarkedToDelete = false;
getWidget(mMessageWidget, "message"); getWidget(mMessageWidget, "message");
@ -134,8 +158,6 @@ MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::strin
mMainWidget->setSize(size); mMainWidget->setSize(size);
size.width -= 5; // this is to center the text (see messagebox_layout.xml, Widget type="Edit" position="-2 -3 0 0") size.width -= 5; // this is to center the text (see messagebox_layout.xml, Widget type="Edit" position="-2 -3 0 0")
mMessageWidget->setSize(size); mMessageWidget->setSize(size);
update(0);
} }
void MessageBox::update (int height) void MessageBox::update (int height)

@ -48,6 +48,8 @@ namespace MWGui
int getHeight (); int getHeight ();
void update (int height); void update (int height);
bool mMarkedToDelete;
protected: protected:
MessageBoxManager& mMessageBoxManager; MessageBoxManager& mMessageBoxManager;
int mHeight; int mHeight;

Loading…
Cancel
Save