aboutsummaryrefslogtreecommitdiff
path: root/sword2/sword2.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2005-02-19 14:02:16 +0000
committerTorbjörn Andersson2005-02-19 14:02:16 +0000
commit43cfe01f3d8d2307a23933920cce43740871f367 (patch)
treefe56072f944bc980981d5f0cfe1683116645d076 /sword2/sword2.cpp
parent0de5fa2f33147529edcf4dccd24a2750b23a2867 (diff)
downloadscummvm-rg350-43cfe01f3d8d2307a23933920cce43740871f367.tar.gz
scummvm-rg350-43cfe01f3d8d2307a23933920cce43740871f367.tar.bz2
scummvm-rg350-43cfe01f3d8d2307a23933920cce43740871f367.zip
This is the second part of the BS2 restructuring. There are two new
classes: Screen and Mouse. Screen handles most of the drawing, except the mouse cursor and in-game menus. The old Graphics class is no more. I've also fixed some "reverse stereo" regressions from the first part of the restructuring. I'm not sure what the next step will be, but hopefully it will be smaller than this one was. svn-id: r16812
Diffstat (limited to 'sword2/sword2.cpp')
-rw-r--r--sword2/sword2.cpp115
1 files changed, 35 insertions, 80 deletions
diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp
index 9bc65fcb38..461401b8a7 100644
--- a/sword2/sword2.cpp
+++ b/sword2/sword2.cpp
@@ -36,9 +36,9 @@
#include "sword2/logic.h"
#include "sword2/maketext.h"
#include "sword2/memory.h"
+#include "sword2/mouse.h"
#include "sword2/resman.h"
#include "sword2/sound.h"
-#include "sword2/driver/d_draw.h"
#ifdef _WIN32_WCE
extern bool isSmartphone(void);
@@ -121,60 +121,21 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst) : Engine(syst)
_bootParam = ConfMan.getInt("boot_param");
_saveSlot = ConfMan.getInt("save_slot");
- _debugger = NULL;
- _graphics = NULL;
+ _memory = NULL;
+ _resman = NULL;
_sound = NULL;
- _gui = NULL;
- _fontRenderer = NULL;
+ _screen = NULL;
+ _mouse = NULL;
_logic = NULL;
- _resman = NULL;
- _memory = NULL;
+ _fontRenderer = NULL;
+ _gui = NULL;
+ _debugger = NULL;
_keyboardEvent.pending = false;
_mouseEvent.pending = false;
- _lastPaletteRes = 0;
-
- _largestLayerArea = 0;
- _largestSpriteArea = 0;
-
- strcpy(_largestLayerInfo, "largest layer: none registered");
- strcpy(_largestSpriteInfo, "largest sprite: none registered");
-
- _fps = 0;
- _cycleTime = 0;
- _frameCount = 0;
-
_wantSfxDebug = false;
- // For the menus
-
- _totalTemp = 0;
- memset(_tempList, 0, sizeof(_tempList));
-
- _totalMasters = 0;
- memset(_masterMenuList, 0, sizeof(_masterMenuList));
- memset(&_thisScreen, 0, sizeof(_thisScreen));
- memset(_mouseList, 0, sizeof(_mouseList));
-
- _mouseX = _mouseY = 0;
- _mouseTouching = 0;
- _oldMouseTouching = 0;
- _menuSelectedPos = 0;
- _examiningMenuIcon = false;
- _mousePointerRes = 0;
- _mouseMode = 0;
- _mouseStatus = false;
- _mouseModeLocked = false;
- _currentLuggageResource = 0;
- _oldButton = 0;
- _buttonClick = 0;
- _pointerTextBlocNo = 0;
- _playerActivityDelay = 0;
- _realLuggageItem = 0;
-
- _scrollFraction = 16;
-
#ifdef SWORD2_DEBUG
_stepOneCycle = false;
_renderSkip = false;
@@ -190,10 +151,11 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst) : Engine(syst)
Sword2Engine::~Sword2Engine() {
delete _debugger;
- delete _graphics;
delete _sound;
delete _gui;
delete _fontRenderer;
+ delete _screen;
+ delete _mouse;
delete _logic;
delete _resman;
delete _memory;
@@ -233,7 +195,7 @@ int Sword2Engine::init(GameDetector &detector) {
_system->beginGFXTransaction();
initCommonGFX(detector);
- _graphics = new Graphics(this, 640, 480);
+ _screen = new Screen(this, 640, 480);
_system->endGFXTransaction();
// Create the debugger as early as possible (but not before the
@@ -249,6 +211,7 @@ int Sword2Engine::init(GameDetector &detector) {
_fontRenderer = new FontRenderer(this);
_gui = new Gui(this);
_sound = new Sound(this);
+ _mouse = new Mouse(this);
// Setup mixer
if (!_mixer->isReady())
@@ -278,7 +241,7 @@ int Sword2Engine::init(GameDetector &detector) {
if (saveExists(_saveSlot))
restoreGame(_saveSlot);
else {
- setMouse(NORMAL_MOUSE_ID);
+ _mouse->setMouse(NORMAL_MOUSE_ID);
if (!_gui->restoreControl())
startGame();
}
@@ -286,7 +249,7 @@ int Sword2Engine::init(GameDetector &detector) {
int32 pars[2] = { 221, FX_LOOP };
bool result;
- setMouse(NORMAL_MOUSE_ID);
+ _mouse->setMouse(NORMAL_MOUSE_ID);
_logic->fnPlayMusic(pars);
result = _gui->startControl();
@@ -302,7 +265,7 @@ int Sword2Engine::init(GameDetector &detector) {
} else
startGame();
- _graphics->initialiseRenderCycle();
+ _screen->initialiseRenderCycle();
return 0;
}
@@ -374,9 +337,9 @@ int Sword2Engine::go() {
// display once every 4 game-cycles
if (!_renderSkip || (_gameCycle % 4) == 0)
- buildDisplay();
+ _screen->buildDisplay();
#else
- buildDisplay();
+ _screen->buildDisplay();
#endif
}
@@ -433,8 +396,7 @@ void Sword2Engine::parseEvents() {
break;
case OSystem::EVENT_MOUSEMOVE:
if (!(_eventFilter & RD_KEYDOWN)) {
- _mouseX = event.mouse.x;
- _mouseY = event.mouse.y - RDMENU_MENUDEEP;
+ _mouse->setPos(event.mouse.x, event.mouse.y - RDMENU_MENUDEEP);
}
break;
case OSystem::EVENT_LBUTTONDOWN:
@@ -493,8 +455,8 @@ void Sword2Engine::gameCycle() {
// will fill thrm through fnRegisterFrame() and
// fnRegisterMouse().
- resetRenderLists();
- resetMouseList();
+ _screen->resetRenderLists();
+ _mouse->resetMouseList();
// Keep going as long as new lists keep getting put in
// - i.e. screen changes.
@@ -505,10 +467,12 @@ void Sword2Engine::gameCycle() {
}
// If this screen is wide, recompute the scroll offsets every cycle
- if (_thisScreen.scroll_flag)
- setScrolling();
+ ScreenInfo *screenInfo = _screen->getScreenInfo();
- mouseEngine();
+ if (screenInfo->scroll_flag)
+ _screen->setScrolling();
+
+ _mouse->mouseEngine();
_sound->processFxQueue();
}
@@ -551,26 +515,19 @@ void Sword2Engine::sleepUntil(uint32 time) {
while (getMillis() < time) {
// Make sure menu animations and fades don't suffer, but don't
// redraw the entire scene.
- _graphics->processMenu();
- _graphics->updateDisplay(false);
+ _mouse->processMenu();
+ _screen->updateDisplay(false);
_system->delayMillis(10);
}
}
void Sword2Engine::pauseGame() {
// Don't allow Pause while screen fading or while black
- if (_graphics->getFadeStatus() != RDFADE_NONE)
+ if (_screen->getFadeStatus() != RDFADE_NONE)
return;
_sound->pauseAllSound();
-
- // Make the mouse cursor normal. This is the only place where we are
- // allowed to clear the luggage this way.
-
- clearPointerText();
- _graphics->setLuggageAnim(NULL, 0);
- setMouse(0);
- _mouseTouching = 1;
+ _mouse->pauseGame();
// If level at max, turn down because palette-matching won't work
// when dimmed
@@ -585,22 +542,20 @@ void Sword2Engine::pauseGame() {
// dim the palette during the pause
if (!_stepOneCycle)
- _graphics->dimPalette();
+ _screen->dimPalette();
#else
- _graphics->dimPalette();
+ _screen->dimPalette();
#endif
_gamePaused = true;
}
void Sword2Engine::unpauseGame() {
- if (Logic::_scriptVars[OBJECT_HELD] && _realLuggageItem)
- setLuggage(_realLuggageItem);
-
+ _mouse->unpauseGame();
_sound->unpauseAllSound();
// Put back game screen palette; see build_display.cpp
- setFullPalette(-1);
+ _screen->setFullPalette(-1);
// If graphics level at max, turn up again
if (_graphicsLevelFudged) {
@@ -611,8 +566,8 @@ void Sword2Engine::unpauseGame() {
_gamePaused = false;
// If mouse is about or we're in a chooser menu
- if (!_mouseStatus || _logic->_choosing)
- setMouse(NORMAL_MOUSE_ID);
+ if (!_mouse->getMouseStatus() || _logic->_choosing)
+ _mouse->setMouse(NORMAL_MOUSE_ID);
}
uint32 Sword2Engine::getMillis() {