@@ -163,6 +163,42 @@ void play_strong_pattern(CHHapticPattern *p_pattern) {
163163 };
164164 };
165165
166+ auto JOYSTICK_LEFT = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {
167+ if (axis_value[(int )JoyAxis::LEFT_X] != xValue) {
168+ axis_changed[(int )JoyAxis::LEFT_X] = true ;
169+ axis_value[(int )JoyAxis::LEFT_X] = xValue;
170+ }
171+ if (axis_value[(int )JoyAxis::LEFT_Y] != -yValue) {
172+ axis_changed[(int )JoyAxis::LEFT_Y] = true ;
173+ axis_value[(int )JoyAxis::LEFT_Y] = -yValue;
174+ }
175+ };
176+
177+ auto JOYSTICK_RIGHT = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {
178+ if (axis_value[(int )JoyAxis::RIGHT_X] != xValue) {
179+ axis_changed[(int )JoyAxis::RIGHT_X] = true ;
180+ axis_value[(int )JoyAxis::RIGHT_X] = xValue;
181+ }
182+ if (axis_value[(int )JoyAxis::RIGHT_Y] != -yValue) {
183+ axis_changed[(int )JoyAxis::RIGHT_Y] = true ;
184+ axis_value[(int )JoyAxis::RIGHT_Y] = -yValue;
185+ }
186+ };
187+
188+ auto TRIGGER_LEFT = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
189+ if (axis_value[(int )JoyAxis::TRIGGER_LEFT] != value) {
190+ axis_changed[(int )JoyAxis::TRIGGER_LEFT] = true ;
191+ axis_value[(int )JoyAxis::TRIGGER_LEFT] = value;
192+ }
193+ };
194+
195+ auto TRIGGER_RIGHT = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
196+ if (axis_value[(int )JoyAxis::TRIGGER_RIGHT] != value) {
197+ axis_changed[(int )JoyAxis::TRIGGER_RIGHT] = true ;
198+ axis_value[(int )JoyAxis::TRIGGER_RIGHT] = value;
199+ }
200+ };
201+
166202 if (@available (macOS 11.0 , iOS 14.0 , tvOS 14.0 , *)) {
167203 if (controller.physicalInputProfile != nil ) {
168204 GCPhysicalInputProfile *profile = controller.physicalInputProfile ;
@@ -220,20 +256,10 @@ void play_strong_pattern(CHHapticPattern *p_pattern) {
220256 GCControllerButtonInput *leftTrigger = profile.buttons [GCInputLeftTrigger];
221257 GCControllerButtonInput *rightTrigger = profile.buttons [GCInputRightTrigger];
222258 if (leftTrigger) {
223- leftTrigger.valueChangedHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
224- if (axis_value[(int )JoyAxis::TRIGGER_LEFT] != value) {
225- axis_changed[(int )JoyAxis::TRIGGER_LEFT] = true ;
226- axis_value[(int )JoyAxis::TRIGGER_LEFT] = value;
227- }
228- };
259+ leftTrigger.valueChangedHandler = TRIGGER_LEFT;
229260 }
230261 if (rightTrigger) {
231- rightTrigger.valueChangedHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
232- if (axis_value[(int )JoyAxis::TRIGGER_RIGHT] != value) {
233- axis_changed[(int )JoyAxis::TRIGGER_RIGHT] = true ;
234- axis_value[(int )JoyAxis::TRIGGER_RIGHT] = value;
235- }
236- };
262+ rightTrigger.valueChangedHandler = TRIGGER_RIGHT;
237263 }
238264
239265 GCControllerButtonInput *buttonMenu = profile.buttons [GCInputButtonMenu];
@@ -276,30 +302,12 @@ void play_strong_pattern(CHHapticPattern *p_pattern) {
276302
277303 GCControllerDirectionPad *leftThumbstick = profile.dpads [GCInputLeftThumbstick];
278304 if (leftThumbstick) {
279- leftThumbstick.valueChangedHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {
280- if (axis_value[(int )JoyAxis::LEFT_X] != xValue) {
281- axis_changed[(int )JoyAxis::LEFT_X] = true ;
282- axis_value[(int )JoyAxis::LEFT_X] = xValue;
283- }
284- if (axis_value[(int )JoyAxis::LEFT_Y] != -yValue) {
285- axis_changed[(int )JoyAxis::LEFT_Y] = true ;
286- axis_value[(int )JoyAxis::LEFT_Y] = -yValue;
287- }
288- };
305+ leftThumbstick.valueChangedHandler = JOYSTICK_LEFT;
289306 }
290307
291308 GCControllerDirectionPad *rightThumbstick = profile.dpads [GCInputRightThumbstick];
292309 if (rightThumbstick) {
293- rightThumbstick.valueChangedHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {
294- if (axis_value[(int )JoyAxis::RIGHT_X] != xValue) {
295- axis_changed[(int )JoyAxis::RIGHT_X] = true ;
296- axis_value[(int )JoyAxis::RIGHT_X] = xValue;
297- }
298- if (axis_value[(int )JoyAxis::RIGHT_Y] != -yValue) {
299- axis_changed[(int )JoyAxis::RIGHT_Y] = true ;
300- axis_value[(int )JoyAxis::RIGHT_Y] = -yValue;
301- }
302- };
310+ rightThumbstick.valueChangedHandler = JOYSTICK_RIGHT;
303311 }
304312
305313 GCControllerDirectionPad *dpad = nil ;
@@ -337,39 +345,10 @@ void play_strong_pattern(CHHapticPattern *p_pattern) {
337345 gamepad.dpad .left .pressedChangedHandler = BUTTON (JoyButton::DPAD_LEFT);
338346 gamepad.dpad .right .pressedChangedHandler = BUTTON (JoyButton::DPAD_RIGHT);
339347
340- gamepad.leftThumbstick .valueChangedHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {
341- if (axis_value[(int )JoyAxis::LEFT_X] != xValue) {
342- axis_changed[(int )JoyAxis::LEFT_X] = true ;
343- axis_value[(int )JoyAxis::LEFT_X] = xValue;
344- }
345- if (axis_value[(int )JoyAxis::LEFT_Y] != -yValue) {
346- axis_changed[(int )JoyAxis::LEFT_Y] = true ;
347- axis_value[(int )JoyAxis::LEFT_Y] = -yValue;
348- }
349- };
350-
351- gamepad.rightThumbstick .valueChangedHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {
352- if (axis_value[(int )JoyAxis::RIGHT_X] != xValue) {
353- axis_changed[(int )JoyAxis::RIGHT_X] = true ;
354- axis_value[(int )JoyAxis::RIGHT_X] = xValue;
355- }
356- if (axis_value[(int )JoyAxis::RIGHT_Y] != -yValue) {
357- axis_changed[(int )JoyAxis::RIGHT_Y] = true ;
358- axis_value[(int )JoyAxis::RIGHT_Y] = -yValue;
359- }
360- };
361- gamepad.leftTrigger .valueChangedHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
362- if (axis_value[(int )JoyAxis::TRIGGER_LEFT] != value) {
363- axis_changed[(int )JoyAxis::TRIGGER_LEFT] = true ;
364- axis_value[(int )JoyAxis::TRIGGER_LEFT] = value;
365- }
366- };
367- gamepad.rightTrigger .valueChangedHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
368- if (axis_value[(int )JoyAxis::TRIGGER_RIGHT] != value) {
369- axis_changed[(int )JoyAxis::TRIGGER_RIGHT] = true ;
370- axis_value[(int )JoyAxis::TRIGGER_RIGHT] = value;
371- }
372- };
348+ gamepad.leftThumbstick .valueChangedHandler = JOYSTICK_LEFT;
349+ gamepad.rightThumbstick .valueChangedHandler = JOYSTICK_RIGHT;
350+ gamepad.leftTrigger .valueChangedHandler = TRIGGER_LEFT;
351+ gamepad.rightTrigger .valueChangedHandler = TRIGGER_RIGHT;
373352
374353 if (@available (macOS 10.14.1 , iOS 12.1 , tvOS 12.1 , *)) {
375354 gamepad.leftThumbstickButton .pressedChangedHandler = BUTTON (JoyButton::LEFT_STICK);
0 commit comments