Merge pull request #775 from inguin/emi-pause

EMI: Improve pause handling
This commit is contained in:
Einar Johan Trøan Sømåen 2013-12-11 16:26:09 -08:00
commit e843d7855b
6 changed files with 38 additions and 20 deletions

View File

@ -178,6 +178,11 @@ void EMIEngine::drawNormalMode() {
}
void EMIEngine::updateDrawMode() {
// For EMI, draw mode is just like normal mode with frozen frame time.
updateNormalMode();
}
void EMIEngine::invalidateTextObjectsSortOrder() {
_textObjectsSortOrderInvalidated = true;
}

View File

@ -49,6 +49,7 @@ public:
private:
LuaBase *createLua() override;
void drawNormalMode() override;
void updateDrawMode() override;
static bool compareTextLayer(const TextObject *x, const TextObject *y);
void drawTextObjects() override;
static bool compareActor(const Actor *x, const Actor *y);

View File

@ -291,11 +291,6 @@ void Lua_V2::Display() {
// dummy
}
void Lua_V2::RenderModeUser() {
lua_Object param1 = lua_getparam(1);
g_movie->pause(!lua_isnil(param1));
}
void Lua_V2::GetCameraPosition() {
Set::Setup *setup = g_grim->getCurrSet()->getCurrSetup();
lua_pushnumber(setup->_pos.x());

View File

@ -159,7 +159,6 @@ protected:
DECLARE_LUA_OPCODE(SectEditForgetIt);
DECLARE_LUA_OPCODE(FRUTEY_Begin);
DECLARE_LUA_OPCODE(FRUTEY_End);
DECLARE_LUA_OPCODE(RenderModeUser);
DECLARE_LUA_OPCODE(GetFontDimensions);
DECLARE_LUA_OPCODE(GetTextObjectDimensions);
DECLARE_LUA_OPCODE(GetTextCharPosition);

View File

@ -75,7 +75,7 @@ GfxBase *g_driver = NULL;
int g_imuseState = -1;
GrimEngine::GrimEngine(OSystem *syst, uint32 gameFlags, GrimGameType gameType, Common::Platform platform, Common::Language language) :
Engine(syst), _currSet(NULL), _selectedActor(NULL) {
Engine(syst), _currSet(NULL), _selectedActor(NULL), _pauseStartTime(0) {
g_grim = this;
_debugger = new Debugger();
@ -518,22 +518,30 @@ void GrimEngine::updateDisplayScene() {
}
drawPrimitives();
} else if (_mode == NormalMode || _mode == OverworldMode) {
if (!_currSet)
return;
g_driver->clearScreen();
drawNormalMode();
g_driver->drawBuffers();
drawPrimitives();
updateNormalMode();
} else if (_mode == DrawMode) {
_doFlip = false;
_prevSmushFrame = 0;
_movieTime = 0;
updateDrawMode();
}
}
void GrimEngine::updateNormalMode() {
if (!_currSet)
return;
g_driver->clearScreen();
drawNormalMode();
g_driver->drawBuffers();
drawPrimitives();
}
void GrimEngine::updateDrawMode() {
_doFlip = false;
_prevSmushFrame = 0;
_movieTime = 0;
}
void GrimEngine::drawNormalMode() {
_prevSmushFrame = 0;
_movieTime = 0;
@ -1188,7 +1196,8 @@ void GrimEngine::buildActiveActorsList() {
_activeActors.clear();
foreach (Actor *a, Actor::getPool()) {
if ((_mode == NormalMode && a->isInSet(_currSet->getName())) || a->isInOverworld()) {
if (((_mode == NormalMode || _mode == DrawMode) && a->isInSet(_currSet->getName())) ||
a->isInOverworld()) {
_activeActors.push_back(a);
}
}
@ -1252,6 +1261,12 @@ void GrimEngine::openMainMenuDialog() {
void GrimEngine::pauseEngineIntern(bool pause) {
g_imuse->pause(pause);
g_movie->pause(pause);
if (pause) {
_pauseStartTime = _system->getMillis();
} else {
_frameStart += _system->getMillis() - _pauseStartTime;
}
}
void GrimEngine::debugLua(const Common::String &str) {

View File

@ -202,6 +202,8 @@ protected:
void savegameCallback();
void createRenderer();
virtual LuaBase *createLua();
virtual void updateNormalMode();
virtual void updateDrawMode();
virtual void drawNormalMode();
void savegameSave();
@ -257,6 +259,7 @@ protected:
Common::Platform _gamePlatform;
Common::Language _gameLanguage;
Debugger *_debugger;
uint32 _pauseStartTime;
};
extern GrimEngine *g_grim;