aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/event.cpp
diff options
context:
space:
mode:
authorTravis Howell2006-10-11 15:10:59 +0000
committerTravis Howell2006-10-11 15:10:59 +0000
commit71b0add6017fc3d9a29a27d8e29d7492a2c7510d (patch)
treeeaff1a93581ca2ef250fa80b878653cf6b8d144d /engines/agos/event.cpp
parent6c66570726dba50397ab182e933774035275f149 (diff)
downloadscummvm-rg350-71b0add6017fc3d9a29a27d8e29d7492a2c7510d.tar.gz
scummvm-rg350-71b0add6017fc3d9a29a27d8e29d7492a2c7510d.tar.bz2
scummvm-rg350-71b0add6017fc3d9a29a27d8e29d7492a2c7510d.zip
Cleanup
svn-id: r24282
Diffstat (limited to 'engines/agos/event.cpp')
-rw-r--r--engines/agos/event.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/engines/agos/event.cpp b/engines/agos/event.cpp
index 2c5a8a4c9a..e4f94e0f47 100644
--- a/engines/agos/event.cpp
+++ b/engines/agos/event.cpp
@@ -24,8 +24,13 @@
#include "common/stdafx.h"
#include "agos/agos.h"
+#include "agos/debugger.h"
#include "agos/intern.h"
+#include "common/system.h"
+
+#include "gui/about.h"
+
namespace AGOS {
void AGOSEngine::addTimeEvent(uint timeout, uint subroutine_id) {
@@ -302,6 +307,125 @@ void AGOSEngine::scrollEvent() {
}
}
+void AGOSEngine::delay(uint amount) {
+ OSystem::Event event;
+
+ uint32 start = _system->getMillis();
+ uint32 cur = start;
+ uint this_delay, vga_period;
+
+ if (_debugger->isAttached())
+ _debugger->onFrame();
+
+ if (_fastMode)
+ vga_period = 10;
+ else if (getGameType() == GType_SIMON2)
+ vga_period = 45;
+ else
+ vga_period = 50;
+
+ _rnd.getRandomNumber(2);
+
+ do {
+ while (!_inCallBack && cur >= _lastVgaTick + vga_period && !_pause) {
+ _lastVgaTick += vga_period;
+
+ // don't get too many frames behind
+ if (cur >= _lastVgaTick + vga_period * 2)
+ _lastVgaTick = cur;
+
+ _inCallBack = true;
+ timer_callback();
+ _inCallBack = false;
+ }
+
+ while (_system->pollEvent(event)) {
+ switch (event.type) {
+ case OSystem::EVENT_KEYDOWN:
+ if (event.kbd.keycode >= '0' && event.kbd.keycode <='9'
+ && (event.kbd.flags == OSystem::KBD_ALT ||
+ event.kbd.flags == OSystem::KBD_CTRL)) {
+ _saveLoadSlot = event.kbd.keycode - '0';
+
+ // There is no save slot 0
+ if (_saveLoadSlot == 0)
+ _saveLoadSlot = 10;
+
+ sprintf(_saveLoadName, "Quicksave %d", _saveLoadSlot);
+ _saveLoadType = (event.kbd.flags == OSystem::KBD_ALT) ? 1 : 2;
+
+ // We should only allow a load or save when it was possible in original
+ // This stops load/save during copy protection, conversations and cut scenes
+ if (!_mouseHideCount && !_showPreposition)
+ quickLoadOrSave();
+ } else if (event.kbd.flags == OSystem::KBD_CTRL) {
+ if (event.kbd.keycode == 'a') {
+ GUI::Dialog *_aboutDialog;
+ _aboutDialog = new GUI::AboutDialog();
+ _aboutDialog->runModal();
+ } else if (event.kbd.keycode == 'f')
+ _fastMode ^= 1;
+ else if (event.kbd.keycode == 'd')
+ _debugger->attach();
+ }
+
+ if (getGameType() == GType_PP) {
+ if (event.kbd.flags == OSystem::KBD_SHIFT)
+ _variableArray[41] = 0;
+ else
+ _variableArray[41] = 1;
+ }
+
+ // Make sure backspace works right (this fixes a small issue on OS X)
+ if (event.kbd.keycode == 8)
+ _keyPressed = 8;
+ else
+ _keyPressed = (byte)event.kbd.ascii;
+ break;
+ case OSystem::EVENT_MOUSEMOVE:
+ _sdlMouseX = event.mouse.x;
+ _sdlMouseY = event.mouse.y;
+ break;
+ case OSystem::EVENT_LBUTTONDOWN:
+ if (getGameType() == GType_FF)
+ setBitFlag(89, true);
+ _leftButtonDown++;
+#if defined (_WIN32_WCE) || defined(PALMOS_MODE)
+ _sdlMouseX = event.mouse.x;
+ _sdlMouseY = event.mouse.y;
+#endif
+ break;
+ case OSystem::EVENT_LBUTTONUP:
+ if (getGameType() == GType_FF)
+ setBitFlag(89, false);
+ break;
+ case OSystem::EVENT_RBUTTONDOWN:
+ if (getGameType() == GType_FF)
+ setBitFlag(92, false);
+ _rightButtonDown++;
+ break;
+ case OSystem::EVENT_QUIT:
+ shutdown();
+ return;
+ default:
+ break;
+ }
+ }
+
+ _system->updateScreen();
+
+ if (amount == 0)
+ break;
+
+ this_delay = _fastMode ? 1 : 20;
+ if (this_delay > amount)
+ this_delay = amount;
+ _system->delayMillis(this_delay);
+
+ cur = _system->getMillis();
+ } while (cur < start + amount);
+}
+
void AGOSEngine::timer_callback() {
if (_timer5 != 0) {
_syncFlag2 = true;