diff options
author | Paul Gilbert | 2014-07-29 22:49:45 -0400 |
---|---|---|
committer | Paul Gilbert | 2014-07-29 22:49:45 -0400 |
commit | 83f55f737b3eab7be2236de1bf31035024400e43 (patch) | |
tree | 9fb03a6766cc29954fd92b9a4543f5a4af6eba7e /engines | |
parent | 8480f53d6005b5873964ca1015644ae6925e6ede (diff) | |
download | scummvm-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.cpp | 3 | ||||
-rw-r--r-- | engines/access/access.h | 7 | ||||
-rw-r--r-- | engines/access/events.cpp | 106 | ||||
-rw-r--r-- | engines/access/events.h | 86 | ||||
-rw-r--r-- | engines/access/module.mk | 3 |
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) |