@renegades/react-native-tickle 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +352 -0
- package/Tickle.podspec +29 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +126 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/tickle/Tickle.kt +71 -0
- package/android/src/main/java/com/margelo/nitro/tickle/TicklePackage.kt +22 -0
- package/ios/Tickle.swift +185 -0
- package/ios/TickleUtils.swift +404 -0
- package/lib/module/Tickle.nitro.js +4 -0
- package/lib/module/Tickle.nitro.js.map +1 -0
- package/lib/module/index.js +254 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/Tickle.nitro.d.ts +63 -0
- package/lib/typescript/src/Tickle.nitro.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +148 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +17 -0
- package/nitrogen/generated/android/c++/JHapticCurve.hpp +87 -0
- package/nitrogen/generated/android/c++/JHapticCurveControlPoint.hpp +61 -0
- package/nitrogen/generated/android/c++/JHapticEvent.hpp +94 -0
- package/nitrogen/generated/android/c++/JHapticEventParameter.hpp +62 -0
- package/nitrogen/generated/android/c++/JHapticEventType.hpp +58 -0
- package/nitrogen/generated/android/c++/JHapticImpactStyle.hpp +67 -0
- package/nitrogen/generated/android/c++/JHapticNotificationType.hpp +61 -0
- package/nitrogen/generated/android/c++/JHapticParameterType.hpp +58 -0
- package/nitrogen/generated/android/c++/JHybridTickleSpec.cpp +162 -0
- package/nitrogen/generated/android/c++/JHybridTickleSpec.hpp +79 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticCurve.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticCurveControlPoint.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticEvent.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticEventParameter.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticEventType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticImpactStyle.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticNotificationType.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HapticParameterType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/HybridTickleSpec.kt +109 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/tickle/tickleOnLoad.kt +35 -0
- package/nitrogen/generated/android/tickle+autolinking.cmake +81 -0
- package/nitrogen/generated/android/tickle+autolinking.gradle +27 -0
- package/nitrogen/generated/android/tickleOnLoad.cpp +44 -0
- package/nitrogen/generated/android/tickleOnLoad.hpp +25 -0
- package/nitrogen/generated/ios/Tickle+autolinking.rb +60 -0
- package/nitrogen/generated/ios/Tickle-Swift-Cxx-Bridge.cpp +33 -0
- package/nitrogen/generated/ios/Tickle-Swift-Cxx-Bridge.hpp +139 -0
- package/nitrogen/generated/ios/Tickle-Swift-Cxx-Umbrella.hpp +70 -0
- package/nitrogen/generated/ios/TickleAutolinking.mm +33 -0
- package/nitrogen/generated/ios/TickleAutolinking.swift +25 -0
- package/nitrogen/generated/ios/c++/HybridTickleSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridTickleSpecSwift.hpp +185 -0
- package/nitrogen/generated/ios/swift/HapticCurve.swift +46 -0
- package/nitrogen/generated/ios/swift/HapticCurveControlPoint.swift +35 -0
- package/nitrogen/generated/ios/swift/HapticEvent.swift +57 -0
- package/nitrogen/generated/ios/swift/HapticEventParameter.swift +35 -0
- package/nitrogen/generated/ios/swift/HapticEventType.swift +40 -0
- package/nitrogen/generated/ios/swift/HapticImpactStyle.swift +52 -0
- package/nitrogen/generated/ios/swift/HapticNotificationType.swift +44 -0
- package/nitrogen/generated/ios/swift/HapticParameterType.swift +40 -0
- package/nitrogen/generated/ios/swift/HybridTickleSpec.swift +69 -0
- package/nitrogen/generated/ios/swift/HybridTickleSpec_cxx.swift +282 -0
- package/nitrogen/generated/shared/c++/HapticCurve.hpp +96 -0
- package/nitrogen/generated/shared/c++/HapticCurveControlPoint.hpp +87 -0
- package/nitrogen/generated/shared/c++/HapticEvent.hpp +101 -0
- package/nitrogen/generated/shared/c++/HapticEventParameter.hpp +88 -0
- package/nitrogen/generated/shared/c++/HapticEventType.hpp +76 -0
- package/nitrogen/generated/shared/c++/HapticImpactStyle.hpp +88 -0
- package/nitrogen/generated/shared/c++/HapticNotificationType.hpp +80 -0
- package/nitrogen/generated/shared/c++/HapticParameterType.hpp +76 -0
- package/nitrogen/generated/shared/c++/HybridTickleSpec.cpp +34 -0
- package/nitrogen/generated/shared/c++/HybridTickleSpec.hpp +87 -0
- package/package.json +179 -0
- package/react-native.config.js +8 -0
- package/src/Tickle.nitro.ts +84 -0
- package/src/index.tsx +306 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState, useCallback } from 'react';
|
|
4
|
+
import { AppState } from 'react-native';
|
|
5
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
6
|
+
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
const TickleHybridObject = NitroModules.createHybridObject('Tickle');
|
|
8
|
+
const boxedTickle = NitroModules.box(TickleHybridObject);
|
|
9
|
+
export function startHaptic(events, curves) {
|
|
10
|
+
'worklet';
|
|
11
|
+
|
|
12
|
+
return boxedTickle.unbox().startHaptic(events, curves);
|
|
13
|
+
}
|
|
14
|
+
export function stopAllHaptics() {
|
|
15
|
+
'worklet';
|
|
16
|
+
|
|
17
|
+
return boxedTickle.unbox().stopAllHaptics();
|
|
18
|
+
}
|
|
19
|
+
export function initializeEngine() {
|
|
20
|
+
'worklet';
|
|
21
|
+
|
|
22
|
+
return boxedTickle.unbox().initializeEngine();
|
|
23
|
+
}
|
|
24
|
+
export function destroyEngine() {
|
|
25
|
+
'worklet';
|
|
26
|
+
|
|
27
|
+
return boxedTickle.unbox().destroyEngine();
|
|
28
|
+
}
|
|
29
|
+
export function createContinuousPlayer(playerId, initialIntensity, initialSharpness) {
|
|
30
|
+
'worklet';
|
|
31
|
+
|
|
32
|
+
return boxedTickle.unbox().createContinuousPlayer(playerId, initialIntensity, initialSharpness);
|
|
33
|
+
}
|
|
34
|
+
export function startContinuousPlayer(playerId) {
|
|
35
|
+
'worklet';
|
|
36
|
+
|
|
37
|
+
return boxedTickle.unbox().startContinuousPlayer(playerId);
|
|
38
|
+
}
|
|
39
|
+
export function updateContinuousPlayer(playerId, intensityControl, sharpnessControl) {
|
|
40
|
+
'worklet';
|
|
41
|
+
|
|
42
|
+
return boxedTickle.unbox().updateContinuousPlayer(playerId, intensityControl, sharpnessControl);
|
|
43
|
+
}
|
|
44
|
+
export function stopContinuousPlayer(playerId) {
|
|
45
|
+
'worklet';
|
|
46
|
+
|
|
47
|
+
return boxedTickle.unbox().stopContinuousPlayer(playerId);
|
|
48
|
+
}
|
|
49
|
+
export function destroyContinuousPlayer(playerId) {
|
|
50
|
+
'worklet';
|
|
51
|
+
|
|
52
|
+
return boxedTickle.unbox().destroyContinuousPlayer(playerId);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// MARK: - System Haptics (Predefined OS-level feedback)
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Triggers an impact haptic with the specified style.
|
|
59
|
+
* Simulates a physical collision feedback.
|
|
60
|
+
*
|
|
61
|
+
* @param style - The intensity style of the impact ('rigid' | 'heavy' | 'medium' | 'light' | 'soft')
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* // Light tap for subtle UI feedback
|
|
66
|
+
* triggerImpact('light');
|
|
67
|
+
*
|
|
68
|
+
* // Heavy impact for significant actions
|
|
69
|
+
* triggerImpact('heavy');
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export function triggerImpact(style) {
|
|
73
|
+
'worklet';
|
|
74
|
+
|
|
75
|
+
return boxedTickle.unbox().triggerImpact(style);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Triggers a notification-style haptic for alerts and status updates.
|
|
80
|
+
* Use this for communicating outcomes of actions to the user.
|
|
81
|
+
*
|
|
82
|
+
* @param type - The notification type ('error' | 'success' | 'warning')
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* // Success feedback after completing an action
|
|
87
|
+
* triggerNotification('success');
|
|
88
|
+
*
|
|
89
|
+
* // Error feedback when something goes wrong
|
|
90
|
+
* triggerNotification('error');
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export function triggerNotification(type) {
|
|
94
|
+
'worklet';
|
|
95
|
+
|
|
96
|
+
return boxedTickle.unbox().triggerNotification(type);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Triggers a selection change haptic.
|
|
101
|
+
* Best used for picker wheels, toggles, and selection changes.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* // When user scrolls through picker options
|
|
106
|
+
* triggerSelection();
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export function triggerSelection() {
|
|
110
|
+
'worklet';
|
|
111
|
+
|
|
112
|
+
return boxedTickle.unbox().triggerSelection();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// MARK: - Global Haptics Enable/Disable
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Enable or disable haptics globally. This setting is persisted across app restarts.
|
|
119
|
+
* When disabled, all haptic functions become no-ops (no haptics will play).
|
|
120
|
+
* This does not affect engine initialization/destruction.
|
|
121
|
+
*
|
|
122
|
+
* @param enabled - Whether haptics should be enabled
|
|
123
|
+
*/
|
|
124
|
+
export function setHapticsEnabled(enabled) {
|
|
125
|
+
'worklet';
|
|
126
|
+
|
|
127
|
+
return boxedTickle.unbox().setHapticsEnabled(enabled);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Get the current global haptics enabled state.
|
|
132
|
+
* Defaults to true if not previously set.
|
|
133
|
+
*
|
|
134
|
+
* @returns Whether haptics are currently enabled
|
|
135
|
+
*/
|
|
136
|
+
export function getHapticsEnabled() {
|
|
137
|
+
'worklet';
|
|
138
|
+
|
|
139
|
+
return boxedTickle.unbox().getHapticsEnabled();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Hook to manage the global haptics enabled state.
|
|
144
|
+
* Provides reactive state and a setter function.
|
|
145
|
+
*
|
|
146
|
+
* @returns [isEnabled, setEnabled] - Current state and setter function
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```tsx
|
|
150
|
+
* function SettingsScreen() {
|
|
151
|
+
* const [hapticsEnabled, setHapticsEnabled] = useHapticsEnabled();
|
|
152
|
+
*
|
|
153
|
+
* return (
|
|
154
|
+
* <Switch
|
|
155
|
+
* value={hapticsEnabled}
|
|
156
|
+
* onValueChange={setHapticsEnabled}
|
|
157
|
+
* />
|
|
158
|
+
* );
|
|
159
|
+
* }
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export function useHapticsEnabled() {
|
|
163
|
+
const [enabled, setEnabled] = useState(() => getHapticsEnabled());
|
|
164
|
+
const setHapticsEnabledState = useCallback(value => {
|
|
165
|
+
setHapticsEnabled(value);
|
|
166
|
+
setEnabled(value);
|
|
167
|
+
}, []);
|
|
168
|
+
return [enabled, setHapticsEnabledState];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Hook to manage a continuous haptic player lifecycle.
|
|
173
|
+
*
|
|
174
|
+
* @param playerId - A unique string key to identify this player (e.g., 'my-palette')
|
|
175
|
+
* @param initialIntensity - Initial intensity value (0.0 to 1.0)
|
|
176
|
+
* @param initialSharpness - Initial sharpness value (0.0 to 1.0)
|
|
177
|
+
*
|
|
178
|
+
* @returns Object with JS-bound methods for convenience:
|
|
179
|
+
* - `start()` - Start the continuous haptic
|
|
180
|
+
* - `stop()` - Stop the continuous haptic
|
|
181
|
+
* - `update(intensity, sharpness)` - Update haptic parameters
|
|
182
|
+
* - `playerId` - The player key (for use in worklets)
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```tsx
|
|
186
|
+
* const PLAYER_KEY = 'my-palette';
|
|
187
|
+
*
|
|
188
|
+
* function MyComponent() {
|
|
189
|
+
* const { start, stop, update } = useContinuousPlayer(PLAYER_KEY, 1.0, 0.5);
|
|
190
|
+
*
|
|
191
|
+
* const gesture = Gesture.Pan()
|
|
192
|
+
* .onBegin(() => {
|
|
193
|
+
* start();
|
|
194
|
+
* })
|
|
195
|
+
* .onUpdate(() => {
|
|
196
|
+
* update(0.5, 0.5);
|
|
197
|
+
* })
|
|
198
|
+
* .onEnd(() => {
|
|
199
|
+
* stop();
|
|
200
|
+
* });
|
|
201
|
+
* }
|
|
202
|
+
* ```
|
|
203
|
+
*/
|
|
204
|
+
export function useContinuousPlayer(playerId, initialIntensity = 1.0, initialSharpness = 0.5) {
|
|
205
|
+
useEffect(() => {
|
|
206
|
+
createContinuousPlayer(playerId, initialIntensity, initialSharpness);
|
|
207
|
+
return () => {
|
|
208
|
+
destroyContinuousPlayer(playerId);
|
|
209
|
+
};
|
|
210
|
+
}, [playerId, initialIntensity, initialSharpness]);
|
|
211
|
+
return {
|
|
212
|
+
start: () => {
|
|
213
|
+
'worklet';
|
|
214
|
+
|
|
215
|
+
startContinuousPlayer(playerId);
|
|
216
|
+
},
|
|
217
|
+
stop: () => {
|
|
218
|
+
'worklet';
|
|
219
|
+
|
|
220
|
+
stopContinuousPlayer(playerId);
|
|
221
|
+
},
|
|
222
|
+
update: (intensity, sharpness) => {
|
|
223
|
+
'worklet';
|
|
224
|
+
|
|
225
|
+
return updateContinuousPlayer(playerId, intensity, sharpness);
|
|
226
|
+
},
|
|
227
|
+
playerId
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
export function useHapticEngine() {
|
|
231
|
+
useEffect(() => {
|
|
232
|
+
initializeEngine();
|
|
233
|
+
const off = AppState.addEventListener('change', state => {
|
|
234
|
+
if (state === 'active') {
|
|
235
|
+
initializeEngine();
|
|
236
|
+
} else if (state === 'background') {
|
|
237
|
+
destroyEngine();
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
return () => {
|
|
241
|
+
off.remove();
|
|
242
|
+
};
|
|
243
|
+
}, []);
|
|
244
|
+
}
|
|
245
|
+
export function HapticProvider({
|
|
246
|
+
children
|
|
247
|
+
}) {
|
|
248
|
+
useHapticEngine();
|
|
249
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
250
|
+
children: children
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
export { TickleHybridObject };
|
|
254
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","useCallback","AppState","NitroModules","Fragment","_Fragment","jsx","_jsx","TickleHybridObject","createHybridObject","boxedTickle","box","startHaptic","events","curves","unbox","stopAllHaptics","initializeEngine","destroyEngine","createContinuousPlayer","playerId","initialIntensity","initialSharpness","startContinuousPlayer","updateContinuousPlayer","intensityControl","sharpnessControl","stopContinuousPlayer","destroyContinuousPlayer","triggerImpact","style","triggerNotification","type","triggerSelection","setHapticsEnabled","enabled","getHapticsEnabled","useHapticsEnabled","setEnabled","setHapticsEnabledState","value","useContinuousPlayer","start","stop","update","intensity","sharpness","useHapticEngine","off","addEventListener","state","remove","HapticProvider","children"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export type HapticEventType = 'transient' | 'continuous';
|
|
3
|
+
export type HapticParameterType = 'intensity' | 'sharpness';
|
|
4
|
+
/**
|
|
5
|
+
* Feedback intensity styles for impact haptics.
|
|
6
|
+
* Maps to UIImpactFeedbackGenerator.FeedbackStyle on iOS.
|
|
7
|
+
*/
|
|
8
|
+
export type HapticImpactStyle = 'rigid' | 'heavy' | 'medium' | 'light' | 'soft';
|
|
9
|
+
/**
|
|
10
|
+
* Notification feedback categories for alert-style haptics.
|
|
11
|
+
* Maps to UINotificationFeedbackGenerator.FeedbackType on iOS.
|
|
12
|
+
*/
|
|
13
|
+
export type HapticNotificationType = 'error' | 'success' | 'warning';
|
|
14
|
+
export type HapticEventParameter = {
|
|
15
|
+
type: HapticParameterType;
|
|
16
|
+
value: number;
|
|
17
|
+
};
|
|
18
|
+
export type HapticCurveControlPoint = {
|
|
19
|
+
relativeTime: number;
|
|
20
|
+
value: number;
|
|
21
|
+
};
|
|
22
|
+
export type HapticEvent = {
|
|
23
|
+
type: HapticEventType;
|
|
24
|
+
parameters: HapticEventParameter[];
|
|
25
|
+
relativeTime: number;
|
|
26
|
+
duration?: number;
|
|
27
|
+
};
|
|
28
|
+
export type HapticCurve = {
|
|
29
|
+
type: HapticParameterType;
|
|
30
|
+
controlPoints: HapticCurveControlPoint[];
|
|
31
|
+
relativeTime: number;
|
|
32
|
+
};
|
|
33
|
+
export interface Tickle extends HybridObject<{
|
|
34
|
+
ios: 'swift';
|
|
35
|
+
android: 'kotlin';
|
|
36
|
+
}> {
|
|
37
|
+
startHaptic(events: HapticEvent[], curves: HapticCurve[]): void;
|
|
38
|
+
stopAllHaptics(): void;
|
|
39
|
+
initializeEngine(): void;
|
|
40
|
+
destroyEngine(): void;
|
|
41
|
+
createContinuousPlayer(playerId: string, initialIntensity: number, initialSharpness: number): void;
|
|
42
|
+
startContinuousPlayer(playerId: string): void;
|
|
43
|
+
updateContinuousPlayer(playerId: string, intensityControl: number, sharpnessControl: number): void;
|
|
44
|
+
stopContinuousPlayer(playerId: string): void;
|
|
45
|
+
destroyContinuousPlayer(playerId: string): void;
|
|
46
|
+
setHapticsEnabled(enabled: boolean): void;
|
|
47
|
+
getHapticsEnabled(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Triggers an impact haptic with the specified style.
|
|
50
|
+
* Simulates a physical collision feedback.
|
|
51
|
+
*/
|
|
52
|
+
triggerImpact(style: HapticImpactStyle): void;
|
|
53
|
+
/**
|
|
54
|
+
* Triggers a notification-style haptic for alerts and status updates.
|
|
55
|
+
*/
|
|
56
|
+
triggerNotification(type: HapticNotificationType): void;
|
|
57
|
+
/**
|
|
58
|
+
* Triggers a selection change haptic.
|
|
59
|
+
* Best used for picker wheels, toggles, and selection changes.
|
|
60
|
+
*/
|
|
61
|
+
triggerSelection(): void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Tickle.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tickle.nitro.d.ts","sourceRoot":"","sources":["../../../src/Tickle.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,YAAY,CAAC;AACzD,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC;AAI5D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEhF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,aAAa,EAAE,uBAAuB,EAAE,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,MACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAChE,cAAc,IAAI,IAAI,CAAC;IACvB,gBAAgB,IAAI,IAAI,CAAC;IACzB,aAAa,IAAI,IAAI,CAAC;IAEtB,sBAAsB,CACpB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAAC;IACR,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,sBAAsB,CACpB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAAC;IACR,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhD,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,iBAAiB,IAAI,OAAO,CAAC;IAI7B;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAE9C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAExD;;;OAGG;IACH,gBAAgB,IAAI,IAAI,CAAC;CAC1B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import type { Tickle, HapticCurve, HapticEventParameter, HapticParameterType, HapticImpactStyle, HapticNotificationType } from './Tickle.nitro';
|
|
2
|
+
export type TransientHapticEvent = {
|
|
3
|
+
type: 'transient';
|
|
4
|
+
parameters: HapticEventParameter[];
|
|
5
|
+
relativeTime: number;
|
|
6
|
+
};
|
|
7
|
+
export type ContinuousHapticEvent = {
|
|
8
|
+
type: 'continuous';
|
|
9
|
+
parameters: HapticEventParameter[];
|
|
10
|
+
relativeTime: number;
|
|
11
|
+
duration: number;
|
|
12
|
+
};
|
|
13
|
+
export type HapticEvent = TransientHapticEvent | ContinuousHapticEvent;
|
|
14
|
+
declare const TickleHybridObject: Tickle;
|
|
15
|
+
export declare function startHaptic(events: HapticEvent[], curves: HapticCurve[]): void;
|
|
16
|
+
export declare function stopAllHaptics(): void;
|
|
17
|
+
export declare function initializeEngine(): void;
|
|
18
|
+
export declare function destroyEngine(): void;
|
|
19
|
+
export declare function createContinuousPlayer(playerId: string, initialIntensity: number, initialSharpness: number): void;
|
|
20
|
+
export declare function startContinuousPlayer(playerId: string): void;
|
|
21
|
+
export declare function updateContinuousPlayer(playerId: string, intensityControl: number, sharpnessControl: number): void;
|
|
22
|
+
export declare function stopContinuousPlayer(playerId: string): void;
|
|
23
|
+
export declare function destroyContinuousPlayer(playerId: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Triggers an impact haptic with the specified style.
|
|
26
|
+
* Simulates a physical collision feedback.
|
|
27
|
+
*
|
|
28
|
+
* @param style - The intensity style of the impact ('rigid' | 'heavy' | 'medium' | 'light' | 'soft')
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* // Light tap for subtle UI feedback
|
|
33
|
+
* triggerImpact('light');
|
|
34
|
+
*
|
|
35
|
+
* // Heavy impact for significant actions
|
|
36
|
+
* triggerImpact('heavy');
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function triggerImpact(style: HapticImpactStyle): void;
|
|
40
|
+
/**
|
|
41
|
+
* Triggers a notification-style haptic for alerts and status updates.
|
|
42
|
+
* Use this for communicating outcomes of actions to the user.
|
|
43
|
+
*
|
|
44
|
+
* @param type - The notification type ('error' | 'success' | 'warning')
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* // Success feedback after completing an action
|
|
49
|
+
* triggerNotification('success');
|
|
50
|
+
*
|
|
51
|
+
* // Error feedback when something goes wrong
|
|
52
|
+
* triggerNotification('error');
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function triggerNotification(type: HapticNotificationType): void;
|
|
56
|
+
/**
|
|
57
|
+
* Triggers a selection change haptic.
|
|
58
|
+
* Best used for picker wheels, toggles, and selection changes.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* // When user scrolls through picker options
|
|
63
|
+
* triggerSelection();
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function triggerSelection(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Enable or disable haptics globally. This setting is persisted across app restarts.
|
|
69
|
+
* When disabled, all haptic functions become no-ops (no haptics will play).
|
|
70
|
+
* This does not affect engine initialization/destruction.
|
|
71
|
+
*
|
|
72
|
+
* @param enabled - Whether haptics should be enabled
|
|
73
|
+
*/
|
|
74
|
+
export declare function setHapticsEnabled(enabled: boolean): void;
|
|
75
|
+
/**
|
|
76
|
+
* Get the current global haptics enabled state.
|
|
77
|
+
* Defaults to true if not previously set.
|
|
78
|
+
*
|
|
79
|
+
* @returns Whether haptics are currently enabled
|
|
80
|
+
*/
|
|
81
|
+
export declare function getHapticsEnabled(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Hook to manage the global haptics enabled state.
|
|
84
|
+
* Provides reactive state and a setter function.
|
|
85
|
+
*
|
|
86
|
+
* @returns [isEnabled, setEnabled] - Current state and setter function
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```tsx
|
|
90
|
+
* function SettingsScreen() {
|
|
91
|
+
* const [hapticsEnabled, setHapticsEnabled] = useHapticsEnabled();
|
|
92
|
+
*
|
|
93
|
+
* return (
|
|
94
|
+
* <Switch
|
|
95
|
+
* value={hapticsEnabled}
|
|
96
|
+
* onValueChange={setHapticsEnabled}
|
|
97
|
+
* />
|
|
98
|
+
* );
|
|
99
|
+
* }
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export declare function useHapticsEnabled(): [boolean, (enabled: boolean) => void];
|
|
103
|
+
/**
|
|
104
|
+
* Hook to manage a continuous haptic player lifecycle.
|
|
105
|
+
*
|
|
106
|
+
* @param playerId - A unique string key to identify this player (e.g., 'my-palette')
|
|
107
|
+
* @param initialIntensity - Initial intensity value (0.0 to 1.0)
|
|
108
|
+
* @param initialSharpness - Initial sharpness value (0.0 to 1.0)
|
|
109
|
+
*
|
|
110
|
+
* @returns Object with JS-bound methods for convenience:
|
|
111
|
+
* - `start()` - Start the continuous haptic
|
|
112
|
+
* - `stop()` - Stop the continuous haptic
|
|
113
|
+
* - `update(intensity, sharpness)` - Update haptic parameters
|
|
114
|
+
* - `playerId` - The player key (for use in worklets)
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```tsx
|
|
118
|
+
* const PLAYER_KEY = 'my-palette';
|
|
119
|
+
*
|
|
120
|
+
* function MyComponent() {
|
|
121
|
+
* const { start, stop, update } = useContinuousPlayer(PLAYER_KEY, 1.0, 0.5);
|
|
122
|
+
*
|
|
123
|
+
* const gesture = Gesture.Pan()
|
|
124
|
+
* .onBegin(() => {
|
|
125
|
+
* start();
|
|
126
|
+
* })
|
|
127
|
+
* .onUpdate(() => {
|
|
128
|
+
* update(0.5, 0.5);
|
|
129
|
+
* })
|
|
130
|
+
* .onEnd(() => {
|
|
131
|
+
* stop();
|
|
132
|
+
* });
|
|
133
|
+
* }
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
export declare function useContinuousPlayer(playerId: string, initialIntensity?: number, initialSharpness?: number): {
|
|
137
|
+
start: () => void;
|
|
138
|
+
stop: () => void;
|
|
139
|
+
update: (intensity: number, sharpness: number) => void;
|
|
140
|
+
playerId: string;
|
|
141
|
+
};
|
|
142
|
+
export declare function useHapticEngine(): void;
|
|
143
|
+
export declare function HapticProvider({ children }: {
|
|
144
|
+
children: React.ReactNode;
|
|
145
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
146
|
+
export { TickleHybridObject };
|
|
147
|
+
export type { HapticCurve, HapticEventParameter, HapticParameterType, HapticImpactStyle, HapticNotificationType, };
|
|
148
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;AAEvE,QAAA,MAAM,kBAAkB,QAAoD,CAAC;AAI7E,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,EAAE,WAAW,EAAE,GACpB,IAAI,CAIN;AAED,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAMN;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACvB,IAAI,CAMN;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAG3D;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAG9D;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAG5D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAGtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAID;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAGxD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAG3C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CASzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,MAAY,EAC9B,gBAAgB,GAAE,MAAY;;;wBAmBR,MAAM,aAAa,MAAM;;EAMhD;AAED,wBAAgB,eAAe,SAgB9B;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAIzE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,CAAC"}
|
package/nitro.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cxxNamespace": ["tickle"],
|
|
3
|
+
"ios": {
|
|
4
|
+
"iosModuleName": "Tickle"
|
|
5
|
+
},
|
|
6
|
+
"android": {
|
|
7
|
+
"androidNamespace": ["tickle"],
|
|
8
|
+
"androidCxxLibName": "tickle"
|
|
9
|
+
},
|
|
10
|
+
"autolinking": {
|
|
11
|
+
"Tickle": {
|
|
12
|
+
"swift": "Tickle",
|
|
13
|
+
"kotlin": "Tickle"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"ignorePaths": ["node_modules", "example", "lib"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JHapticCurve.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "HapticCurve.hpp"
|
|
12
|
+
|
|
13
|
+
#include "HapticCurveControlPoint.hpp"
|
|
14
|
+
#include "HapticParameterType.hpp"
|
|
15
|
+
#include "JHapticCurveControlPoint.hpp"
|
|
16
|
+
#include "JHapticParameterType.hpp"
|
|
17
|
+
#include <vector>
|
|
18
|
+
|
|
19
|
+
namespace margelo::nitro::tickle {
|
|
20
|
+
|
|
21
|
+
using namespace facebook;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The C++ JNI bridge between the C++ struct "HapticCurve" and the the Kotlin data class "HapticCurve".
|
|
25
|
+
*/
|
|
26
|
+
struct JHapticCurve final: public jni::JavaClass<JHapticCurve> {
|
|
27
|
+
public:
|
|
28
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/tickle/HapticCurve;";
|
|
29
|
+
|
|
30
|
+
public:
|
|
31
|
+
/**
|
|
32
|
+
* Convert this Java/Kotlin-based struct to the C++ struct HapticCurve by copying all values to C++.
|
|
33
|
+
*/
|
|
34
|
+
[[maybe_unused]]
|
|
35
|
+
[[nodiscard]]
|
|
36
|
+
HapticCurve toCpp() const {
|
|
37
|
+
static const auto clazz = javaClassStatic();
|
|
38
|
+
static const auto fieldType = clazz->getField<JHapticParameterType>("type");
|
|
39
|
+
jni::local_ref<JHapticParameterType> type = this->getFieldValue(fieldType);
|
|
40
|
+
static const auto fieldControlPoints = clazz->getField<jni::JArrayClass<JHapticCurveControlPoint>>("controlPoints");
|
|
41
|
+
jni::local_ref<jni::JArrayClass<JHapticCurveControlPoint>> controlPoints = this->getFieldValue(fieldControlPoints);
|
|
42
|
+
static const auto fieldRelativeTime = clazz->getField<double>("relativeTime");
|
|
43
|
+
double relativeTime = this->getFieldValue(fieldRelativeTime);
|
|
44
|
+
return HapticCurve(
|
|
45
|
+
type->toCpp(),
|
|
46
|
+
[&]() {
|
|
47
|
+
size_t __size = controlPoints->size();
|
|
48
|
+
std::vector<HapticCurveControlPoint> __vector;
|
|
49
|
+
__vector.reserve(__size);
|
|
50
|
+
for (size_t __i = 0; __i < __size; __i++) {
|
|
51
|
+
auto __element = controlPoints->getElement(__i);
|
|
52
|
+
__vector.push_back(__element->toCpp());
|
|
53
|
+
}
|
|
54
|
+
return __vector;
|
|
55
|
+
}(),
|
|
56
|
+
relativeTime
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public:
|
|
61
|
+
/**
|
|
62
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
63
|
+
*/
|
|
64
|
+
[[maybe_unused]]
|
|
65
|
+
static jni::local_ref<JHapticCurve::javaobject> fromCpp(const HapticCurve& value) {
|
|
66
|
+
using JSignature = JHapticCurve(jni::alias_ref<JHapticParameterType>, jni::alias_ref<jni::JArrayClass<JHapticCurveControlPoint>>, double);
|
|
67
|
+
static const auto clazz = javaClassStatic();
|
|
68
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
69
|
+
return create(
|
|
70
|
+
clazz,
|
|
71
|
+
JHapticParameterType::fromCpp(value.type),
|
|
72
|
+
[&]() {
|
|
73
|
+
size_t __size = value.controlPoints.size();
|
|
74
|
+
jni::local_ref<jni::JArrayClass<JHapticCurveControlPoint>> __array = jni::JArrayClass<JHapticCurveControlPoint>::newArray(__size);
|
|
75
|
+
for (size_t __i = 0; __i < __size; __i++) {
|
|
76
|
+
const auto& __element = value.controlPoints[__i];
|
|
77
|
+
auto __elementJni = JHapticCurveControlPoint::fromCpp(__element);
|
|
78
|
+
__array->setElement(__i, *__elementJni);
|
|
79
|
+
}
|
|
80
|
+
return __array;
|
|
81
|
+
}(),
|
|
82
|
+
value.relativeTime
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
} // namespace margelo::nitro::tickle
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JHapticCurveControlPoint.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "HapticCurveControlPoint.hpp"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
namespace margelo::nitro::tickle {
|
|
16
|
+
|
|
17
|
+
using namespace facebook;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The C++ JNI bridge between the C++ struct "HapticCurveControlPoint" and the the Kotlin data class "HapticCurveControlPoint".
|
|
21
|
+
*/
|
|
22
|
+
struct JHapticCurveControlPoint final: public jni::JavaClass<JHapticCurveControlPoint> {
|
|
23
|
+
public:
|
|
24
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/tickle/HapticCurveControlPoint;";
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
/**
|
|
28
|
+
* Convert this Java/Kotlin-based struct to the C++ struct HapticCurveControlPoint by copying all values to C++.
|
|
29
|
+
*/
|
|
30
|
+
[[maybe_unused]]
|
|
31
|
+
[[nodiscard]]
|
|
32
|
+
HapticCurveControlPoint toCpp() const {
|
|
33
|
+
static const auto clazz = javaClassStatic();
|
|
34
|
+
static const auto fieldRelativeTime = clazz->getField<double>("relativeTime");
|
|
35
|
+
double relativeTime = this->getFieldValue(fieldRelativeTime);
|
|
36
|
+
static const auto fieldValue = clazz->getField<double>("value");
|
|
37
|
+
double value = this->getFieldValue(fieldValue);
|
|
38
|
+
return HapticCurveControlPoint(
|
|
39
|
+
relativeTime,
|
|
40
|
+
value
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public:
|
|
45
|
+
/**
|
|
46
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
47
|
+
*/
|
|
48
|
+
[[maybe_unused]]
|
|
49
|
+
static jni::local_ref<JHapticCurveControlPoint::javaobject> fromCpp(const HapticCurveControlPoint& value) {
|
|
50
|
+
using JSignature = JHapticCurveControlPoint(double, double);
|
|
51
|
+
static const auto clazz = javaClassStatic();
|
|
52
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
53
|
+
return create(
|
|
54
|
+
clazz,
|
|
55
|
+
value.relativeTime,
|
|
56
|
+
value.value
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
} // namespace margelo::nitro::tickle
|