diff options
author | Torbjörn Andersson | 2005-02-19 14:02:16 +0000 |
---|---|---|
committer | Torbjörn Andersson | 2005-02-19 14:02:16 +0000 |
commit | 43cfe01f3d8d2307a23933920cce43740871f367 (patch) | |
tree | fe56072f944bc980981d5f0cfe1683116645d076 /sword2/sword2.cpp | |
parent | 0de5fa2f33147529edcf4dccd24a2750b23a2867 (diff) | |
download | scummvm-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.cpp | 115 |
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() { |