mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
Instead of register input based on if hardware is connected or not register input based on backend capabilities. Mouse support is default supported through touch events on screen (iOS) or touch on controller (Apple TV), and through connected mouse hardwares. Gamepad controllers are supported from iOS 14 and later. Register mouse and gamepad input based on above capabilities to be able to map actions to buttons on these input devices. Keyboard support is to be added but not in this commit. Remove the "isConnected" methods for each input and change the same method for game controllers to a "isSupported" function to deal with the iOS version support. Remove the sending of the EVENT_INPUT_CHANGED event due to the above reasons. The overide of the isConnected property function is also removed due to this reason. It caused problems that key mappings were reset on connections/disconnections.
97 lines
3.1 KiB
Plaintext
97 lines
3.1 KiB
Plaintext
/* 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.
|
|
*
|
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
// Disable symbol overrides so that we can use system headers.
|
|
#define FORBIDDEN_SYMBOL_ALLOW_ALL
|
|
|
|
#include "common/events.h"
|
|
#include "backends/platform/ios7/ios7_game_controller.h"
|
|
#include "backends/platform/ios7/ios7_video.h"
|
|
|
|
@interface GameController()
|
|
@property (nonatomic, assign) BOOL firstButtonPressed;
|
|
@property (nonatomic, assign) BOOL secondButtonPressed;
|
|
@end
|
|
|
|
@implementation GameController
|
|
|
|
@synthesize view;
|
|
|
|
- (id)initWithView:(iPhoneView *)v {
|
|
self = [super init];
|
|
if (self) {
|
|
[self setView:v];
|
|
}
|
|
_firstButtonPressed = _secondButtonPressed = NO;
|
|
return self;
|
|
}
|
|
|
|
- (CGPoint)getLocationInView:(UITouch *)touch; {
|
|
CGPoint p = [touch locationInView:[self view]];
|
|
p.x *= [[self view] contentScaleFactor];
|
|
p.y *= [[self view] contentScaleFactor];
|
|
return p;
|
|
}
|
|
|
|
- (void)handleJoystickAxisMotionX:(int)x andY:(int)y forJoystick:(GameControllerJoystick)joystick {
|
|
if (joystick == kGameControllerJoystickLeft) {
|
|
[view addEvent:InternalEvent(kInputJoystickAxisMotion, Common::JOYSTICK_AXIS_LEFT_STICK_X, x)];
|
|
[view addEvent:InternalEvent(kInputJoystickAxisMotion, Common::JOYSTICK_AXIS_LEFT_STICK_Y, y)];
|
|
} else {
|
|
[view addEvent:InternalEvent(kInputJoystickAxisMotion, Common::JOYSTICK_AXIS_RIGHT_STICK_X, x)];
|
|
[view addEvent:InternalEvent(kInputJoystickAxisMotion, Common::JOYSTICK_AXIS_RIGHT_STICK_Y, y)];
|
|
}
|
|
}
|
|
|
|
- (void)handleJoystickButtonAction:(int)button isPressed:(bool)pressed {
|
|
bool addEvent = true;
|
|
if (button == Common::JOYSTICK_BUTTON_A) {
|
|
if (_firstButtonPressed) {
|
|
if (pressed) {
|
|
addEvent = false;
|
|
}
|
|
}
|
|
_firstButtonPressed = pressed;
|
|
} else if (button == Common::JOYSTICK_BUTTON_B) {
|
|
if (_secondButtonPressed) {
|
|
if (pressed) {
|
|
addEvent = false;
|
|
}
|
|
}
|
|
_secondButtonPressed = pressed;
|
|
}
|
|
// Do not send button presses if keyboard is shown because if e.g.
|
|
// the "Do you want to quit?" dialog is shown the wait for user
|
|
// input will end (treating the button push as a mouse click) while
|
|
// the user tried to select the "y" or "n" character on the tvOS
|
|
// keyboard.
|
|
if (addEvent && ![view isKeyboardShown]) {
|
|
[view addEvent:InternalEvent(pressed ? kInputJoystickButtonDown : kInputJoystickButtonUp, button, 0)];
|
|
}
|
|
}
|
|
|
|
- (void)handleMainMenu:(BOOL)pressed {
|
|
if (!pressed) { // released
|
|
[view handleMainMenuKey];
|
|
}
|
|
}
|
|
@end
|