diff options
Diffstat (limited to 'sky/control.h')
-rw-r--r-- | sky/control.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/sky/control.h b/sky/control.h new file mode 100644 index 0000000000..d8ef8d621f --- /dev/null +++ b/sky/control.h @@ -0,0 +1,194 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003 The ScummVM project + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Header$ + * + */ + +#ifndef CONTROL_H +#define CONTROL_H + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "sky/struc.h" +#include "common/engine.h" +#include "sky/screen.h" +#include "sky/disk.h" +#include "sky/mouse.h" + +#define MAX_SAVE_GAMES 999 +#define MAX_TEXT_LEN 80 +#define PAN_LINE_WIDTH 184 +#define PAN_CHAR_HEIGHT 12 +#define MPNL_X 60 // Main Panel +#define MPNL_Y 10 + +#define SPNL_X 20 // Save Panel +#define SPNL_Y 20 +#define SP_HEIGHT 149 +#define SP_TOP_GAP 12 +#define SP_BOT_GAP 27 + +#define GAME_NAME_X (SPNL_X + 18) // x coordinate of game names +#define GAME_NAME_Y (SPNL_Y + SP_TOP_GAP) // start y coord of game names +#define MAX_ON_SCREEN ((SP_HEIGHT - SP_TOP_GAP - SP_BOT_GAP) / PAN_CHAR_HEIGHT) // no of save games on screen +#define CP_PANEL 60400 // main panel sprite + +#define CHARACTER_LIST " ,().='-&+!?\"" // list of allowed characters + +#define MAINPANEL 0 +#define SAVEPANEL 1 + +#define NO_MASK false +#define WITH_MASK true + +// resource's onClick routines +#define DO_NOTHING 0 +#define REST_GAME_PANEL 1 +#define SAVE_GAME_PANEL 2 +#define SAVE_A_GAME 3 +#define RESTORE_A_GAME 4 +#define SP_CANCEL 5 +#define SHIFT_DOWN_FAST 6 +#define SHIFT_DOWN_SLOW 7 +#define SHIFT_UP_FAST 8 +#define SHIFT_UP_SLOW 9 +#define SPEED_SLIDE 10 +#define MUSIC_SLIDE 11 +#define TOGGLE_FX 12 +#define TOGGLE_MS 13 +#define EXIT 14 +#define RESTART 15 +#define QUIT_TO_DOS 16 + +// onClick return codes +#define CANCEL_PRESSED 100 +#define NAME_TOO_SHORT 101 +#define GAME_SAVED 102 +#define SHIFTED 103 +#define TOGGLED 104 +#define RESTARTED 105 +#define GAME_RESTORED 106 +#define RESTORE_FAILED 107 +#define NO_DISK_SPACE 108 +#define SPEED_CHANGED 109 +#define QUIT_PANEL 110 + +#define SLOW 0 +#define FAST 1 + +class SkyConResource { +public: + SkyConResource(void *pSpData, uint32 pNSprites, uint32 pCurSprite, uint16 pX, uint16 pY, uint32 pText, uint8 pOnClick, OSystem *system, uint8 *screen); + virtual ~SkyConResource(void) {}; + void setSprite(void *pSpData) { _spriteData = (dataFileHeader*)pSpData; }; + void setText(uint32 pText) { if (pText) _text = pText + 0x7000; else _text = 0; }; + void setXY(uint16 x, uint16 y) { _x = x; _y = y; }; + bool isMouseOver(uint32 mouseX, uint32 mouseY); + virtual void drawToScreen(bool doMask); + + dataFileHeader *_spriteData; + uint32 _numSprites, _curSprite; + uint16 _x, _y; + uint32 _text; + uint8 _onClick; + OSystem *_system; + uint8 *_screen; +private: +}; + +class SkyTextResource : public SkyConResource { +public: + SkyTextResource(void *pSpData, uint32 pNSprites, uint32 pCurSprite, uint16 pX, uint16 pY, uint32 pText, uint8 pOnClick, OSystem *system, uint8 *screen); + virtual ~SkyTextResource(void); + virtual void drawToScreen(bool doMask); +private: + uint16 _oldX, _oldY; + uint8 *_oldScreen; +}; + +class SkyControl { +public: + SkyControl(SkyScreen *screen, SkyDisk *disk, SkyMouse *mouse, SkyText *text, SkyMusicBase *music, OSystem *system, const char *savePath); + void doControlPanel(void); + +private: + void initPanel(void); + void removePanel(void); + void drawMainPanel(void); + void delay(unsigned int amount); + void buttonControl(SkyConResource *pButton); + void loadSaveDescriptions(uint8 *destBuf); + void setUpGameSprites(uint8 *nameBuf, dataFileHeader **nameSprites, uint16 firstNum); + void showSprites(dataFileHeader **nameSprites); + void animClick(SkyConResource *pButton); + uint16 doMusicSlide(void); + uint16 handleClick(SkyConResource *pButton); + uint16 toggleFx(SkyConResource *pButton); + uint16 shiftDown(uint8 speed); + uint16 shiftUp(uint8 speed); + const char *_savePath; + + uint16 saveRestorePanel(bool allowEdit); + + SkyScreen *_skyScreen; + SkyDisk *_skyDisk; + SkyMouse *_skyMouse; + SkyText *_skyText; + SkyMusicBase *_skyMusic; + OSystem *_system; + int _mouseX, _mouseY; + bool _mouseClicked; + byte _keyPressed; + + SkyConResource *createResource(void *pSpData, uint32 pNSprites, uint32 pCurSprite, int16 pX, int16 pY, uint32 pText, uint8 pOnClick, uint8 panelType); + + struct { + uint8 *controlPanel; + uint8 *button; + uint8 *buttonDown; + uint8 *savePanel; + uint8 *yesNo; + uint8 *slide; + uint8 *slode; + uint8 *slode2; + uint8 *slide2; + uint8 *musicBodge; + } _sprites; + + uint8 *_screenBuf; + int _lastButton; + uint32 _curButtonText; + uint16 _firstText; + + dataFileHeader *_textSprite; + SkyTextResource *_text; + + SkyConResource *_controlPanel, *_exitButton, *_slide, *_slide2, *_slode; + SkyConResource *_restorePanButton, *_savePanButton, *_dosPanButton, *_restartPanButton, *_fxPanButton, *_musicPanButton; + SkyConResource *_bodge, *_yesNo; + SkyConResource *_controlPanLookList[9]; + + //- Save/restore panel + SkyConResource *_savePanel; + SkyConResource *_saveButton, *_downFastButton, *_downSlowButton; + SkyConResource *_upFastButton, *_upSlowButton, *_quitButton, *_restoreButton; + + SkyConResource *_savePanLookList[6], *_restorePanLookList[6]; +}; + +#endif // CONTROL_H |