mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-24 05:01:43 +00:00
ACCESS: Main engine skeleton and events manager
This commit is contained in:
parent
8480f53d60
commit
83f55f737b
@ -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() {
|
||||
|
@ -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
106
engines/access/events.cpp
Normal 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
86
engines/access/events.h
Normal 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 */
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user