aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2014-07-29 22:49:45 -0400
committerPaul Gilbert2014-07-29 22:49:45 -0400
commit83f55f737b3eab7be2236de1bf31035024400e43 (patch)
tree9fb03a6766cc29954fd92b9a4543f5a4af6eba7e /engines
parent8480f53d6005b5873964ca1015644ae6925e6ede (diff)
downloadscummvm-rg350-83f55f737b3eab7be2236de1bf31035024400e43.tar.gz
scummvm-rg350-83f55f737b3eab7be2236de1bf31035024400e43.tar.bz2
scummvm-rg350-83f55f737b3eab7be2236de1bf31035024400e43.zip
ACCESS: Main engine skeleton and events manager
Diffstat (limited to 'engines')
-rw-r--r--engines/access/access.cpp3
-rw-r--r--engines/access/access.h7
-rw-r--r--engines/access/events.cpp106
-rw-r--r--engines/access/events.h86
-rw-r--r--engines/access/module.mk3
5 files changed, 204 insertions, 1 deletions
diff --git a/engines/access/access.cpp b/engines/access/access.cpp
index f3615e10da..23b8fb9f45 100644
--- a/engines/access/access.cpp
+++ b/engines/access/access.cpp
@@ -32,10 +32,12 @@ namespace Access {
AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc) :
_gameDescription(gameDesc), Engine(syst), _randomSource("Access") {
_debugger = nullptr;
+ _events = nullptr;
}
AccessEngine::~AccessEngine() {
delete _debugger;
+ delete _events;
}
void AccessEngine::initialize() {
@@ -45,6 +47,7 @@ void AccessEngine::initialize() {
DebugMan.addDebugChannel(kDebugGraphics, "graphics", "Graphics handling");
_debugger = new Debugger(this);
+ _events = new EventsManager(this);
}
Common::Error AccessEngine::run() {
diff --git a/engines/access/access.h b/engines/access/access.h
index f46cf0094c..ef9960e007 100644
--- a/engines/access/access.h
+++ b/engines/access/access.h
@@ -31,6 +31,7 @@
#include "engines/engine.h"
#include "graphics/surface.h"
#include "access/debugger.h"
+#include "access/events.h"
/**
* This is the namespace of the Access engine.
@@ -64,6 +65,11 @@ class AccessEngine : public Engine {
private:
const AccessGameDescription *_gameDescription;
Common::RandomSource _randomSource;
+
+ Graphics::Surface _buffer1;
+ Graphics::Surface _buffer2;
+ Graphics::Surface _vidbuf;
+ Graphics::Surface _plotBuf;
/**
* Handles basic initialisation
@@ -75,6 +81,7 @@ protected:
virtual bool hasFeature(EngineFeature f) const;
public:
Debugger *_debugger;
+ EventsManager *_events;
public:
AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc);
virtual ~AccessEngine();
diff --git a/engines/access/events.cpp b/engines/access/events.cpp
new file mode 100644
index 0000000000..47908ff1cb
--- /dev/null
+++ b/engines/access/events.cpp
@@ -0,0 +1,106 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/scummsys.h"
+#include "graphics/cursorman.h"
+#include "common/events.h"
+#include "engines/util.h"
+#include "access/access.h"
+#include "access/events.h"
+
+namespace Access {
+
+EventsManager::EventsManager(AccessEngine *vm): _vm(vm) {
+ _cursorId = CURSOR_NONE;
+ _frameCounter = 10;
+ _priorFrameTime = 0;
+ _leftButton = false;
+}
+
+EventsManager::~EventsManager() {
+}
+
+void EventsManager::setCursor(CursorType cursorId) {
+ _cursorId = cursorId;
+}
+
+void EventsManager::showCursor() {
+ CursorMan.showMouse(true);
+}
+
+void EventsManager::hideCursor() {
+ CursorMan.showMouse(false);
+}
+
+bool EventsManager::isCursorVisible() {
+ return CursorMan.isVisible();
+}
+
+void EventsManager::pollEvents() {
+ checkForNextFrameCounter();
+
+ Common::Event event;
+ while (g_system->getEventManager()->pollEvent(event)) {
+ // Handle keypress
+ switch (event.type) {
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RTL:
+ return;
+
+ case Common::EVENT_KEYDOWN:
+ // Check for debugger
+ if (event.kbd.keycode == Common::KEYCODE_d && (event.kbd.flags & Common::KBD_CTRL)) {
+ // Attach to the debugger
+ _vm->_debugger->attach();
+ _vm->_debugger->onFrame();
+ }
+ return;
+ case Common::EVENT_KEYUP:
+ return;
+ case Common::EVENT_LBUTTONDOWN:
+ _leftButton = true;
+ break;
+ case Common::EVENT_LBUTTONUP:
+ _leftButton = false;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void EventsManager::checkForNextFrameCounter() {
+ // Check for next game frame
+ uint32 milli = g_system->getMillis();
+ if ((milli - _priorFrameTime) >= GAME_FRAME_TIME) {
+ ++_frameCounter;
+ _priorFrameTime = milli;
+
+ // Give time to the debugger
+ _vm->_debugger->onFrame();
+
+ // Signal the ScummVM debugger
+ _vm->_debugger->onFrame();
+ }
+}
+
+} // End of namespace Access
diff --git a/engines/access/events.h b/engines/access/events.h
new file mode 100644
index 0000000000..b30670cdbc
--- /dev/null
+++ b/engines/access/events.h
@@ -0,0 +1,86 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ACCESS_EVENTS_H
+#define ACCESS_EVENTS_H
+
+#include "common/scummsys.h"
+#include "common/events.h"
+#include "common/stack.h"
+
+namespace Access {
+
+enum CursorType { CURSOR_NONE = 0 };
+
+#define GAME_FRAME_RATE 50
+#define GAME_FRAME_TIME (1000 / GAME_FRAME_RATE)
+
+class AccessEngine;
+
+class EventsManager {
+private:
+ AccessEngine *_vm;
+ uint32 _frameCounter;
+ uint32 _priorFrameTime;
+ Common::Point _mousePos;
+
+ void checkForNextFrameCounter();
+public:
+ CursorType _cursorId;
+ bool _leftButton;
+public:
+ /**
+ * Constructor
+ */
+ EventsManager(AccessEngine *vm);
+
+ /**
+ * Destructor
+ */
+ ~EventsManager();
+
+ /**
+ * Sets the cursor
+ */
+ void setCursor(CursorType cursorId);
+
+ /**
+ * Show the mouse cursor
+ */
+ void showCursor();
+
+ /**
+ * Hide the mouse cursor
+ */
+ void hideCursor();
+
+ /**
+ * Returns if the mouse cursor is visible
+ */
+ bool isCursorVisible();
+
+ void pollEvents();
+};
+
+} // End of namespace Access
+
+#endif /* ACCESS_EVENTS_H */
diff --git a/engines/access/module.mk b/engines/access/module.mk
index c61ab50fae..a6f352f1a5 100644
--- a/engines/access/module.mk
+++ b/engines/access/module.mk
@@ -3,7 +3,8 @@ MODULE := engines/access
MODULE_OBJS := \
access.o \
debugger.o \
- detection.o
+ detection.o \
+ events.o
# This module can be built as a plugin
ifeq ($(ENABLE_ACCESS), DYNAMIC_PLUGIN)