2003-10-23 06:44:35 +00:00
|
|
|
/* 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 INPUT_H
|
|
|
|
#define INPUT_H
|
|
|
|
|
|
|
|
#include "queen/defs.h"
|
2003-10-30 10:56:38 +00:00
|
|
|
#include "queen/verb.h"
|
2003-10-23 07:16:05 +00:00
|
|
|
#include "common/scummsys.h"
|
2003-10-23 06:44:35 +00:00
|
|
|
|
|
|
|
class OSystem;
|
|
|
|
|
|
|
|
namespace Queen {
|
|
|
|
|
|
|
|
class Input {
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2003-11-09 20:50:03 +00:00
|
|
|
typedef void (*keyPressedCallback)(void *refCon, int key);
|
|
|
|
|
2003-10-23 06:44:35 +00:00
|
|
|
//! Adjust here to change delays!
|
|
|
|
enum {
|
2003-10-28 20:58:46 +00:00
|
|
|
DELAY_SHORT = 10,
|
2003-10-23 06:44:35 +00:00
|
|
|
DELAY_NORMAL = 100
|
|
|
|
};
|
|
|
|
|
2003-10-28 20:58:46 +00:00
|
|
|
enum {
|
|
|
|
MOUSE_LBUTTON = 1,
|
|
|
|
MOUSE_RBUTTON = 2
|
|
|
|
};
|
|
|
|
|
2003-11-02 20:42:36 +00:00
|
|
|
Input(Language language, OSystem *system);
|
2003-10-23 06:44:35 +00:00
|
|
|
|
|
|
|
//! calls the other delay() with a value adjusted depending on _fastMode
|
|
|
|
void delay();
|
|
|
|
|
|
|
|
//! moved QueenEngine::delay() here
|
|
|
|
void delay(uint amount);
|
|
|
|
|
|
|
|
//! convert input to verb
|
2003-11-09 20:50:03 +00:00
|
|
|
int checkKeys();
|
2003-10-23 06:44:35 +00:00
|
|
|
|
|
|
|
//! use instead of KEYVERB=0
|
2003-10-30 10:56:38 +00:00
|
|
|
void clearKeyVerb() { _keyVerb = Verb(VERB_NONE); }
|
2003-10-23 18:50:47 +00:00
|
|
|
|
|
|
|
void canQuit(bool cq) { _canQuit = cq; }
|
|
|
|
|
2003-10-28 20:58:46 +00:00
|
|
|
bool cutawayRunning() const { return _cutawayRunning; }
|
2003-10-23 18:50:47 +00:00
|
|
|
void cutawayRunning(bool running) { _cutawayRunning = running; }
|
|
|
|
|
2003-10-28 20:58:46 +00:00
|
|
|
bool cutawayQuit() const { return _cutawayQuit; }
|
2003-10-23 18:50:47 +00:00
|
|
|
void cutawayQuitReset() { _cutawayQuit = false; }
|
2003-10-23 06:44:35 +00:00
|
|
|
|
2003-10-28 20:58:46 +00:00
|
|
|
bool talkQuit() const { return _talkQuit; }
|
2003-10-23 06:44:35 +00:00
|
|
|
void talkQuitReset() { _talkQuit = false; }
|
|
|
|
|
2003-11-09 21:31:18 +00:00
|
|
|
bool quickSave() const { return _quickSave; }
|
|
|
|
void quickSaveReset() { _quickSave = false; }
|
|
|
|
bool quickLoad() const { return _quickLoad; }
|
|
|
|
void quickLoadReset() { _quickLoad = false; }
|
|
|
|
|
2003-11-09 20:50:03 +00:00
|
|
|
bool fastMode() const { return _fastMode; }
|
2003-10-23 06:44:35 +00:00
|
|
|
void fastMode(bool fm) { _fastMode = fm; }
|
|
|
|
|
2003-10-28 20:58:46 +00:00
|
|
|
Verb keyVerb() const { return _keyVerb; }
|
|
|
|
|
|
|
|
int mousePosX() const { return _mouse_x; }
|
|
|
|
int mousePosY() const { return _mouse_y; }
|
|
|
|
|
|
|
|
int mouseButton() const { return _mouseButton; }
|
|
|
|
void clearMouseButton() { _mouseButton = 0; }
|
|
|
|
|
2003-11-09 20:50:03 +00:00
|
|
|
bool waitForNumber(int &i, keyPressedCallback callback, void *refCon);
|
|
|
|
bool waitForCharacter(char &c);
|
|
|
|
|
2003-10-23 06:44:35 +00:00
|
|
|
private:
|
2003-10-23 18:50:47 +00:00
|
|
|
|
|
|
|
enum KeyCode {
|
|
|
|
KEY_SPACE = ' ',
|
|
|
|
KEY_COMMA = ',',
|
|
|
|
KEY_DOT = '.',
|
|
|
|
|
|
|
|
KEY_DIGIT_1 = '1',
|
|
|
|
KEY_DIGIT_2 = '2',
|
|
|
|
KEY_DIGIT_3 = '3',
|
|
|
|
KEY_DIGIT_4 = '4',
|
|
|
|
|
2003-11-09 20:50:03 +00:00
|
|
|
KEY_ESCAPE = 27,
|
|
|
|
KEY_RETURN = 13,
|
|
|
|
KEY_BACKSPACE = 8,
|
2003-10-23 18:50:47 +00:00
|
|
|
|
2003-11-09 21:31:18 +00:00
|
|
|
KEY_F1 = 282,
|
|
|
|
KEY_F11 = KEY_F1 + 10,
|
|
|
|
KEY_F12
|
2003-10-23 18:50:47 +00:00
|
|
|
};
|
2003-11-02 20:42:36 +00:00
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
LANGUAGE_COUNT = 6
|
|
|
|
};
|
2003-10-23 06:44:35 +00:00
|
|
|
|
|
|
|
//! Used to get keyboard and mouse events
|
|
|
|
OSystem *_system;
|
|
|
|
|
|
|
|
//! Some cutaways require update() run faster
|
|
|
|
bool _fastMode;
|
|
|
|
|
|
|
|
//! The current verb received from keyboard
|
|
|
|
Verb _keyVerb; // KEYVERB
|
|
|
|
|
|
|
|
//! set if a cutaway is running
|
|
|
|
bool _cutawayRunning; // CUTON
|
|
|
|
|
2003-10-23 18:50:47 +00:00
|
|
|
//! set this if we can quit
|
|
|
|
bool _canQuit; // inverse of CANTQUIT
|
|
|
|
|
2003-10-23 06:44:35 +00:00
|
|
|
//! moved Cutaway::_quit here
|
2003-10-23 18:50:47 +00:00
|
|
|
bool _cutawayQuit; // cutawayQuit
|
2003-10-23 06:44:35 +00:00
|
|
|
|
|
|
|
//! moved Talk::_quit here
|
|
|
|
bool _talkQuit; // TALKQUIT
|
|
|
|
|
2003-11-09 21:31:18 +00:00
|
|
|
//! Set if quicksave requested
|
|
|
|
bool _quickSave;
|
|
|
|
|
|
|
|
//! Set if quickload requested
|
|
|
|
bool _quickLoad;
|
|
|
|
|
2003-10-23 06:44:35 +00:00
|
|
|
//! Set by delay();
|
2003-10-23 18:50:47 +00:00
|
|
|
int _inKey;
|
2003-10-23 06:44:35 +00:00
|
|
|
|
|
|
|
//! Set by delay();
|
2003-10-28 20:58:46 +00:00
|
|
|
int _mouse_x, _mouse_y;
|
|
|
|
|
|
|
|
//! Set by delay();
|
|
|
|
int _mouseButton;
|
2003-10-23 06:44:35 +00:00
|
|
|
|
2003-11-02 20:42:36 +00:00
|
|
|
//! Command keys for current language
|
|
|
|
const char* _currentCommandKeys;
|
|
|
|
|
|
|
|
//! Command keys for all languages
|
|
|
|
static const char* _commandKeys[LANGUAGE_COUNT];
|
2003-10-23 06:44:35 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
} // End of namespace Queen
|
|
|
|
|
|
|
|
#endif
|