mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-06 19:38:15 +00:00
Merge pull request #70 from victorfisac/develop
Fixed Android bug and added physic buttons inputs
This commit is contained in:
60
src/core.c
60
src/core.c
@@ -122,6 +122,8 @@ static int ident, events;
|
|||||||
static bool windowReady = false; // Used to detect display initialization
|
static bool windowReady = false; // Used to detect display initialization
|
||||||
static bool appEnabled = true; // Used to detec if app is active
|
static bool appEnabled = true; // Used to detec if app is active
|
||||||
static bool contextRebindRequired = false; // Used to know context rebind required
|
static bool contextRebindRequired = false; // Used to know context rebind required
|
||||||
|
static int previousButtonState[512] = { 1 }; // Required to check if button pressed/released once
|
||||||
|
static int currentButtonState[512] = { 1 }; // Required to check if button pressed/released once
|
||||||
#elif defined(PLATFORM_RPI)
|
#elif defined(PLATFORM_RPI)
|
||||||
static EGL_DISPMANX_WINDOW_T nativeWindow; // Native window (graphic device)
|
static EGL_DISPMANX_WINDOW_T nativeWindow; // Native window (graphic device)
|
||||||
|
|
||||||
@@ -365,6 +367,13 @@ void InitWindow(int width, int height, struct android_app *state)
|
|||||||
|
|
||||||
TraceLog(INFO, "Android app initialized successfully");
|
TraceLog(INFO, "Android app initialized successfully");
|
||||||
|
|
||||||
|
// Init button states values (default up)
|
||||||
|
for(int i = 0; i < 512; i++)
|
||||||
|
{
|
||||||
|
currentButtonState[i] = 1;
|
||||||
|
previousButtonState[i] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Wait for window to be initialized (display and context)
|
// Wait for window to be initialized (display and context)
|
||||||
while (!windowReady)
|
while (!windowReady)
|
||||||
{
|
{
|
||||||
@@ -1101,6 +1110,35 @@ Vector2 GetTouchPosition(void)
|
|||||||
|
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Detect if a button has been pressed once
|
||||||
|
bool IsButtonPressed(int button)
|
||||||
|
{
|
||||||
|
bool pressed = false;
|
||||||
|
|
||||||
|
if ((currentButtonState[button] != previousButtonState[button]) && (currentButtonState[button] == 0)) pressed = true;
|
||||||
|
else pressed = false;
|
||||||
|
|
||||||
|
return pressed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect if a button is being pressed (button held down)
|
||||||
|
bool IsButtonDown(int button)
|
||||||
|
{
|
||||||
|
if (currentButtonState[button] == 0) return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect if a button has been released once
|
||||||
|
bool IsButtonReleased(int button)
|
||||||
|
{
|
||||||
|
bool released = false;
|
||||||
|
|
||||||
|
if ((currentButtonState[button] != previousButtonState[button]) && (currentButtonState[button] == 1)) released = true;
|
||||||
|
else released = false;
|
||||||
|
|
||||||
|
return released;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
@@ -1648,12 +1686,22 @@ static int32_t AndroidInputCallback(struct android_app *app, AInputEvent *event)
|
|||||||
{
|
{
|
||||||
int32_t keycode = AKeyEvent_getKeyCode(event);
|
int32_t keycode = AKeyEvent_getKeyCode(event);
|
||||||
//int32_t AKeyEvent_getMetaState(event);
|
//int32_t AKeyEvent_getMetaState(event);
|
||||||
|
|
||||||
|
// Save current button and its state
|
||||||
|
currentButtonState[keycode] = AKeyEvent_getAction (event); // Down = 0, Up = 1
|
||||||
|
|
||||||
//if (keycode == AKEYCODE_HOME) { }
|
if (keycode == AKEYCODE_POWER)
|
||||||
//if (keycode == AKEYCODE_POWER) { }
|
|
||||||
if (keycode == AKEYCODE_BACK)
|
|
||||||
{
|
{
|
||||||
// Eat BACK_BUTTON, just do nothing... and don't let to be handled by OS!
|
// Let the OS handle input to avoid app stuck. Behaviour: CMD_PAUSE -> CMD_SAVE_STATE -> CMD_STOP -> CMD_CONFIG_CHANGED -> CMD_LOST_FOCUS
|
||||||
|
// Resuming Behaviour: CMD_START -> CMD_RESUME -> CMD_CONFIG_CHANGED -> CMD_CONFIG_CHANGED -> CMD_GAINED_FOCUS
|
||||||
|
// It seems like locking mobile, screen size (CMD_CONFIG_CHANGED) is affected.
|
||||||
|
// NOTE: AndroidManifest.xml must have <activity android:configChanges="orientation|keyboardHidden|screenSize" >
|
||||||
|
// Before that change, activity was calling CMD_TERM_WINDOW and CMD_DESTROY when locking mobile, so that was not a normal behaviour
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if ((keycode == AKEYCODE_BACK) || (keycode == AKEYCODE_MENU))
|
||||||
|
{
|
||||||
|
// Eat BACK_BUTTON and AKEYCODE_MENU, just do nothing... and don't let to be handled by OS!
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if ((keycode == AKEYCODE_VOLUME_UP) || (keycode == AKEYCODE_VOLUME_DOWN))
|
else if ((keycode == AKEYCODE_VOLUME_UP) || (keycode == AKEYCODE_VOLUME_DOWN))
|
||||||
@@ -1778,6 +1826,7 @@ static void PollInputEvents(void)
|
|||||||
|
|
||||||
// TODO: Remove this requirement...
|
// TODO: Remove this requirement...
|
||||||
UpdateGestures();
|
UpdateGestures();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
||||||
@@ -1806,6 +1855,9 @@ static void PollInputEvents(void)
|
|||||||
glfwPollEvents(); // Register keyboard/mouse events... and window events!
|
glfwPollEvents(); // Register keyboard/mouse events... and window events!
|
||||||
#elif defined(PLATFORM_ANDROID)
|
#elif defined(PLATFORM_ANDROID)
|
||||||
|
|
||||||
|
// Register previous keys states
|
||||||
|
for (int i = 0; i < 512; i++) previousButtonState[i] = currentButtonState[i];
|
||||||
|
|
||||||
// Poll Events (registered events)
|
// Poll Events (registered events)
|
||||||
// NOTE: Activity is paused if not enabled (appEnabled)
|
// NOTE: Activity is paused if not enabled (appEnabled)
|
||||||
while ((ident = ALooper_pollAll(appEnabled ? 0 : -1, NULL, &events,(void**)&source)) >= 0)
|
while ((ident = ALooper_pollAll(appEnabled ? 0 : -1, NULL, &events,(void**)&source)) >= 0)
|
||||||
|
@@ -61,7 +61,7 @@ static Vector2 Vector2Normalize(Vector2 vector);
|
|||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Definitions
|
// Module Functions Definitions
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
void InitPhysics()
|
void InitPhysics(void)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < MAX_ELEMENTS; i++)
|
for (int i = 0; i < MAX_ELEMENTS; i++)
|
||||||
{
|
{
|
||||||
|
@@ -76,7 +76,7 @@ extern "C" { // Prevents name mangling of functions
|
|||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Declarations
|
// Module Functions Declarations
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
void InitPhysics(); // Initialize all internal physics values
|
void InitPhysics(void); // Initialize all internal physics values
|
||||||
void SetPhysics(Physics settings); // Set physics settings values using Physics data type to overwrite internal physics settings
|
void SetPhysics(Physics settings); // Set physics settings values using Physics data type to overwrite internal physics settings
|
||||||
|
|
||||||
void AddRigidbody(int index, Rigidbody rigidbody); // Initialize a new rigidbody with parameters to internal index slot
|
void AddRigidbody(int index, Rigidbody rigidbody); // Initialize a new rigidbody with parameters to internal index slot
|
||||||
|
11
src/raylib.h
11
src/raylib.h
@@ -186,6 +186,12 @@
|
|||||||
|
|
||||||
// TODO: Review Xbox360 USB Controller Buttons
|
// TODO: Review Xbox360 USB Controller Buttons
|
||||||
|
|
||||||
|
// Android Physic Buttons
|
||||||
|
#define ANDROID_BACK 4
|
||||||
|
#define ANDROID_MENU 82
|
||||||
|
#define ANDROID_VOLUME_UP 24
|
||||||
|
#define ANDROID_VOLUME_DOWN 25
|
||||||
|
|
||||||
// Some Basic Colors
|
// Some Basic Colors
|
||||||
// NOTE: Custom raylib color palette for amazing visuals on WHITE background
|
// NOTE: Custom raylib color palette for amazing visuals on WHITE background
|
||||||
#define LIGHTGRAY (Color){ 200, 200, 200, 255 } // Light Gray
|
#define LIGHTGRAY (Color){ 200, 200, 200, 255 } // Light Gray
|
||||||
@@ -581,6 +587,9 @@ bool IsGamepadButtonUp(int gamepad, int button); // Detect if a gamepad b
|
|||||||
int GetTouchX(void); // Returns touch position X (relative to screen size)
|
int GetTouchX(void); // Returns touch position X (relative to screen size)
|
||||||
int GetTouchY(void); // Returns touch position Y (relative to screen size)
|
int GetTouchY(void); // Returns touch position Y (relative to screen size)
|
||||||
Vector2 GetTouchPosition(void); // Returns touch position XY (relative to screen size)
|
Vector2 GetTouchPosition(void); // Returns touch position XY (relative to screen size)
|
||||||
|
bool IsButtonPressed(int button); // Detect if an android physic button has been pressed
|
||||||
|
bool IsButtonDown(int button); // Detect if an android physic button is being pressed
|
||||||
|
bool IsButtonReleased(int button); // Detect if an android physic button has been released
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
// Gestures and Touch Handling Functions (Module: gestures)
|
// Gestures and Touch Handling Functions (Module: gestures)
|
||||||
@@ -796,7 +805,7 @@ void SetMaterialNormalDepth(Material *material, float depth); // Set n
|
|||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Physics System Functions (engine-module: physics)
|
// Physics System Functions (engine-module: physics)
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
void InitPhysics(); // Initialize all internal physics values
|
void InitPhysics(void); // Initialize all internal physics values
|
||||||
void SetPhysics(Physics settings); // Set physics settings values using Physics data type to overwrite internal physics settings
|
void SetPhysics(Physics settings); // Set physics settings values using Physics data type to overwrite internal physics settings
|
||||||
|
|
||||||
void AddRigidbody(int index, Rigidbody rigidbody); // Initialize a new rigidbody with parameters to internal index slot
|
void AddRigidbody(int index, Rigidbody rigidbody); // Initialize a new rigidbody with parameters to internal index slot
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
|
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
|
||||||
<!-- Our activity is the built-in NativeActivity framework class. -->
|
<!-- Our activity is the built-in NativeActivity framework class. -->
|
||||||
<activity android:name="android.app.NativeActivity"
|
<activity android:name="android.app.NativeActivity"
|
||||||
android:configChanges="orientation|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||||
android:screenOrientation="landscape"
|
android:screenOrientation="landscape"
|
||||||
android:clearTaskOnLaunch="true" >
|
android:clearTaskOnLaunch="true" >
|
||||||
<!-- android:theme="@android:style/Theme.NoTitleBar.Fullscreen" -->
|
<!-- android:theme="@android:style/Theme.NoTitleBar.Fullscreen" -->
|
||||||
|
@@ -186,6 +186,12 @@
|
|||||||
|
|
||||||
// TODO: Review Xbox360 USB Controller Buttons
|
// TODO: Review Xbox360 USB Controller Buttons
|
||||||
|
|
||||||
|
// Android Physic Buttons
|
||||||
|
#define ANDROID_BACK 4
|
||||||
|
#define ANDROID_MENU 82
|
||||||
|
#define ANDROID_VOLUME_UP 24
|
||||||
|
#define ANDROID_VOLUME_DOWN 25
|
||||||
|
|
||||||
// Some Basic Colors
|
// Some Basic Colors
|
||||||
// NOTE: Custom raylib color palette for amazing visuals on WHITE background
|
// NOTE: Custom raylib color palette for amazing visuals on WHITE background
|
||||||
#define LIGHTGRAY (Color){ 200, 200, 200, 255 } // Light Gray
|
#define LIGHTGRAY (Color){ 200, 200, 200, 255 } // Light Gray
|
||||||
@@ -540,6 +546,9 @@ bool IsFileDropped(void); // Check if a file h
|
|||||||
char **GetDroppedFiles(int *count); // Retrieve dropped files into window
|
char **GetDroppedFiles(int *count); // Retrieve dropped files into window
|
||||||
void ClearDroppedFiles(void); // Clear dropped files paths buffer
|
void ClearDroppedFiles(void); // Clear dropped files paths buffer
|
||||||
|
|
||||||
|
void StorageSaveValue(int position, int value); // Storage save integer value (to defined position)
|
||||||
|
int StorageLoadValue(int position); // Storage load integer value (from defined position)
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
// Input Handling Functions (Module: core)
|
// Input Handling Functions (Module: core)
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
@@ -578,6 +587,9 @@ bool IsGamepadButtonUp(int gamepad, int button); // Detect if a gamepad b
|
|||||||
int GetTouchX(void); // Returns touch position X (relative to screen size)
|
int GetTouchX(void); // Returns touch position X (relative to screen size)
|
||||||
int GetTouchY(void); // Returns touch position Y (relative to screen size)
|
int GetTouchY(void); // Returns touch position Y (relative to screen size)
|
||||||
Vector2 GetTouchPosition(void); // Returns touch position XY (relative to screen size)
|
Vector2 GetTouchPosition(void); // Returns touch position XY (relative to screen size)
|
||||||
|
bool IsButtonPressed(int button); // Detect if an android physic button has been pressed
|
||||||
|
bool IsButtonDown(int button); // Detect if an android physic button is being pressed
|
||||||
|
bool IsButtonReleased(int button); // Detect if an android physic button has been released
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
// Gestures and Touch Handling Functions (Module: gestures)
|
// Gestures and Touch Handling Functions (Module: gestures)
|
||||||
@@ -793,21 +805,23 @@ void SetMaterialNormalDepth(Material *material, float depth); // Set n
|
|||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Physics System Functions (engine-module: physics)
|
// Physics System Functions (engine-module: physics)
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
void InitPhysics(); // Initialize all internal physics values
|
void InitPhysics(void); // Initialize all internal physics values
|
||||||
void SetPhysics(Physics settings); // Set physics settings values using Physics data type to overwrite internal physics settings
|
void SetPhysics(Physics settings); // Set physics settings values using Physics data type to overwrite internal physics settings
|
||||||
|
|
||||||
void AddRigidbody(int index, Rigidbody rigidbody); // Initialize a new rigidbody with parameters to internal index slot
|
void AddRigidbody(int index, Rigidbody rigidbody); // Initialize a new rigidbody with parameters to internal index slot
|
||||||
void AddCollider(int index, Collider collider); // Initialize a new Collider with parameters to internal index slot
|
void AddCollider(int index, Collider collider); // Initialize a new Collider with parameters to internal index slot
|
||||||
|
|
||||||
void ApplyPhysics(int index, Vector2 *position); // Apply physics to internal rigidbody, physics calculations are applied to position pointer parameter
|
void ApplyPhysics(int index, Vector2 *position); // Apply physics to internal rigidbody, physics calculations are applied to position pointer parameter
|
||||||
void SetRigidbodyEnabled(int index, bool state); // Set enabled state to a defined rigidbody
|
void SetRigidbodyEnabled(int index, bool state); // Set enabled state to a defined rigidbody
|
||||||
void SetRigidbodyVelocity(int index, Vector2 velocity); // Set velocity of rigidbody (without considering of mass value)
|
void SetRigidbodyVelocity(int index, Vector2 velocity); // Set velocity of rigidbody (without considering of mass value)
|
||||||
void AddRigidbodyForce(int index, Vector2 force); // Set rigidbody force (considering mass value)
|
void SetRigidbodyAcceleration(int index, Vector2 acceleration); // Set acceleration of rigidbody (without considering of mass value)
|
||||||
|
void AddRigidbodyForce(int index, Vector2 force); // Set rigidbody force (considering mass value)
|
||||||
|
void AddForceAtPosition(Vector2 position, float intensity, float radius); // Add a force to all enabled rigidbodies at a position
|
||||||
|
|
||||||
void SetColliderEnabled(int index, bool state); // Set enabled state to a defined collider
|
void SetColliderEnabled(int index, bool state); // Set enabled state to a defined collider
|
||||||
|
|
||||||
Rigidbody GetRigidbody(int index); // Returns the internal rigidbody data defined by index parameter
|
Rigidbody GetRigidbody(int index); // Returns the internal rigidbody data defined by index parameter
|
||||||
Collider GetCollider(int index); // Returns the internal collider data defined by index parameter
|
Collider GetCollider(int index); // Returns the internal collider data defined by index parameter
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------
|
||||||
// Audio Loading and Playing Functions (Module: audio)
|
// Audio Loading and Playing Functions (Module: audio)
|
||||||
|
Reference in New Issue
Block a user