aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorMatthew Hoops2011-09-06 20:59:06 -0400
committerMatthew Hoops2011-09-06 20:59:06 -0400
commite56546a83d3dd3c9bf0d301b547d499e4b06b636 (patch)
treec6e704b2a6ef4d295260fe030a64993b8502cd1c /engines
parentcbcae58caf674198bf19f4b8bb3bf07c0a30055b (diff)
downloadscummvm-rg350-e56546a83d3dd3c9bf0d301b547d499e4b06b636.tar.gz
scummvm-rg350-e56546a83d3dd3c9bf0d301b547d499e4b06b636.tar.bz2
scummvm-rg350-e56546a83d3dd3c9bf0d301b547d499e4b06b636.zip
PEGASUS: Implement two of the base input classes
Diffstat (limited to 'engines')
-rwxr-xr-xengines/pegasus/constants.h220
-rwxr-xr-xengines/pegasus/input.cpp138
-rwxr-xr-xengines/pegasus/input.h373
-rw-r--r--engines/pegasus/module.mk1
-rw-r--r--engines/pegasus/neighborhood/neighborhood.cpp1
5 files changed, 513 insertions, 220 deletions
diff --git a/engines/pegasus/constants.h b/engines/pegasus/constants.h
index 509c9f3892..dd12727baf 100755
--- a/engines/pegasus/constants.h
+++ b/engines/pegasus/constants.h
@@ -187,8 +187,6 @@ const TimeValue kFiveMinutesPerSixtyTicks = kFiveMinutes * kSixtyTicksPerSecond;
const TimeValue kTenMinutesPerSixtyTicks = kTenMinutes * kSixtyTicksPerSecond;
// Time in seconds you can hang around Caldoria without going to work...
-//const TimeValue kCaldoriaUncreatedTimeLimit = kFifteenMinutes;
-//const TimeValue kCaldoriaUncreatedTimeLimit = kTwentyMinutes;
const TimeValue kLateWarning2TimeLimit = kFiveMinutes;
const TimeValue kLateWarning3TimeLimit = kTenMinutes;
@@ -221,224 +219,6 @@ const TimeValue kPlasmaImpactTime = kTwoSeconds;
const TimeValue kNoradAirMaskTimeLimit = kOneMinute + kFifteenSeconds;
-enum {
- kButtonDownBit = 0,
- kAutoButtonBit = 1,
- kBitsPerButton = 2,
-
- kButtonDownMask = 1 << kButtonDownBit,
- kAutoButtonMask = 1 << kAutoButtonBit,
-
- kButtonStateBits = kButtonDownMask | kAutoButtonMask,
-
- kRawButtonUp = 0,
- kRawButtonDown = kButtonDownMask | kAutoButtonMask,
-
- kButtonUp = 0,
- kButtonDown = kButtonDownMask,
- kButtonAutoUp = kAutoButtonMask,
- kButtonAutoDown = kButtonDownMask | kAutoButtonMask
-};
-
-enum {
- kUpButtonNum = 0,
- kLeftButtonNum = 1,
- kDownButtonNum = 2,
- kRightButtonNum = 3,
- kLeftFireButtonNum = 4,
- kRightFireButtonNum = 5,
- kOneButtonNum = 6,
- kTwoButtonNum = 7,
- kThreeButtonNum = 8,
- kFourButtonNum = 9,
- kMod1ButtonNum = 10,
- kMod2ButtonNum = 11,
- kMod3ButtonNum = 12
-};
-
-enum {
- kUpButtonShift = kUpButtonNum * kBitsPerButton,
- kLeftButtonShift = kLeftButtonNum * kBitsPerButton,
- kDownButtonShift = kDownButtonNum * kBitsPerButton,
- kRightButtonShift = kRightButtonNum * kBitsPerButton,
- kLeftFireButtonShift = kLeftFireButtonNum * kBitsPerButton,
- kRightFireButtonShift = kRightFireButtonNum * kBitsPerButton,
- kOneButtonShift = kOneButtonNum * kBitsPerButton,
- kTwoButtonShift = kTwoButtonNum * kBitsPerButton,
- kThreeButtonShift = kThreeButtonNum * kBitsPerButton,
- kFourButtonShift = kFourButtonNum * kBitsPerButton,
- kMod1ButtonShift = kMod1ButtonNum * kBitsPerButton,
- kMod2ButtonShift = kMod2ButtonNum * kBitsPerButton,
- kMod3ButtonShift = kMod3ButtonNum * kBitsPerButton
-};
-
-enum {
- kAllUpBits = (kButtonUp << kUpButtonShift) |
- (kButtonUp << kLeftButtonShift) |
- (kButtonUp << kDownButtonShift) |
- (kButtonUp << kRightButtonShift) |
- (kButtonUp << kLeftFireButtonShift) |
- (kButtonUp << kRightFireButtonShift) |
- (kButtonUp << kOneButtonShift) |
- (kButtonUp << kTwoButtonShift) |
- (kButtonUp << kThreeButtonShift) |
- (kButtonUp << kFourButtonShift) |
- (kButtonUp << kMod1ButtonShift) |
- (kButtonUp << kMod2ButtonShift) |
- (kButtonUp << kMod3ButtonShift),
- kDirectionBits = (kButtonDownMask << kUpButtonShift) |
- (kButtonDownMask << kLeftButtonShift) |
- (kButtonDownMask << kDownButtonShift) |
- (kButtonDownMask << kRightButtonShift),
- kButtonBits = (kButtonDownMask << kLeftFireButtonShift) |
- (kButtonDownMask << kRightFireButtonShift) |
- (kButtonDownMask << kOneButtonShift) |
- (kButtonDownMask << kTwoButtonShift) |
- (kButtonDownMask << kThreeButtonShift) |
- (kButtonDownMask << kFourButtonShift) |
- (kButtonDownMask << kMod1ButtonShift) |
- (kButtonDownMask << kMod2ButtonShift) |
- (kButtonDownMask << kMod3ButtonShift),
- kAllButtonDownBits = kDirectionBits | kButtonBits,
- kAllAutoBits = (kAutoButtonMask << kUpButtonShift) |
- (kAutoButtonMask << kLeftButtonShift) |
- (kAutoButtonMask << kDownButtonShift) |
- (kAutoButtonMask << kRightButtonShift) |
- (kAutoButtonMask << kLeftFireButtonShift) |
- (kAutoButtonMask << kRightFireButtonShift) |
- (kAutoButtonMask << kOneButtonShift) |
- (kAutoButtonMask << kTwoButtonShift) |
- (kAutoButtonMask << kThreeButtonShift) |
- (kAutoButtonMask << kFourButtonShift) |
- (kAutoButtonMask << kMod1ButtonShift) |
- (kAutoButtonMask << kMod2ButtonShift) |
- (kAutoButtonMask << kMod3ButtonShift),
-
- kFilterUpButton = kButtonDownMask << kUpButtonShift,
- kFilterUpAuto = kAutoButtonMask << kUpButtonShift,
- kFilterUpButtonAny = kFilterUpButton | kFilterUpAuto,
- kFilterLeftButton = kButtonDownMask << kLeftButtonShift,
- kFilterLeftAuto = kAutoButtonMask << kLeftButtonShift,
- kFilterLeftButtonAny = kFilterLeftButton | kFilterLeftAuto,
- kFilterDownButton = kButtonDownMask << kDownButtonShift,
- kFilterDownAuto = kAutoButtonMask << kDownButtonShift,
- kFilterDownButtonAny = kFilterDownButton | kFilterDownAuto,
- kFilterRightButton = kButtonDownMask << kRightButtonShift,
- kFilterRightAuto = kAutoButtonMask << kRightButtonShift,
- kFilterRightButtonAny = kFilterRightButton | kFilterRightAuto,
- kFilterLeftFireButton = kButtonDownMask << kLeftFireButtonShift,
- kFilterLeftFireAuto = kAutoButtonMask << kLeftFireButtonShift,
- kFilterLeftFireButtonAny = kFilterLeftFireButton | kFilterLeftFireAuto,
- kFilterRightFireButton = kButtonDownMask << kRightFireButtonShift,
- kFilterRightFireAuto = kAutoButtonMask << kRightFireButtonShift,
- kFilterRightFireButtonAny = kFilterRightFireButton | kFilterRightFireAuto,
- kFilterOneButton = kButtonDownMask << kOneButtonShift,
- kFilterOneAuto = kAutoButtonMask << kOneButtonShift,
- kFilterOneButtonAny = kFilterOneButton | kFilterOneAuto,
- kFilterTwoButton = kButtonDownMask << kTwoButtonShift,
- kFilterTwoAuto = kAutoButtonMask << kTwoButtonShift,
- kFilterTwoButtonAny = kFilterTwoButton | kFilterTwoAuto,
- kFilterThreeButton = kButtonDownMask << kThreeButtonShift,
- kFilterThreeAuto = kAutoButtonMask << kThreeButtonShift,
- kFilterThreeButtonAny = kFilterThreeButton | kFilterThreeAuto,
- kFilterFourButton = kButtonDownMask << kFourButtonShift,
- kFilterFourAuto = kAutoButtonMask << kFourButtonShift,
- kFilterFourButtonAny = kFilterFourButton | kFilterFourAuto,
- kFilterMod1Button = kButtonDownMask << kMod1ButtonShift,
- kFilterMod1Auto = kAutoButtonMask << kMod1ButtonShift,
- kFilterMod1ButtonAny = kFilterMod1Button | kFilterMod1Auto,
- kFilterMod2Button = kButtonDownMask << kMod2ButtonShift,
- kFilterMod2Auto = kAutoButtonMask << kMod2ButtonShift,
- kFilterMod2ButtonAny = kFilterMod2Button | kFilterMod2Auto,
- kFilterMod3Button = kButtonDownMask << kMod3ButtonShift,
- kFilterMod3Auto = kAutoButtonMask << kMod3ButtonShift,
- kFilterMod3ButtonAny = kFilterMod3Button | kFilterMod3Auto,
-
- kFilterNoInput = 0,
- kFilterAllInput = kFilterUpButton |
- kFilterUpAuto |
- kFilterLeftButton |
- kFilterLeftAuto |
- kFilterDownButton |
- kFilterDownAuto |
- kFilterRightButton |
- kFilterRightAuto |
- kFilterLeftFireButton |
- kFilterLeftFireAuto |
- kFilterRightFireButton |
- kFilterRightFireAuto |
- kFilterOneButton |
- kFilterOneAuto |
- kFilterTwoButton |
- kFilterTwoAuto |
- kFilterThreeButton |
- kFilterThreeAuto |
- kFilterFourButton |
- kFilterFourAuto |
- kFilterMod1Button |
- kFilterMod1Auto |
- kFilterMod2Button |
- kFilterMod2Auto |
- kFilterMod3Button |
- kFilterMod3Auto,
-
- kFilterAllDirections = kFilterUpButton |
- kFilterUpAuto |
- kFilterLeftButton |
- kFilterLeftAuto |
- kFilterDownButton |
- kFilterDownAuto |
- kFilterRightButton |
- kFilterRightAuto,
-
- kFilterButtons = kFilterOneButton |
- kFilterOneAuto |
- kFilterTwoButton |
- kFilterTwoAuto |
- kFilterThreeButton |
- kFilterThreeAuto |
- kFilterFourButton |
- kFilterFourAuto,
-
- kFilterFireButtons = kFilterLeftFireButton |
- kFilterLeftFireAuto |
- kFilterRightFireButton |
- kFilterRightFireAuto,
-
- kFilterAllButtons = kFilterLeftFireButton |
- kFilterLeftFireAuto |
- kFilterRightFireButton |
- kFilterRightFireAuto |
- kFilterOneButton |
- kFilterOneAuto |
- kFilterTwoButton |
- kFilterTwoAuto |
- kFilterThreeButton |
- kFilterThreeAuto |
- kFilterFourButton |
- kFilterFourAuto |
- kFilterMod1Button |
- kFilterMod1Auto |
- kFilterMod2Button |
- kFilterMod2Auto |
- kFilterMod3Button |
- kFilterMod3Auto,
-
- kFilterAllInputNoAuto = kFilterUpButton |
- kFilterLeftButton |
- kFilterDownButton |
- kFilterRightButton |
- kFilterLeftFireButton |
- kFilterRightFireButton |
- kFilterOneButton |
- kFilterTwoButton |
- kFilterThreeButton |
- kFilterFourButton |
- kFilterMod1Button |
- kFilterMod2Button |
- kFilterMod3Button
-};
-
const tNotificationID kNeighborhoodNotificationID = 1;
const tNotificationID kLastNeighborhoodNotificationID = kNeighborhoodNotificationID;
diff --git a/engines/pegasus/input.cpp b/engines/pegasus/input.cpp
new file mode 100755
index 0000000000..bb147fb716
--- /dev/null
+++ b/engines/pegasus/input.cpp
@@ -0,0 +1,138 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * Additional copyright for this file:
+ * Copyright (C) 1995-1997 Presto Studios, Inc.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/events.h"
+#include "common/system.h"
+
+#include "pegasus/input.h"
+
+namespace Pegasus {
+
+InputDevice::InputDevice() {
+ _lastRawBits = kAllUpBits;
+}
+
+InputDevice::~InputDevice() {
+}
+
+void InputDevice::getInput(Input &input, const tInputBits filter) {
+ // TODO: Save/Load keys
+
+ tInputBits currentBits = 0;
+
+ Common::Event event;
+ while (g_system->getEventManager()->pollEvent(event)) {
+ // We only care about two events here
+ // We're mapping from ScummVM events to pegasus events, which
+ // are based on pippin events.
+ if (event.type == Common::EVENT_KEYDOWN || event.type == Common::EVENT_KEYUP) {
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_UP:
+ case Common::KEYCODE_KP8:
+ currentBits |= (kRawButtonDown << kUpButtonShift);
+ break;
+ case Common::KEYCODE_LEFT:
+ case Common::KEYCODE_KP4:
+ currentBits |= (kRawButtonDown << kLeftButtonShift);
+ break;
+ case Common::KEYCODE_DOWN:
+ case Common::KEYCODE_KP5:
+ currentBits |= (kRawButtonDown << kDownButtonShift);
+ break;
+ case Common::KEYCODE_RIGHT:
+ case Common::KEYCODE_KP6:
+ currentBits |= (kRawButtonDown << kRightButtonShift);
+ break;
+ case Common::KEYCODE_RETURN:
+ case Common::KEYCODE_SPACE:
+ currentBits |= (kRawButtonDown << kTwoButtonShift);
+ break;
+ case Common::KEYCODE_t:
+ case Common::KEYCODE_KP_EQUALS:
+ currentBits |= (kRawButtonDown << kThreeButtonShift);
+ break;
+ case Common::KEYCODE_i:
+ case Common::KEYCODE_KP_DIVIDE:
+ currentBits |= (kRawButtonDown << kFourButtonShift);
+ break;
+ case Common::KEYCODE_q:
+ currentBits |= (kRawButtonDown << kMod1ButtonShift);
+ break;
+ case Common::KEYCODE_ESCAPE:
+ case Common::KEYCODE_p:
+ currentBits |= (kRawButtonDown << kMod3ButtonShift);
+ break;
+ case Common::KEYCODE_TILDE:
+ case Common::KEYCODE_NUMLOCK: // Yes, the original uses Num Lock/Clear on the Mac...
+ currentBits |= (kRawButtonDown << kLeftFireButtonShift);
+ break;
+ case Common::KEYCODE_DELETE:
+ currentBits |= (kRawButtonDown << kRightFireButtonShift);
+ break;
+ default:
+ break;
+ }
+
+ if (event.kbd.flags & Common::KBD_ALT) // Alt, option, same thing!
+ currentBits |= (kRawButtonDown << kMod2ButtonShift);
+ }
+ }
+
+ // Update mouse button state
+ // Note that we don't use EVENT_LBUTTONUP/EVENT_LBUTTONDOWN because
+ // they do not show if the button is being held down. We're treating
+ // both mouse buttons as the same for ease of use.
+ if (g_system->getEventManager()->getButtonState() != 0)
+ currentBits |= (kRawButtonDown << kTwoButtonShift);
+
+ // Update the mouse position too
+ input.setInputLocation(g_system->getEventManager()->getMousePos());
+ _lastRawBits = currentBits;
+
+ tInputBits filteredBits = currentBits & filter;
+ input.setInputBits((filteredBits & kAllButtonDownBits) | (filteredBits & _lastRawBits & kAllAutoBits));
+}
+
+// Wait until the input device stops returning input allowed by filter...
+void InputDevice::waitInput(const tInputBits filter) {
+ if (filter != 0) {
+ for (;;) {
+ Input input;
+ getInput(input, filter);
+ if (!input.anyInput())
+ break;
+ }
+ }
+}
+
+int operator==(const Input &arg1, const Input &arg2) {
+ return arg1._inputState == arg2._inputState;
+}
+
+int operator!=(const Input &arg1, const Input &arg2) {
+ return !operator==(arg1, arg2);
+}
+
+} // End of namespace Pegasus
diff --git a/engines/pegasus/input.h b/engines/pegasus/input.h
new file mode 100755
index 0000000000..463e3d024b
--- /dev/null
+++ b/engines/pegasus/input.h
@@ -0,0 +1,373 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * Additional copyright for this file:
+ * Copyright (C) 1995-1997 Presto Studios, Inc.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef PEGASUS_INPUT_H
+#define PEGASUS_INPUT_H
+
+#include "common/rect.h"
+
+#include "pegasus/constants.h"
+#include "pegasus/types.h"
+
+namespace Pegasus {
+
+class Hotspot;
+class Input;
+
+class InputDevice {
+public:
+ InputDevice();
+ ~InputDevice();
+
+ void getInput(Input&, const tInputBits);
+
+ void waitInput(const tInputBits);
+
+protected:
+ tInputBits _lastRawBits;
+};
+
+enum {
+ kButtonDownBit = 0,
+ kAutoButtonBit = 1,
+ kBitsPerButton = 2,
+
+ kButtonDownMask = 1 << kButtonDownBit,
+ kAutoButtonMask = 1 << kAutoButtonBit,
+
+ kButtonStateBits = kButtonDownMask | kAutoButtonMask,
+
+ kRawButtonUp = 0,
+ kRawButtonDown = kButtonDownMask | kAutoButtonMask,
+
+ kButtonUp = 0,
+ kButtonDown = kButtonDownMask,
+ kButtonAutoUp = kAutoButtonMask,
+ kButtonAutoDown = kButtonDownMask | kAutoButtonMask
+};
+
+enum {
+ kUpButtonNum = 0,
+ kLeftButtonNum = 1,
+ kDownButtonNum = 2,
+ kRightButtonNum = 3,
+ kLeftFireButtonNum = 4,
+ kRightFireButtonNum = 5,
+ kOneButtonNum = 6,
+ kTwoButtonNum = 7,
+ kThreeButtonNum = 8,
+ kFourButtonNum = 9,
+ kMod1ButtonNum = 10,
+ kMod2ButtonNum = 11,
+ kMod3ButtonNum = 12
+};
+
+enum {
+ kUpButtonShift = kUpButtonNum * kBitsPerButton,
+ kLeftButtonShift = kLeftButtonNum * kBitsPerButton,
+ kDownButtonShift = kDownButtonNum * kBitsPerButton,
+ kRightButtonShift = kRightButtonNum * kBitsPerButton,
+ kLeftFireButtonShift = kLeftFireButtonNum * kBitsPerButton,
+ kRightFireButtonShift = kRightFireButtonNum * kBitsPerButton,
+ kOneButtonShift = kOneButtonNum * kBitsPerButton,
+ kTwoButtonShift = kTwoButtonNum * kBitsPerButton,
+ kThreeButtonShift = kThreeButtonNum * kBitsPerButton,
+ kFourButtonShift = kFourButtonNum * kBitsPerButton,
+ kMod1ButtonShift = kMod1ButtonNum * kBitsPerButton,
+ kMod2ButtonShift = kMod2ButtonNum * kBitsPerButton,
+ kMod3ButtonShift = kMod3ButtonNum * kBitsPerButton
+};
+
+enum {
+ kAllUpBits = (kButtonUp << kUpButtonShift) |
+ (kButtonUp << kLeftButtonShift) |
+ (kButtonUp << kDownButtonShift) |
+ (kButtonUp << kRightButtonShift) |
+ (kButtonUp << kLeftFireButtonShift) |
+ (kButtonUp << kRightFireButtonShift) |
+ (kButtonUp << kOneButtonShift) |
+ (kButtonUp << kTwoButtonShift) |
+ (kButtonUp << kThreeButtonShift) |
+ (kButtonUp << kFourButtonShift) |
+ (kButtonUp << kMod1ButtonShift) |
+ (kButtonUp << kMod2ButtonShift) |
+ (kButtonUp << kMod3ButtonShift),
+ kDirectionBits = (kButtonDownMask << kUpButtonShift) |
+ (kButtonDownMask << kLeftButtonShift) |
+ (kButtonDownMask << kDownButtonShift) |
+ (kButtonDownMask << kRightButtonShift),
+ kButtonBits = (kButtonDownMask << kLeftFireButtonShift) |
+ (kButtonDownMask << kRightFireButtonShift) |
+ (kButtonDownMask << kOneButtonShift) |
+ (kButtonDownMask << kTwoButtonShift) |
+ (kButtonDownMask << kThreeButtonShift) |
+ (kButtonDownMask << kFourButtonShift) |
+ (kButtonDownMask << kMod1ButtonShift) |
+ (kButtonDownMask << kMod2ButtonShift) |
+ (kButtonDownMask << kMod3ButtonShift),
+ kAllButtonDownBits = kDirectionBits | kButtonBits,
+ kAllAutoBits = (kAutoButtonMask << kUpButtonShift) |
+ (kAutoButtonMask << kLeftButtonShift) |
+ (kAutoButtonMask << kDownButtonShift) |
+ (kAutoButtonMask << kRightButtonShift) |
+ (kAutoButtonMask << kLeftFireButtonShift) |
+ (kAutoButtonMask << kRightFireButtonShift) |
+ (kAutoButtonMask << kOneButtonShift) |
+ (kAutoButtonMask << kTwoButtonShift) |
+ (kAutoButtonMask << kThreeButtonShift) |
+ (kAutoButtonMask << kFourButtonShift) |
+ (kAutoButtonMask << kMod1ButtonShift) |
+ (kAutoButtonMask << kMod2ButtonShift) |
+ (kAutoButtonMask << kMod3ButtonShift),
+
+ kFilterUpButton = kButtonDownMask << kUpButtonShift,
+ kFilterUpAuto = kAutoButtonMask << kUpButtonShift,
+ kFilterUpButtonAny = kFilterUpButton | kFilterUpAuto,
+ kFilterLeftButton = kButtonDownMask << kLeftButtonShift,
+ kFilterLeftAuto = kAutoButtonMask << kLeftButtonShift,
+ kFilterLeftButtonAny = kFilterLeftButton | kFilterLeftAuto,
+ kFilterDownButton = kButtonDownMask << kDownButtonShift,
+ kFilterDownAuto = kAutoButtonMask << kDownButtonShift,
+ kFilterDownButtonAny = kFilterDownButton | kFilterDownAuto,
+ kFilterRightButton = kButtonDownMask << kRightButtonShift,
+ kFilterRightAuto = kAutoButtonMask << kRightButtonShift,
+ kFilterRightButtonAny = kFilterRightButton | kFilterRightAuto,
+ kFilterLeftFireButton = kButtonDownMask << kLeftFireButtonShift,
+ kFilterLeftFireAuto = kAutoButtonMask << kLeftFireButtonShift,
+ kFilterLeftFireButtonAny = kFilterLeftFireButton | kFilterLeftFireAuto,
+ kFilterRightFireButton = kButtonDownMask << kRightFireButtonShift,
+ kFilterRightFireAuto = kAutoButtonMask << kRightFireButtonShift,
+ kFilterRightFireButtonAny = kFilterRightFireButton | kFilterRightFireAuto,
+ kFilterOneButton = kButtonDownMask << kOneButtonShift,
+ kFilterOneAuto = kAutoButtonMask << kOneButtonShift,
+ kFilterOneButtonAny = kFilterOneButton | kFilterOneAuto,
+ kFilterTwoButton = kButtonDownMask << kTwoButtonShift,
+ kFilterTwoAuto = kAutoButtonMask << kTwoButtonShift,
+ kFilterTwoButtonAny = kFilterTwoButton | kFilterTwoAuto,
+ kFilterThreeButton = kButtonDownMask << kThreeButtonShift,
+ kFilterThreeAuto = kAutoButtonMask << kThreeButtonShift,
+ kFilterThreeButtonAny = kFilterThreeButton | kFilterThreeAuto,
+ kFilterFourButton = kButtonDownMask << kFourButtonShift,
+ kFilterFourAuto = kAutoButtonMask << kFourButtonShift,
+ kFilterFourButtonAny = kFilterFourButton | kFilterFourAuto,
+ kFilterMod1Button = kButtonDownMask << kMod1ButtonShift,
+ kFilterMod1Auto = kAutoButtonMask << kMod1ButtonShift,
+ kFilterMod1ButtonAny = kFilterMod1Button | kFilterMod1Auto,
+ kFilterMod2Button = kButtonDownMask << kMod2ButtonShift,
+ kFilterMod2Auto = kAutoButtonMask << kMod2ButtonShift,
+ kFilterMod2ButtonAny = kFilterMod2Button | kFilterMod2Auto,
+ kFilterMod3Button = kButtonDownMask << kMod3ButtonShift,
+ kFilterMod3Auto = kAutoButtonMask << kMod3ButtonShift,
+ kFilterMod3ButtonAny = kFilterMod3Button | kFilterMod3Auto,
+
+ kFilterNoInput = 0,
+ kFilterAllInput = kFilterUpButton |
+ kFilterUpAuto |
+ kFilterLeftButton |
+ kFilterLeftAuto |
+ kFilterDownButton |
+ kFilterDownAuto |
+ kFilterRightButton |
+ kFilterRightAuto |
+ kFilterLeftFireButton |
+ kFilterLeftFireAuto |
+ kFilterRightFireButton |
+ kFilterRightFireAuto |
+ kFilterOneButton |
+ kFilterOneAuto |
+ kFilterTwoButton |
+ kFilterTwoAuto |
+ kFilterThreeButton |
+ kFilterThreeAuto |
+ kFilterFourButton |
+ kFilterFourAuto |
+ kFilterMod1Button |
+ kFilterMod1Auto |
+ kFilterMod2Button |
+ kFilterMod2Auto |
+ kFilterMod3Button |
+ kFilterMod3Auto,
+
+ kFilterAllDirections = kFilterUpButton |
+ kFilterUpAuto |
+ kFilterLeftButton |
+ kFilterLeftAuto |
+ kFilterDownButton |
+ kFilterDownAuto |
+ kFilterRightButton |
+ kFilterRightAuto,
+
+ kFilterButtons = kFilterOneButton |
+ kFilterOneAuto |
+ kFilterTwoButton |
+ kFilterTwoAuto |
+ kFilterThreeButton |
+ kFilterThreeAuto |
+ kFilterFourButton |
+ kFilterFourAuto,
+
+ kFilterFireButtons = kFilterLeftFireButton |
+ kFilterLeftFireAuto |
+ kFilterRightFireButton |
+ kFilterRightFireAuto,
+
+ kFilterAllButtons = kFilterLeftFireButton |
+ kFilterLeftFireAuto |
+ kFilterRightFireButton |
+ kFilterRightFireAuto |
+ kFilterOneButton |
+ kFilterOneAuto |
+ kFilterTwoButton |
+ kFilterTwoAuto |
+ kFilterThreeButton |
+ kFilterThreeAuto |
+ kFilterFourButton |
+ kFilterFourAuto |
+ kFilterMod1Button |
+ kFilterMod1Auto |
+ kFilterMod2Button |
+ kFilterMod2Auto |
+ kFilterMod3Button |
+ kFilterMod3Auto,
+
+ kFilterAllInputNoAuto = kFilterUpButton |
+ kFilterLeftButton |
+ kFilterDownButton |
+ kFilterRightButton |
+ kFilterLeftFireButton |
+ kFilterRightFireButton |
+ kFilterOneButton |
+ kFilterTwoButton |
+ kFilterThreeButton |
+ kFilterFourButton |
+ kFilterMod1Button |
+ kFilterMod2Button |
+ kFilterMod3Button
+};
+
+/*
+
+ Buttons are defined as:
+ up, left, down, right direction buttons.
+ fireLeft, fireRight: fire buttons.
+ mod1, mod2, mod3: modifier buttons, similar to shift, control, etc.
+ a, b, c, d: general purpose buttons.
+
+ button state is held as bits in a long word, two bits per button.
+
+ Filter bits:
+ for each button, two bits are assigned for filtering. If bit 0 is set, the
+ corresponding button is available for "button down" input. If bit 1 is set,
+ the corresponding button is available for "auto down" input. Note that bit
+ 1 is meaningful only if bit 0 is set.
+
+*/
+
+class Input {
+friend int operator==(const Input &, const Input &);
+friend int operator!=(const Input &, const Input &);
+friend class InputDevice;
+
+public:
+ Input() { clearInput(); }
+
+ bool upButtonDown() const { return (_inputState & (kButtonStateBits << kUpButtonShift)) == (kButtonDown << kUpButtonShift); }
+ bool upButtonAutoDown() const { return (_inputState & (kButtonStateBits << kUpButtonShift)) == (kButtonAutoDown << kUpButtonShift); }
+ bool upButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kUpButtonShift)) != 0; }
+
+ bool leftButtonDown() const { return (_inputState & (kButtonStateBits << kLeftButtonShift)) == (kButtonDown << kLeftButtonShift); }
+ bool leftButtonAutoDown() const { return (_inputState & (kButtonStateBits << kLeftButtonShift)) == (kButtonAutoDown << kLeftButtonShift); }
+ bool leftButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kLeftButtonShift)) != 0; }
+
+ bool downButtonDown() const { return (_inputState & (kButtonStateBits << kDownButtonShift)) == (kButtonDown << kDownButtonShift); }
+ bool downButtonAutoDown() const { return (_inputState & (kButtonStateBits << kDownButtonShift)) == (kButtonAutoDown << kDownButtonShift); }
+ bool downButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kDownButtonShift)) != 0; }
+
+ bool rightButtonDown() const { return (_inputState & (kButtonStateBits << kRightButtonShift)) == (kButtonDown << kRightButtonShift); }
+ bool rightButtonAutoDown() const { return (_inputState & (kButtonStateBits << kRightButtonShift)) == (kButtonAutoDown << kRightButtonShift); }
+ bool rightButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kRightButtonShift)) != 0; }
+
+ bool leftFireButtonDown() const { return (_inputState & (kButtonStateBits << kLeftFireButtonShift)) == (kButtonDown << kLeftFireButtonShift); }
+ bool leftFireButtonAutoDown() const { return (_inputState & (kButtonStateBits << kLeftFireButtonShift)) == (kButtonAutoDown << kLeftFireButtonShift); }
+ bool leftFireButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kLeftFireButtonShift)) != 0; }
+
+ bool rightFireButtonDown() const { return (_inputState & (kButtonStateBits << kRightFireButtonShift)) == (kButtonDown << kRightFireButtonShift); }
+ bool rightFireButtonAutoDown() const { return (_inputState & (kButtonStateBits << kRightFireButtonShift)) == (kButtonAutoDown << kRightFireButtonShift); }
+ bool rightFireButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kRightFireButtonShift)) != 0; }
+
+ bool oneButtonDown() const { return (_inputState & (kButtonStateBits << kOneButtonShift)) == (kButtonDown << kOneButtonShift); }
+ bool oneButtonAutoDown() const { return (_inputState & (kButtonStateBits << kOneButtonShift)) == (kButtonAutoDown << kOneButtonShift); }
+ bool oneButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kOneButtonShift)) != 0; }
+
+ bool twoButtonDown() const { return (_inputState & (kButtonStateBits << kTwoButtonShift)) == (kButtonDown << kTwoButtonShift); }
+ bool twoButtonAutoDown() const { return (_inputState & (kButtonStateBits << kTwoButtonShift)) == (kButtonAutoDown << kTwoButtonShift); }
+ bool twoButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kTwoButtonShift)) != 0; }
+
+ bool threeButtonDown() const { return (_inputState & (kButtonStateBits << kThreeButtonShift)) == (kButtonDown << kThreeButtonShift); }
+ bool threeButtonAutoDown() const { return (_inputState & (kButtonStateBits << kThreeButtonShift)) == (kButtonAutoDown << kThreeButtonShift); }
+ bool threeButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kThreeButtonShift)) != 0; }
+
+ bool fourButtonDown() const { return (_inputState & (kButtonStateBits << kFourButtonShift)) == (kButtonDown << kFourButtonShift); }
+ bool fourButtonAutoDown() const { return (_inputState & (kButtonStateBits << kFourButtonShift)) == (kButtonAutoDown << kFourButtonShift); }
+ bool fourButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kFourButtonShift)) != 0; }
+
+ bool mod1ButtonDown() const { return (_inputState & (kButtonStateBits << kMod1ButtonShift)) == (kButtonDown << kMod1ButtonShift); }
+ bool mod1ButtonAutoDown() const { return (_inputState & (kButtonStateBits << kMod1ButtonShift)) == (kButtonAutoDown << kMod1ButtonShift); }
+ bool mod1ButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kMod1ButtonShift)) != 0; }
+
+ bool mod2ButtonDown() const { return (_inputState & (kButtonStateBits << kMod2ButtonShift)) == (kButtonDown << kMod2ButtonShift); }
+ bool mod2ButtonAutoDown() const { return (_inputState & (kButtonStateBits << kMod2ButtonShift)) == (kButtonAutoDown << kMod2ButtonShift); }
+ bool mod2ButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kMod2ButtonShift)) != 0; }
+
+ bool mod3ButtonDown() const { return (_inputState & (kButtonStateBits << kMod3ButtonShift)) == (kButtonDown << kMod3ButtonShift); }
+ bool mod3ButtonAutoDown() const { return (_inputState & (kButtonStateBits << kMod3ButtonShift)) == (kButtonAutoDown << kMod3ButtonShift); }
+ bool mod3ButtonAnyDown() const { return (_inputState & (kButtonAutoDown << kMod3ButtonShift)) != 0; }
+
+ bool allAutoInput() const { return (_inputState & kAllAutoBits) != 0; }
+ bool anyDirectionInput() const { return (_inputState & kDirectionBits) != 0; }
+ bool anyButtonInput() const { return (_inputState & kButtonBits) != 0; }
+ bool anyInput() const { return _inputState != 0; }
+
+ void getInputLocation(Common::Point &where) const { where = _inputLocation; }
+
+ bool anyInputBitSet(const tInputBits bits) const { return (_inputState & bits) != 0; }
+
+ void clearInput() {
+ _inputState = kAllUpBits;
+ _inputLocation.x = 0;
+ _inputLocation.y = 0;
+ }
+
+protected:
+ void setInputBits(const tInputBits state) { _inputState = state; }
+ void setInputLocation(const Common::Point &where) { _inputLocation = where; }
+
+ tInputBits _inputState;
+ Common::Point _inputLocation;
+};
+
+} // End of namespace Pegasus
+
+#endif
diff --git a/engines/pegasus/module.mk b/engines/pegasus/module.mk
index 5b8898ff85..8d3ee52304 100644
--- a/engines/pegasus/module.mk
+++ b/engines/pegasus/module.mk
@@ -7,6 +7,7 @@ MODULE_OBJS = \
gamestate.o \
graphics.o \
hotspot.o \
+ input.o \
menu.o \
notification.o \
overview.o \
diff --git a/engines/pegasus/neighborhood/neighborhood.cpp b/engines/pegasus/neighborhood/neighborhood.cpp
index 8381188764..461f4b0149 100644
--- a/engines/pegasus/neighborhood/neighborhood.cpp
+++ b/engines/pegasus/neighborhood/neighborhood.cpp
@@ -27,6 +27,7 @@
#include "common/stream.h"
#include "pegasus/gamestate.h"
+#include "pegasus/input.h"
#include "pegasus/pegasus.h"
#include "pegasus/neighborhood/neighborhood.h"