aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2018-07-07 09:38:19 +0200
committerGitHub <noreply@github.com>2018-07-07 09:38:19 +0200
commit50088bf49bd923e32a93a6687f030f289d5805ac (patch)
treed51683a467f7269e1411a4c339df42c205f04d64 /src
parent7c80a517b49fc8474e74fe96adad626166fa1384 (diff)
parentfa36c5294affc5f960c14291f4c2336f1a3557e1 (diff)
downloadraylib-50088bf49bd923e32a93a6687f030f289d5805ac.tar.gz
raylib-50088bf49bd923e32a93a6687f030f289d5805ac.zip
Merge pull request #570 from SethArchambault/master
SNES-like GAMEPAD Support added for Android, Makefile has optional support for 32bit
Diffstat (limited to 'src')
-rw-r--r--src/Makefile20
-rw-r--r--src/core.c27
-rw-r--r--src/raylib.h18
3 files changed, 59 insertions, 6 deletions
diff --git a/src/Makefile b/src/Makefile
index 6f71874f..8ba6d303 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -208,6 +208,9 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID)
ifeq ($(ANDROID_ARCH),ARM64)
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/android/arm64-v8a
endif
+ ifeq ($(ANDROID_ARCH),ARM)
+ RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/android/armeabi-v7a
+ endif
endif
# Define raylib graphics api depending on selected platform
@@ -261,6 +264,9 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID)
ifeq ($(ANDROID_ARCH),ARM64)
CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang
endif
+ ifeq ($(ANDROID_ARCH),ARM)
+ CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang
+ endif
endif
# Default archiver program to pack libraries
@@ -279,6 +285,9 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID)
ifeq ($(ANDROID_ARCH),ARM64)
AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
endif
+ ifeq ($(ANDROID_ARCH),ARM)
+ AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
+ endif
endif
# Define compiler flags:
@@ -317,8 +326,12 @@ ifeq ($(PLATFORM),PLATFORM_WEB)
endif
ifeq ($(PLATFORM),PLATFORM_ANDROID)
# Compiler flags for arquitecture (only ARM, not ARM64)
- #CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
- CFLAGS += -target aarch64 -mfix-cortex-a53-835769
+ ifeq ($(ANDROID_ARCH),ARM64)
+ CFLAGS += -target aarch64 -mfix-cortex-a53-835769
+ endif
+ ifeq ($(ANDROID_ARCH),ARM)
+ CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
+ endif
# Compilation functions attributes options
CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIE -fPIC
# Compiler options for the linker
@@ -439,6 +452,9 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID)
ifeq ($(ANDROID_ARCH),ARM64)
$(ANDROID_NDK)/build/tools/make-standalone-toolchain.sh --platform=android-21 --toolchain=aarch64-linux-androideabi-4.9 --use-llvm --install-dir=$(ANDROID_TOOLCHAIN)
endif
+ ifeq ($(ANDROID_ARCH),ARM)
+ $(ANDROID_NDK)/build/tools/make-standalone-toolchain.sh --platform=android-21 --toolchain=arm-linux-androideabi-4.9 --use-llvm --install-dir=$(ANDROID_TOOLCHAIN)
+ endif
endif
# Compile raylib library
diff --git a/src/core.c b/src/core.c
index 58202888..28a04e4d 100644
--- a/src/core.c
+++ b/src/core.c
@@ -3098,6 +3098,15 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
//AMotionEvent_getAction()
//AMotionEvent_getAxisValue()
//AMotionEvent_getButtonState()
+
+ // This is all it takes to capture gamepad dpad button presses
+ int32_t keycode = AKeyEvent_getKeyCode(event);
+ if (AKeyEvent_getAction(event) == 0)
+ {
+ currentKeyState[keycode] = 1; // Key down
+ lastKeyPressed = keycode;
+ }
+ else currentKeyState[keycode] = 0; // Key up
}
else if (type == AINPUT_EVENT_TYPE_KEY)
{
@@ -3137,7 +3146,14 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
int32_t action = AMotionEvent_getAction(event);
unsigned int flags = action & AMOTION_EVENT_ACTION_MASK;
+
#if defined(SUPPORT_GESTURES_SYSTEM)
+
+ // @Completeness: Fix this so that gamepad does not cause this to crash
+ // If actions is not caputred in the above, then it may not be a gesture at all.
+ // If we do not end here, when we reach getPointerId there is a high likelyhood of crashing
+ return 0;
+
GestureEvent gestureEvent;
// Register touch actions
@@ -3147,21 +3163,24 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
// Register touch points count
gestureEvent.pointCount = AMotionEvent_getPointerCount(event);
+ // Documentation says pointerCount is Always >= 1.
+ // But in practice it can be 0 or over a million
// Register touch points id
+
+ // Register touch points position
+ // NOTE: Only two points registered
+ // @Fix: This is where the break happens for dpads
gestureEvent.pointerId[0] = AMotionEvent_getPointerId(event, 0);
gestureEvent.pointerId[1] = AMotionEvent_getPointerId(event, 1);
- // Register touch points position
- // NOTE: Only two points registered
gestureEvent.position[0] = (Vector2){ AMotionEvent_getX(event, 0), AMotionEvent_getY(event, 0) };
gestureEvent.position[1] = (Vector2){ AMotionEvent_getX(event, 1), AMotionEvent_getY(event, 1) };
// Normalize gestureEvent.position[x] for screenWidth and screenHeight
gestureEvent.position[0].x /= (float)GetScreenWidth();
- gestureEvent.position[0].y /= (float)GetScreenHeight();
-
gestureEvent.position[1].x /= (float)GetScreenWidth();
+ gestureEvent.position[0].y /= (float)GetScreenHeight();
gestureEvent.position[1].y /= (float)GetScreenHeight();
// Gesture data is sent to gestures system for processing
diff --git a/src/raylib.h b/src/raylib.h
index 4297e582..b68a36c6 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -241,6 +241,24 @@
#define GAMEPAD_XBOX_BUTTON_LEFT 13
#define GAMEPAD_XBOX_BUTTON_HOME 8
+// 8BitDo Gamepad SNES CLASSIC
+#define GAMEPAD_SNES_DPAD_UP 19
+#define GAMEPAD_SNES_DPAD_DOWN 20
+#define GAMEPAD_SNES_DPAD_LEFT 21
+#define GAMEPAD_SNES_DPAD_RIGHT 22
+#define GAMEPAD_SNES_DPAD_CENTER 23
+
+#define GAMEPAD_SNES_BUTTON_A 96
+#define GAMEPAD_SNES_BUTTON_B 97
+#define GAMEPAD_SNES_BUTTON_C 98
+#define GAMEPAD_SNES_BUTTON_X 99
+#define GAMEPAD_SNES_BUTTON_Y 100
+#define GAMEPAD_SNES_BUTTON_Z 101
+#define GAMEPAD_SNES_BUTTON_L1 102
+#define GAMEPAD_SNES_BUTTON_R1 103
+#define GAMEPAD_SNES_BUTTON_L2 104
+#define GAMEPAD_SNES_BUTTON_R2 105
+
// Xbox360 USB Controller Axis
// NOTE: For Raspberry Pi, axis must be reconfigured
#if defined(PLATFORM_RPI)