Ticket #2704: sky-mouse.diff
File sky-mouse.diff, 10.6 KB (added by , 17 years ago) |
---|
-
engines/sky/intro.h
29 29 30 30 namespace Sky { 31 31 32 class SkyEngine; 32 33 class Disk; 33 34 class Screen; 34 35 class MusicBase; … … 37 38 38 39 class Intro { 39 40 public: 40 Intro( Disk *disk, Screen *screen, MusicBase *music, Sound *sound, Text *text, Audio::Mixer *mixer, OSystem *system);41 Intro(SkyEngine *vm, Disk *disk, Screen *screen, MusicBase *music, Sound *sound, Text *text, Audio::Mixer *mixer, OSystem *system); 41 42 ~Intro(void); 42 43 bool doIntro(bool floppyIntro); 43 44 bool _quitProg; … … 46 47 static uint16 _floppyIntroSeq[]; 47 48 static uint16 _cdIntroSeq[]; 48 49 50 SkyEngine *_vm; 49 51 Disk *_skyDisk; 50 52 Screen *_skyScreen; 51 53 MusicBase *_skyMusic; -
engines/sky/sky.h
24 24 #define SKYMAIN_H 25 25 26 26 #include "common/stdafx.h" 27 #include "common/system.h" 27 28 #include "engines/engine.h" 28 29 29 30 namespace Sky { … … 79 80 SkyEngine(OSystem *syst); 80 81 virtual ~SkyEngine(); 81 82 83 bool pollEvent(OSystem::Event &event); 84 82 85 static bool isDemo(void); 83 86 static bool isCDVersion(void); 84 87 -
engines/sky/screen.h
56 56 57 57 class Screen { 58 58 public: 59 Screen(OSystem *pSystem, Disk *pDisk, SkyCompact *skyCompact);59 Screen(OSystem *pSystem, SkyEngine *vm, Disk *pDisk, SkyCompact *skyCompact); 60 60 ~Screen(void); 61 61 void setPalette(uint8 *pal); 62 62 void setPaletteEndian(uint8 *pal); … … 95 95 96 96 private: 97 97 OSystem *_system; 98 SkyEngine *_vm; 98 99 Disk *_skyDisk; 99 100 SkyCompact *_skyCompact; 100 101 static uint8 _top16Colours[16*3]; -
engines/sky/control.h
33 33 34 34 namespace Sky { 35 35 36 class SkyEngine; 36 37 class Disk; 37 38 class Screen; 38 39 class Logic; … … 178 179 179 180 class Control { 180 181 public: 181 Control(Common::SaveFileManager *saveFileMan, S creen *screen, Disk *disk, Mouse *mouse, Text *text, MusicBase *music, Logic *logic, Sound *sound, SkyCompact *skyCompact, OSystem *system);182 Control(Common::SaveFileManager *saveFileMan, SkyEngine *vm, Screen *screen, Disk *disk, Mouse *mouse, Text *text, MusicBase *music, Logic *logic, Sound *sound, SkyCompact *skyCompact, OSystem *system); 182 183 void doControlPanel(void); 183 184 void doLoadSavePanel(void); 184 185 void restartGame(void); … … 230 231 uint16 parseSaveData(uint8 *srcBuf); 231 232 232 233 Common::SaveFileManager *_saveFileMan; 234 SkyEngine *_vm; 233 235 SkyCompact *_skyCompact; 234 236 Screen *_skyScreen; 235 237 Disk *_skyDisk; -
engines/sky/mouse.cpp
88 88 24829 89 89 }; 90 90 91 Mouse::Mouse(OSystem *system, Disk *skyDisk, SkyCompact *skyCompact) {91 Mouse::Mouse(OSystem *system, SkyEngine *vm, Disk *skyDisk, SkyCompact *skyCompact) { 92 92 93 _vm = vm; 93 94 _skyDisk = skyDisk; 94 95 _skyCompact = skyCompact; 95 96 _system = system; 97 _mouseButtons = 0; 96 98 _mouseB = 0; 97 99 _currentCursor = 6; 98 100 _mouseX = GAME_SCREEN_WIDTH / 2; … … 173 175 uint32 now = _system->getMillis(); 174 176 OSystem::Event event; 175 177 while (mousePressed || _system->getMillis() < now + minDelay) { 176 while (_ system->pollEvent(event)) {178 while (_vm->pollEvent(event)) { 177 179 switch (event.type) { 178 case OSystem::EVENT_LBUTTONUP:179 mousePressed = false;180 break;181 180 case OSystem::EVENT_KEYDOWN: 182 181 if (event.kbd.ascii == 27) { 183 182 minDelay = 0; … … 193 192 break; 194 193 } 195 194 } 195 if (!giveMouseButtons() & kButtonLeft) 196 mousePressed = false; 196 197 _system->updateScreen(); 197 198 _system->delayMillis(20); 198 199 } … … 270 271 } 271 272 } 272 273 274 void Mouse::buttonUp(uint8 button) { 275 276 _mouseButtons &= ~button; 277 } 278 279 void Mouse::buttonDown(uint8 button) { 280 281 _mouseButtons |= button; 282 } 283 273 284 void Mouse::buttonPressed(uint8 button) { 274 285 275 286 _mouseB = button; -
engines/sky/intro.cpp
623 623 SEQEND 624 624 }; 625 625 626 Intro::Intro( Disk *disk, Screen *screen, MusicBase *music, Sound *sound, Text *text, Audio::Mixer *mixer, OSystem *system) {626 Intro::Intro(SkyEngine *vm, Disk *disk, Screen *screen, MusicBase *music, Sound *sound, Text *text, Audio::Mixer *mixer, OSystem *system) { 627 627 628 _vm = vm; 628 629 _skyDisk = disk; 629 630 _skyScreen = screen; 630 631 _skyMusic = music; … … 906 907 907 908 int32 nDelay = 0; 908 909 do { 909 while (_ system->pollEvent(event)) {910 while (_vm->pollEvent(event)) { 910 911 if (event.type == OSystem::EVENT_KEYDOWN) { 911 912 if (event.kbd.keycode == 27) 912 913 return false; -
engines/sky/sky.cpp
274 274 if (result != GAME_RESTORED) { 275 275 bool introSkipped = false; 276 276 if (_systemVars.gameVersion > 267) { // don't do intro for floppydemos 277 _skyIntro = new Intro( _skyDisk, _skyScreen, _skyMusic, _skySound, _skyText, _mixer, _system);277 _skyIntro = new Intro(this, _skyDisk, _skyScreen, _skyMusic, _skySound, _skyText, _mixer, _system); 278 278 introSkipped = !_skyIntro->doIntro(_floppyIntro); 279 279 _systemVars.quitGame = _skyIntro->_quitProg; 280 280 … … 399 399 400 400 _skyCompact = new SkyCompact(); 401 401 _skyText = new Text(_skyDisk, _skyCompact); 402 _skyMouse = new Mouse(_system, _skyDisk, _skyCompact);403 _skyScreen = new Screen(_system, _skyDisk, _skyCompact);402 _skyMouse = new Mouse(_system, this, _skyDisk, _skyCompact); 403 _skyScreen = new Screen(_system, this, _skyDisk, _skyCompact); 404 404 405 405 initVirgin(); 406 406 initItemList(); … … 411 411 // initialize timer *after* _skyScreen has been initialized. 412 412 _timer->installTimerProc(&timerHandler, 1000000 / 50, this); //call 50 times per second 413 413 414 _skyControl = new Control(_saveFileMan, _skyScreen, _skyDisk, _skyMouse, _skyText, _skyMusic, _skyLogic, _skySound, _skyCompact, _system);414 _skyControl = new Control(_saveFileMan, this, _skyScreen, _skyDisk, _skyMouse, _skyText, _skyMusic, _skyLogic, _skySound, _skyCompact, _system); 415 415 _skyLogic->useControlInstance(_skyControl); 416 416 417 417 switch (Common::parseLanguage(ConfMan.get("language"))) { … … 507 507 _skyScreen->handleTimer(); 508 508 } 509 509 510 bool SkyEngine::pollEvent(OSystem::Event &event) { 511 bool result = _system->pollEvent(event); 512 513 switch (event.type) { 514 case OSystem::EVENT_LBUTTONDOWN: 515 _skyMouse->buttonDown(Mouse::kButtonLeft); 516 break; 517 case OSystem::EVENT_RBUTTONDOWN: 518 _skyMouse->buttonDown(Mouse::kButtonRight); 519 break; 520 case OSystem::EVENT_LBUTTONUP: 521 _skyMouse->buttonUp(Mouse::kButtonLeft); 522 break; 523 case OSystem::EVENT_RBUTTONUP: 524 _skyMouse->buttonUp(Mouse::kButtonRight); 525 break; 526 default: 527 break; 528 } 529 530 return result; 531 } 532 510 533 void SkyEngine::delay(int32 amount) { 511 534 512 535 OSystem::Event event; … … 518 541 amount = 0; 519 542 520 543 do { 521 while ( _system->pollEvent(event)) {544 while (pollEvent(event)) { 522 545 switch (event.type) { 523 546 case OSystem::EVENT_KEYDOWN: 524 547 _keyFlags = event.kbd.flags; -
engines/sky/screen.cpp
53 53 63, 63, 63 54 54 }; 55 55 56 Screen::Screen(OSystem *pSystem, Disk *pDisk, SkyCompact *skyCompact) {56 Screen::Screen(OSystem *pSystem, SkyEngine *vm, Disk *pDisk, SkyCompact *skyCompact) { 57 57 58 _vm = vm; 58 59 _system = pSystem; 59 60 _skyDisk = pDisk; 60 61 _skyCompact = skyCompact; … … 395 396 OSystem::Event event; 396 397 397 398 _system->delayMillis(10); 398 while (_ system->pollEvent(event));399 while (_vm->pollEvent(event)); 399 400 } 400 401 } 401 402 … … 404 405 OSystem::Event event; 405 406 406 407 _system->delayMillis(20); 407 while (_ system->pollEvent(event));408 while (_vm->pollEvent(event)); 408 409 } 409 410 } 410 411 -
engines/sky/control.cpp
198 198 _statusText->drawToScreen(WITH_MASK); 199 199 } 200 200 201 Control::Control(Common::SaveFileManager *saveFileMan, S creen *screen, Disk *disk, Mouse *mouse, Text *text, MusicBase *music, Logic *logic, Sound *sound, SkyCompact *skyCompact, OSystem *system) {201 Control::Control(Common::SaveFileManager *saveFileMan, SkyEngine *vm, Screen *screen, Disk *disk, Mouse *mouse, Text *text, MusicBase *music, Logic *logic, Sound *sound, SkyCompact *skyCompact, OSystem *system) { 202 202 _saveFileMan = saveFileMan; 203 203 204 _vm = vm; 204 205 _skyScreen = screen; 205 206 _skyDisk = disk; 206 207 _skyMouse = mouse; … … 1541 1542 _keyPressed = 0; //reset 1542 1543 1543 1544 do { 1544 while (_ system->pollEvent(event)) {1545 while (_vm->pollEvent(event)) { 1545 1546 switch (event.type) { 1546 1547 case OSystem::EVENT_KEYDOWN: 1547 1548 // Make sure backspace works right (this fixes a small issue on OS X) -
engines/sky/mouse.h
30 30 31 31 namespace Sky { 32 32 33 class SkyEngine; 33 34 class Disk; 34 35 class Logic; 35 36 class SkyCompact; … … 37 38 class Mouse { 38 39 39 40 public: 41 enum { 42 kButtonLeft = 1, 43 kButtonRight = 2 44 }; 40 45 41 Mouse(OSystem *system, Disk *skyDisk, SkyCompact *skyCompact);46 Mouse(OSystem *system, SkyEngine *vm, Disk *skyDisk, SkyCompact *skyCompact); 42 47 ~Mouse(void); 43 48 44 49 void mouseEngine(uint16 mouseX, uint16 mouseY); … … 53 58 void drawNewMouse(void); 54 59 void spriteMouse(uint16 frameNum, uint8 mouseX, uint8 mouseY); 55 60 void useLogicInstance(Logic *skyLogic) { _skyLogic = skyLogic; }; 61 uint8 buttonStatus(void); 62 void buttonUp(uint8 button); 63 void buttonDown(uint8 button); 56 64 void buttonPressed(uint8 button); 57 65 void waitMouseNotPressed(int minDelay = 0); 66 uint8 giveMouseButtons(void) { return _mouseButtons; }; 58 67 uint16 giveMouseX(void) { return _mouseX; }; 59 68 uint16 giveMouseY(void) { return _mouseY; }; 60 69 uint16 giveCurrentMouseType(void) { return _currentCursor; }; … … 69 78 70 79 bool _logicClick; 71 80 81 uint8 _mouseButtons; 72 82 uint16 _mouseB; //mouse button 73 83 uint16 _mouseX; //actual mouse coordinates 74 84 uint16 _mouseY; … … 82 92 static uint32 _mouseLincObjects[21]; 83 93 84 94 OSystem *_system; 95 SkyEngine *_vm; 85 96 Disk *_skyDisk; 86 97 Logic *_skyLogic; 87 98 SkyCompact *_skyCompact;