Skip to content

Commit

Permalink
ZVISION: Implement functions for system messaging.
Browse files Browse the repository at this point in the history
  • Loading branch information
Marisa-Chan committed Jul 12, 2014
1 parent bbaebdf commit b9103b8
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 0 deletions.
15 changes: 15 additions & 0 deletions engines/zvision/graphics/render_manager.cpp
Expand Up @@ -729,6 +729,21 @@ uint16 RenderManager::createSubArea(const Common::Rect &area) {
return _subid;
}

uint16 RenderManager::createSubArea() {
_subid++;

oneSub sub;
sub.redraw = false;
sub.timer = -1;
sub.todelete = false;
sub._r = Common::Rect(_subWndRect.left, _subWndRect.top, _subWndRect.right, _subWndRect.bottom);
sub._r.translate(-_workingWindow.left, -_workingWindow.top);

_subsList[_subid] = sub;

return _subid;
}

void RenderManager::deleteSubArea(uint16 id) {
if (_subsList.contains(id))
_subsList[id].todelete = true;
Expand Down
1 change: 1 addition & 0 deletions engines/zvision/graphics/render_manager.h
Expand Up @@ -233,6 +233,7 @@ class RenderManager {
void blitSurfaceToMenu(const Graphics::Surface &src, int x, int y, uint32 colorkey);

uint16 createSubArea(const Common::Rect &area);
uint16 createSubArea();
void deleteSubArea(uint16 id);
void deleteSubArea(uint16 id, int16 delay);
void updateSubArea(uint16 id, const Common::String &txt);
Expand Down
65 changes: 65 additions & 0 deletions engines/zvision/zvision.cpp
Expand Up @@ -212,6 +212,71 @@ Common::Error ZVision::run() {
return Common::kNoError;
}

bool ZVision::askQuestion(const Common::String &str) {
uint16 msgid = _renderManager->createSubArea();
_renderManager->updateSubArea(msgid, str);
_renderManager->processSubs(0);
_renderManager->renderBackbufferToScreen();
_clock.stop();

int result = 0;

while (result == 0) {
Common::Event evnt;
while (_eventMan->pollEvent(evnt)) {
if (evnt.type == Common::EVENT_KEYDOWN) {
switch (evnt.kbd.keycode) {
case Common::KEYCODE_y:
result = 2;
break;
case Common::KEYCODE_n:
result = 1;
break;
default:
break;
}
}
}
_system->updateScreen();
_system->delayMillis(66);
}
_renderManager->deleteSubArea(msgid);
_clock.start();
return result == 2;
}

void ZVision::delayedMessage(const Common::String &str, uint16 milsecs) {
uint16 msgid = _renderManager->createSubArea();
_renderManager->updateSubArea(msgid, str);
_renderManager->processSubs(0);
_renderManager->renderBackbufferToScreen();
_clock.stop();

uint32 stop_time = _system->getMillis() + milsecs;
while (_system->getMillis() < stop_time) {
Common::Event evnt;
while (_eventMan->pollEvent(evnt)) {
if (evnt.type == Common::EVENT_KEYDOWN &&
(evnt.kbd.keycode == Common::KEYCODE_SPACE ||
evnt.kbd.keycode == Common::KEYCODE_RETURN ||
evnt.kbd.keycode == Common::KEYCODE_ESCAPE))
break;
}
_system->updateScreen();
_system->delayMillis(66);
}
_renderManager->deleteSubArea(msgid);
_clock.start();
}

void ZVision::timedMessage(const Common::String &str, uint16 milsecs) {
uint16 msgid = _renderManager->createSubArea();
_renderManager->updateSubArea(msgid, str);
_renderManager->processSubs(0);
_renderManager->renderBackbufferToScreen();
_renderManager->deleteSubArea(msgid, milsecs);
}

void ZVision::pauseEngineIntern(bool pause) {
_mixer->pauseAll(pause);

Expand Down
4 changes: 4 additions & 0 deletions engines/zvision/zvision.h
Expand Up @@ -167,6 +167,10 @@ class ZVision : public Engine {
Common::String generateSaveFileName(uint slot);
Common::String generateAutoSaveFileName();

bool askQuestion(const Common::String &str);
void delayedMessage(const Common::String &str, uint16 milsecs);
void timedMessage(const Common::String &str, uint16 milsecs);

void setRenderDelay(uint);
bool canRender();

Expand Down

0 comments on commit b9103b8

Please sign in to comment.