summaryrefslogtreecommitdiffstats
path: root/platform/ios
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios')
-rw-r--r--platform/ios/ios.h2
-rw-r--r--platform/ios/ios.mm42
-rw-r--r--platform/ios/os_ios.h2
-rw-r--r--platform/ios/os_ios.mm8
4 files changed, 39 insertions, 15 deletions
diff --git a/platform/ios/ios.h b/platform/ios/ios.h
index d488cde257..cb5be64cee 100644
--- a/platform/ios/ios.h
+++ b/platform/ios/ios.h
@@ -51,7 +51,7 @@ public:
static void alert(const char *p_alert, const char *p_title);
bool supports_haptic_engine();
- void vibrate_haptic_engine(float p_duration_seconds);
+ void vibrate_haptic_engine(float p_duration_seconds, float p_amplitude);
String get_model() const;
String get_rate_url(int p_app_id) const;
diff --git a/platform/ios/ios.mm b/platform/ios/ios.mm
index 0a2e1fd5cd..6943de5ac8 100644
--- a/platform/ios/ios.mm
+++ b/platform/ios/ios.mm
@@ -69,21 +69,41 @@ CHHapticEngine *iOS::get_haptic_engine_instance() API_AVAILABLE(ios(13)) {
return haptic_engine;
}
-void iOS::vibrate_haptic_engine(float p_duration_seconds) API_AVAILABLE(ios(13)) {
+void iOS::vibrate_haptic_engine(float p_duration_seconds, float p_amplitude) API_AVAILABLE(ios(13)) {
if (@available(iOS 13, *)) { // We need the @available check every time to make the compiler happy...
if (supports_haptic_engine()) {
CHHapticEngine *cur_haptic_engine = get_haptic_engine_instance();
if (cur_haptic_engine) {
- NSDictionary *hapticDict = @{
- CHHapticPatternKeyPattern : @[
- @{CHHapticPatternKeyEvent : @{
- CHHapticPatternKeyEventType : CHHapticEventTypeHapticContinuous,
- CHHapticPatternKeyTime : @(CHHapticTimeImmediate),
- CHHapticPatternKeyEventDuration : @(p_duration_seconds)
- },
- },
- ],
- };
+ NSDictionary *hapticDict;
+ if (p_amplitude < 0) {
+ hapticDict = @{
+ CHHapticPatternKeyPattern : @[
+ @{CHHapticPatternKeyEvent : @{
+ CHHapticPatternKeyEventType : CHHapticEventTypeHapticContinuous,
+ CHHapticPatternKeyTime : @(CHHapticTimeImmediate),
+ CHHapticPatternKeyEventDuration : @(p_duration_seconds),
+ },
+ },
+ ],
+ };
+ } else {
+ hapticDict = @{
+ CHHapticPatternKeyPattern : @[
+ @{CHHapticPatternKeyEvent : @{
+ CHHapticPatternKeyEventType : CHHapticEventTypeHapticContinuous,
+ CHHapticPatternKeyTime : @(CHHapticTimeImmediate),
+ CHHapticPatternKeyEventDuration : @(p_duration_seconds),
+ CHHapticPatternKeyEventParameters : @[
+ @{
+ CHHapticPatternKeyParameterID : @("HapticIntensity"),
+ CHHapticPatternKeyParameterValue : @(p_amplitude)
+ },
+ ],
+ },
+ },
+ ],
+ };
+ }
NSError *error;
CHHapticPattern *pattern = [[CHHapticPattern alloc] initWithDictionary:hapticDict error:&error];
diff --git a/platform/ios/os_ios.h b/platform/ios/os_ios.h
index c4782a4768..b7c5a73065 100644
--- a/platform/ios/os_ios.h
+++ b/platform/ios/os_ios.h
@@ -123,7 +123,7 @@ public:
virtual String get_unique_id() const override;
virtual String get_processor_name() const override;
- virtual void vibrate_handheld(int p_duration_ms = 500) override;
+ virtual void vibrate_handheld(int p_duration_ms = 500, float p_amplitude = -1.0) override;
virtual bool _check_internal_feature_support(const String &p_feature) override;
diff --git a/platform/ios/os_ios.mm b/platform/ios/os_ios.mm
index 52d496d641..35b87ea647 100644
--- a/platform/ios/os_ios.mm
+++ b/platform/ios/os_ios.mm
@@ -571,9 +571,13 @@ String OS_IOS::get_system_font_path(const String &p_font_name, int p_weight, int
return ret;
}
-void OS_IOS::vibrate_handheld(int p_duration_ms) {
+void OS_IOS::vibrate_handheld(int p_duration_ms, float p_amplitude) {
if (ios->supports_haptic_engine()) {
- ios->vibrate_haptic_engine((float)p_duration_ms / 1000.f);
+ if (p_amplitude > 0.0) {
+ p_amplitude = CLAMP(p_amplitude, 0.0, 1.0);
+ }
+
+ ios->vibrate_haptic_engine((float)p_duration_ms / 1000.f, p_amplitude);
} else {
// iOS <13 does not support duration for vibration
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);