Ticket #2704: sky-mouse.diff

File sky-mouse.diff, 10.6 KB (added by eriktorbjorn, 17 years ago)

Patch against current SVN

  • engines/sky/intro.h

     
    2929
    3030namespace Sky {
    3131
     32class SkyEngine;
    3233class Disk;
    3334class Screen;
    3435class MusicBase;
     
    3738
    3839class Intro {
    3940public:
    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);
    4142        ~Intro(void);
    4243        bool doIntro(bool floppyIntro);
    4344        bool _quitProg;
     
    4647        static uint16 _floppyIntroSeq[];
    4748        static uint16 _cdIntroSeq[];
    4849
     50        SkyEngine *_vm;
    4951        Disk *_skyDisk;
    5052        Screen *_skyScreen;
    5153        MusicBase *_skyMusic;
  • engines/sky/sky.h

     
    2424#define SKYMAIN_H
    2525
    2626#include "common/stdafx.h"
     27#include "common/system.h"
    2728#include "engines/engine.h"
    2829
    2930namespace Sky {
     
    7980        SkyEngine(OSystem *syst);
    8081        virtual ~SkyEngine();
    8182
     83        bool pollEvent(OSystem::Event &event);
     84
    8285        static bool isDemo(void);
    8386        static bool isCDVersion(void);
    8487
  • engines/sky/screen.h

     
    5656
    5757class Screen {
    5858public:
    59         Screen(OSystem *pSystem, Disk *pDisk, SkyCompact *skyCompact);
     59        Screen(OSystem *pSystem, SkyEngine *vm, Disk *pDisk, SkyCompact *skyCompact);
    6060        ~Screen(void);
    6161        void setPalette(uint8 *pal);
    6262        void setPaletteEndian(uint8 *pal);
     
    9595
    9696private:
    9797        OSystem *_system;
     98        SkyEngine *_vm;
    9899        Disk *_skyDisk;
    99100        SkyCompact *_skyCompact;
    100101        static uint8 _top16Colours[16*3];
  • engines/sky/control.h

     
    3333
    3434namespace Sky {
    3535
     36class SkyEngine;
    3637class Disk;
    3738class Screen;
    3839class Logic;
     
    178179
    179180class Control {
    180181public:
    181         Control(Common::SaveFileManager *saveFileMan, Screen *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);
    182183        void doControlPanel(void);
    183184        void doLoadSavePanel(void);
    184185        void restartGame(void);
     
    230231        uint16 parseSaveData(uint8 *srcBuf);
    231232
    232233        Common::SaveFileManager *_saveFileMan;
     234        SkyEngine *_vm;
    233235        SkyCompact *_skyCompact;
    234236        Screen *_skyScreen;
    235237        Disk *_skyDisk;
  • engines/sky/mouse.cpp

     
    8888        24829
    8989};
    9090
    91 Mouse::Mouse(OSystem *system, Disk *skyDisk, SkyCompact *skyCompact) {
     91Mouse::Mouse(OSystem *system, SkyEngine *vm, Disk *skyDisk, SkyCompact *skyCompact) {
    9292
     93        _vm = vm;
    9394        _skyDisk = skyDisk;
    9495        _skyCompact = skyCompact;
    9596        _system = system;
     97        _mouseButtons = 0;
    9698        _mouseB = 0;
    9799        _currentCursor = 6;
    98100        _mouseX = GAME_SCREEN_WIDTH / 2;
     
    173175        uint32 now = _system->getMillis();
    174176        OSystem::Event event;
    175177        while (mousePressed || _system->getMillis() < now + minDelay) {
    176                 while (_system->pollEvent(event)) {
     178                while (_vm->pollEvent(event)) {
    177179                        switch (event.type) {
    178                         case OSystem::EVENT_LBUTTONUP:
    179                                 mousePressed = false;
    180                                 break;
    181180                        case OSystem::EVENT_KEYDOWN:
    182181                                if (event.kbd.ascii == 27) {
    183182                                        minDelay = 0;
     
    193192                                break;
    194193                        }
    195194                }
     195                if (!giveMouseButtons() & kButtonLeft)
     196                        mousePressed = false;
    196197                _system->updateScreen();
    197198                _system->delayMillis(20);
    198199        }
     
    270271        }
    271272}
    272273
     274void Mouse::buttonUp(uint8 button) {
     275
     276        _mouseButtons &= ~button;
     277}
     278
     279void Mouse::buttonDown(uint8 button) {
     280
     281        _mouseButtons |= button;
     282}
     283
    273284void Mouse::buttonPressed(uint8 button) {
    274285
    275286        _mouseB = button;
  • engines/sky/intro.cpp

     
    623623        SEQEND
    624624};
    625625
    626 Intro::Intro(Disk *disk, Screen *screen, MusicBase *music, Sound *sound, Text *text, Audio::Mixer *mixer, OSystem *system) {
     626Intro::Intro(SkyEngine *vm, Disk *disk, Screen *screen, MusicBase *music, Sound *sound, Text *text, Audio::Mixer *mixer, OSystem *system) {
    627627
     628        _vm = vm;
    628629        _skyDisk = disk;
    629630        _skyScreen = screen;
    630631        _skyMusic = music;
     
    906907
    907908        int32 nDelay = 0;
    908909        do {
    909                 while (_system->pollEvent(event)) {
     910                while (_vm->pollEvent(event)) {
    910911                        if (event.type == OSystem::EVENT_KEYDOWN) {
    911912                                if (event.kbd.keycode == 27)
    912913                                        return false;
  • engines/sky/sky.cpp

     
    274274        if (result != GAME_RESTORED) {
    275275                bool introSkipped = false;
    276276                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);
    278278                        introSkipped = !_skyIntro->doIntro(_floppyIntro);
    279279                        _systemVars.quitGame = _skyIntro->_quitProg;
    280280
     
    399399
    400400        _skyCompact = new SkyCompact();
    401401        _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);
    404404
    405405        initVirgin();
    406406        initItemList();
     
    411411        // initialize timer *after* _skyScreen has been initialized.
    412412        _timer->installTimerProc(&timerHandler, 1000000 / 50, this); //call 50 times per second
    413413
    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);
    415415        _skyLogic->useControlInstance(_skyControl);
    416416
    417417        switch (Common::parseLanguage(ConfMan.get("language"))) {
     
    507507        _skyScreen->handleTimer();
    508508}
    509509
     510bool 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
    510533void SkyEngine::delay(int32 amount) {
    511534
    512535        OSystem::Event event;
     
    518541                amount = 0;
    519542
    520543        do {
    521                 while (_system->pollEvent(event)) {
     544                while (pollEvent(event)) {
    522545                        switch (event.type) {
    523546                        case OSystem::EVENT_KEYDOWN:
    524547                                _keyFlags = event.kbd.flags;
  • engines/sky/screen.cpp

     
    5353        63, 63, 63
    5454};
    5555
    56 Screen::Screen(OSystem *pSystem, Disk *pDisk, SkyCompact *skyCompact) {
     56Screen::Screen(OSystem *pSystem, SkyEngine *vm, Disk *pDisk, SkyCompact *skyCompact) {
    5757
     58        _vm = vm;
    5859        _system = pSystem;
    5960        _skyDisk = pDisk;
    6061        _skyCompact = skyCompact;
     
    395396                OSystem::Event event;
    396397
    397398                _system->delayMillis(10);
    398                 while (_system->pollEvent(event));
     399                while (_vm->pollEvent(event));
    399400        }
    400401}
    401402
     
    404405                OSystem::Event event;
    405406
    406407                _system->delayMillis(20);
    407                 while (_system->pollEvent(event));
     408                while (_vm->pollEvent(event));
    408409        }
    409410}
    410411
  • engines/sky/control.cpp

     
    198198        _statusText->drawToScreen(WITH_MASK);
    199199}
    200200
    201 Control::Control(Common::SaveFileManager *saveFileMan, Screen *screen, Disk *disk, Mouse *mouse, Text *text, MusicBase *music, Logic *logic, Sound *sound, SkyCompact *skyCompact, OSystem *system) {
     201Control::Control(Common::SaveFileManager *saveFileMan, SkyEngine *vm, Screen *screen, Disk *disk, Mouse *mouse, Text *text, MusicBase *music, Logic *logic, Sound *sound, SkyCompact *skyCompact, OSystem *system) {
    202202        _saveFileMan = saveFileMan;
    203203
     204        _vm = vm;
    204205        _skyScreen = screen;
    205206        _skyDisk = disk;
    206207        _skyMouse = mouse;
     
    15411542        _keyPressed = 0;        //reset
    15421543
    15431544        do {
    1544                 while (_system->pollEvent(event)) {
     1545                while (_vm->pollEvent(event)) {
    15451546                        switch (event.type) {
    15461547                        case OSystem::EVENT_KEYDOWN:
    15471548                                // Make sure backspace works right (this fixes a small issue on OS X)
  • engines/sky/mouse.h

     
    3030
    3131namespace Sky {
    3232
     33class SkyEngine;
    3334class Disk;
    3435class Logic;
    3536class SkyCompact;
     
    3738class Mouse {
    3839
    3940public:
     41        enum {
     42                kButtonLeft = 1,
     43                kButtonRight = 2
     44        };
    4045
    41         Mouse(OSystem *system, Disk *skyDisk, SkyCompact *skyCompact);
     46        Mouse(OSystem *system, SkyEngine *vm, Disk *skyDisk, SkyCompact *skyCompact);
    4247        ~Mouse(void);
    4348
    4449        void mouseEngine(uint16 mouseX, uint16 mouseY);
     
    5358        void drawNewMouse(void);
    5459        void spriteMouse(uint16 frameNum, uint8 mouseX, uint8 mouseY);
    5560        void useLogicInstance(Logic *skyLogic) { _skyLogic = skyLogic; };
     61        uint8 buttonStatus(void);
     62        void buttonUp(uint8 button);
     63        void buttonDown(uint8 button);
    5664        void buttonPressed(uint8 button);
    5765        void waitMouseNotPressed(int minDelay = 0);
     66        uint8 giveMouseButtons(void) { return _mouseButtons; };
    5867        uint16 giveMouseX(void) { return _mouseX; };
    5968        uint16 giveMouseY(void) { return _mouseY; };
    6069        uint16 giveCurrentMouseType(void) { return _currentCursor; };
     
    6978
    7079        bool _logicClick;
    7180
     81        uint8 _mouseButtons;
    7282        uint16 _mouseB; //mouse button
    7383        uint16 _mouseX; //actual mouse coordinates
    7484        uint16 _mouseY;
     
    8292        static uint32 _mouseLincObjects[21];
    8393
    8494        OSystem *_system;
     95        SkyEngine *_vm;
    8596        Disk *_skyDisk;
    8697        Logic *_skyLogic;
    8798        SkyCompact *_skyCompact;