Skip to content

Commit e8b56aa

Browse files
committed
Merge pull request godotengine#104725 from Meorge/gamecontroller-avoid-joystick-code-duplication
Make reusable functions for GameController joystick and trigger input
2 parents e99dc63 + 0f897f8 commit e8b56aa

File tree

1 file changed

+44
-65
lines changed

1 file changed

+44
-65
lines changed

drivers/apple/joypad_apple.mm

Lines changed: 44 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)