ACCESS: Main engine skeleton and events manager

This commit is contained in:
Paul Gilbert 2014-07-29 22:49:45 -04:00
parent 8480f53d60
commit 83f55f737b
5 changed files with 204 additions and 1 deletions

View File

@ -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() {

View File

@ -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.
@ -65,6 +66,11 @@ 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();

106
engines/access/events.cpp Normal file
View File

@ -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

86
engines/access/events.h Normal file
View File

@ -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 */

View File

@ -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)